Merge remote branch 'origin/master' into pipe-video
authorChristian König <deathsimple@vodafone.de>
Sat, 23 Apr 2011 12:27:40 +0000 (14:27 +0200)
committerChristian König <deathsimple@vodafone.de>
Sat, 23 Apr 2011 12:27:40 +0000 (14:27 +0200)
Conflicts:
configs/linux-dri
src/gallium/drivers/r600/r600_pipe.c
src/gallium/drivers/r600/r600_state.c
src/gallium/include/pipe/p_format.h
src/gallium/tests/graw/fragment-shader/frag-abs.sh
src/gallium/tests/graw/fragment-shader/frag-add.sh
src/gallium/tests/graw/fragment-shader/frag-cb-1d.sh
src/gallium/tests/graw/fragment-shader/frag-cb-2d.sh
src/gallium/tests/graw/fragment-shader/frag-dp3.sh
src/gallium/tests/graw/fragment-shader/frag-dp4.sh
src/gallium/tests/graw/fragment-shader/frag-dst.sh
src/gallium/tests/graw/fragment-shader/frag-ex2.sh
src/gallium/tests/graw/fragment-shader/frag-face.sh
src/gallium/tests/graw/fragment-shader/frag-flr.sh
src/gallium/tests/graw/fragment-shader/frag-frc.sh
src/gallium/tests/graw/fragment-shader/frag-kil.sh
src/gallium/tests/graw/fragment-shader/frag-lg2.sh
src/gallium/tests/graw/fragment-shader/frag-lit.sh
src/gallium/tests/graw/fragment-shader/frag-lrp.sh
src/gallium/tests/graw/fragment-shader/frag-mad-immx.sh
src/gallium/tests/graw/fragment-shader/frag-mad.sh
src/gallium/tests/graw/fragment-shader/frag-max.sh
src/gallium/tests/graw/fragment-shader/frag-min.sh
src/gallium/tests/graw/fragment-shader/frag-mov.sh
src/gallium/tests/graw/fragment-shader/frag-mul.sh
src/gallium/tests/graw/fragment-shader/frag-rcp.sh
src/gallium/tests/graw/fragment-shader/frag-rsq.sh
src/gallium/tests/graw/fragment-shader/frag-sge.sh
src/gallium/tests/graw/fragment-shader/frag-slt.sh
src/gallium/tests/graw/fragment-shader/frag-srcmod-abs.sh
src/gallium/tests/graw/fragment-shader/frag-srcmod-absneg.sh
src/gallium/tests/graw/fragment-shader/frag-srcmod-neg.sh
src/gallium/tests/graw/fragment-shader/frag-srcmod-swz.sh
src/gallium/tests/graw/fragment-shader/frag-sub.sh
src/gallium/tests/graw/fragment-shader/frag-tempx.sh
src/gallium/tests/graw/fragment-shader/frag-xpd.sh
src/gallium/tests/graw/vertex-shader/vert-abs.sh
src/gallium/tests/graw/vertex-shader/vert-add.sh
src/gallium/tests/graw/vertex-shader/vert-arl.sh
src/gallium/tests/graw/vertex-shader/vert-arr.sh
src/gallium/tests/graw/vertex-shader/vert-cb-1d.sh
src/gallium/tests/graw/vertex-shader/vert-cb-2d.sh
src/gallium/tests/graw/vertex-shader/vert-dp3.sh
src/gallium/tests/graw/vertex-shader/vert-dp4.sh
src/gallium/tests/graw/vertex-shader/vert-dst.sh
src/gallium/tests/graw/vertex-shader/vert-ex2.sh
src/gallium/tests/graw/vertex-shader/vert-flr.sh
src/gallium/tests/graw/vertex-shader/vert-frc.sh
src/gallium/tests/graw/vertex-shader/vert-lg2.sh
src/gallium/tests/graw/vertex-shader/vert-lit.sh
src/gallium/tests/graw/vertex-shader/vert-lrp.sh
src/gallium/tests/graw/vertex-shader/vert-mad.sh
src/gallium/tests/graw/vertex-shader/vert-max.sh
src/gallium/tests/graw/vertex-shader/vert-min.sh
src/gallium/tests/graw/vertex-shader/vert-mov.sh
src/gallium/tests/graw/vertex-shader/vert-mul.sh
src/gallium/tests/graw/vertex-shader/vert-rcp.sh
src/gallium/tests/graw/vertex-shader/vert-rsq.sh
src/gallium/tests/graw/vertex-shader/vert-sge.sh
src/gallium/tests/graw/vertex-shader/vert-slt.sh
src/gallium/tests/graw/vertex-shader/vert-srcmod-abs.sh
src/gallium/tests/graw/vertex-shader/vert-srcmod-absneg.sh
src/gallium/tests/graw/vertex-shader/vert-srcmod-neg.sh
src/gallium/tests/graw/vertex-shader/vert-srcmod-swz.sh
src/gallium/tests/graw/vertex-shader/vert-sub.sh
src/gallium/tests/graw/vertex-shader/vert-xpd.sh
src/gallium/tools/trace/dump.py
src/gallium/tools/trace/format.py
src/gallium/tools/trace/model.py
src/gallium/tools/trace/parse.py

653 files changed:
Makefile
bin/extract_git_sha1 [new file with mode: 0755]
configs/linux-dri
configure.ac
docs/ARB_color_buffer_float.txt [new file with mode: 0644]
docs/GL3.txt
docs/MESA_agp_offset.spec
docs/MESA_drm_image.spec
docs/MESA_pack_invert.spec
docs/MESA_release_buffers.spec
docs/MESA_resize_buffers.spec
docs/MESA_swap_control.spec
docs/MESA_texture_array.spec
docs/MESA_texture_signed_rgba.spec
docs/MESA_window_pos.spec
docs/MESA_ycbcr_texture.spec
docs/WL_bind_wayland_display.spec
docs/contents.html
docs/download.html
docs/envvars.html
docs/install.html
docs/llvmpipe.html [new file with mode: 0644]
docs/news.html
docs/patents.txt [new file with mode: 0644]
docs/relnotes-7.10.2.html [new file with mode: 0644]
docs/relnotes-7.11.html
docs/relnotes.html
include/EGL/eglplatform.h
include/GL/gl.h
scons/python.py [deleted file]
src/egl/drivers/dri2/egl_dri2.c
src/egl/drivers/dri2/egl_dri2.h
src/egl/drivers/dri2/platform_drm.c
src/egl/drivers/dri2/platform_wayland.c
src/egl/drivers/dri2/platform_x11.c
src/egl/wayland/wayland-drm/Makefile
src/egl/wayland/wayland-drm/protocol/wayland-drm.xml
src/egl/wayland/wayland-drm/wayland-drm.c
src/egl/wayland/wayland-egl/wayland-egl-priv.h
src/egl/wayland/wayland-egl/wayland-egl.c
src/gallium/SConscript
src/gallium/auxiliary/Makefile
src/gallium/auxiliary/SConscript
src/gallium/auxiliary/draw/draw_context.c
src/gallium/auxiliary/draw/draw_context.h
src/gallium/auxiliary/draw/draw_llvm.c
src/gallium/auxiliary/draw/draw_llvm.h
src/gallium/auxiliary/draw/draw_llvm_sample.c
src/gallium/auxiliary/draw/draw_pipe_vbuf.c
src/gallium/auxiliary/draw/draw_private.h
src/gallium/auxiliary/draw/draw_pt.c
src/gallium/auxiliary/draw/draw_pt_fetch.c
src/gallium/auxiliary/draw/draw_pt_fetch_emit.c
src/gallium/auxiliary/draw/draw_pt_fetch_shade_emit.c
src/gallium/auxiliary/draw/draw_pt_vsplit.c
src/gallium/auxiliary/draw/draw_pt_vsplit_tmp.h
src/gallium/auxiliary/draw/draw_vs.c
src/gallium/auxiliary/draw/draw_vs_exec.c
src/gallium/auxiliary/gallivm/lp_bld_debug.cpp
src/gallium/auxiliary/gallivm/lp_bld_sample.c
src/gallium/auxiliary/gallivm/lp_bld_sample.h
src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c
src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
src/gallium/auxiliary/rtasm/rtasm_x86sse.c
src/gallium/auxiliary/rtasm/rtasm_x86sse.h
src/gallium/auxiliary/translate/translate_generic.c
src/gallium/auxiliary/translate/translate_sse.c
src/gallium/auxiliary/util/u_cpu_detect.c
src/gallium/auxiliary/util/u_cpu_detect.h
src/gallium/auxiliary/util/u_double_list.h
src/gallium/auxiliary/util/u_draw.c [new file with mode: 0644]
src/gallium/auxiliary/util/u_draw.h
src/gallium/auxiliary/util/u_format.c
src/gallium/auxiliary/util/u_format.csv
src/gallium/auxiliary/util/u_format.h
src/gallium/auxiliary/util/u_surface.c
src/gallium/auxiliary/util/u_vbuf_mgr.c
src/gallium/auxiliary/util/u_vbuf_mgr.h
src/gallium/auxiliary/vl/vl_mpeg12_decoder.c
src/gallium/docs/source/context.rst
src/gallium/docs/source/cso/rasterizer.rst
src/gallium/drivers/galahad/glhd_context.c
src/gallium/drivers/i915/i915_screen.c
src/gallium/drivers/i915/i915_surface.c
src/gallium/drivers/i965/brw_screen.c
src/gallium/drivers/llvmpipe/README [deleted file]
src/gallium/drivers/llvmpipe/lp_jit.c
src/gallium/drivers/llvmpipe/lp_jit.h
src/gallium/drivers/llvmpipe/lp_screen.c
src/gallium/drivers/llvmpipe/lp_setup.c
src/gallium/drivers/llvmpipe/lp_state_sampler.c
src/gallium/drivers/llvmpipe/lp_surface.c
src/gallium/drivers/llvmpipe/lp_tex_sample.c
src/gallium/drivers/noop/noop_pipe.c
src/gallium/drivers/nv50/nv50_3d.xml.h
src/gallium/drivers/nv50/nv50_context.c
src/gallium/drivers/nv50/nv50_context.h
src/gallium/drivers/nv50/nv50_debug.h [new file with mode: 0644]
src/gallium/drivers/nv50/nv50_formats.c
src/gallium/drivers/nv50/nv50_pc.c
src/gallium/drivers/nv50/nv50_pc.h
src/gallium/drivers/nv50/nv50_pc_optimize.c
src/gallium/drivers/nv50/nv50_pc_regalloc.c
src/gallium/drivers/nv50/nv50_program.c
src/gallium/drivers/nv50/nv50_screen.c
src/gallium/drivers/nv50/nv50_shader_state.c
src/gallium/drivers/nv50/nv50_state.c
src/gallium/drivers/nv50/nv50_state_validate.c
src/gallium/drivers/nv50/nv50_stateobj.h
src/gallium/drivers/nv50/nv50_surface.c
src/gallium/drivers/nv50/nv50_tgsi_to_nc.c
src/gallium/drivers/nvc0/nvc0_3d.xml.h
src/gallium/drivers/nvc0/nvc0_context.c
src/gallium/drivers/nvc0/nvc0_context.h
src/gallium/drivers/nvc0/nvc0_formats.c
src/gallium/drivers/nvc0/nvc0_graph_macros.h
src/gallium/drivers/nvc0/nvc0_pc.c
src/gallium/drivers/nvc0/nvc0_pc.h
src/gallium/drivers/nvc0/nvc0_pc_emit.c
src/gallium/drivers/nvc0/nvc0_pc_optimize.c
src/gallium/drivers/nvc0/nvc0_pc_regalloc.c
src/gallium/drivers/nvc0/nvc0_program.c
src/gallium/drivers/nvc0/nvc0_screen.c
src/gallium/drivers/nvc0/nvc0_shader_state.c
src/gallium/drivers/nvc0/nvc0_state.c
src/gallium/drivers/nvc0/nvc0_state_validate.c
src/gallium/drivers/nvc0/nvc0_stateobj.h
src/gallium/drivers/nvc0/nvc0_surface.c
src/gallium/drivers/nvc0/nvc0_tgsi_to_nc.c
src/gallium/drivers/nvfx/nvfx_context.c
src/gallium/drivers/nvfx/nvfx_screen.c
src/gallium/drivers/nvfx/nvfx_surface.c
src/gallium/drivers/r300/Makefile
src/gallium/drivers/r300/SConscript
src/gallium/drivers/r300/r300_blit.c
src/gallium/drivers/r300/r300_chipset.c
src/gallium/drivers/r300/r300_chipset.h
src/gallium/drivers/r300/r300_context.c
src/gallium/drivers/r300/r300_context.h
src/gallium/drivers/r300/r300_cs.h
src/gallium/drivers/r300/r300_defines.h
src/gallium/drivers/r300/r300_emit.c
src/gallium/drivers/r300/r300_flush.c
src/gallium/drivers/r300/r300_fs.c
src/gallium/drivers/r300/r300_hyperz.c
src/gallium/drivers/r300/r300_public.h
src/gallium/drivers/r300/r300_query.c
src/gallium/drivers/r300/r300_render.c
src/gallium/drivers/r300/r300_screen.c
src/gallium/drivers/r300/r300_screen.h
src/gallium/drivers/r300/r300_screen_buffer.c
src/gallium/drivers/r300/r300_screen_buffer.h
src/gallium/drivers/r300/r300_state.c
src/gallium/drivers/r300/r300_state_derived.c
src/gallium/drivers/r300/r300_texture.c
src/gallium/drivers/r300/r300_texture.h
src/gallium/drivers/r300/r300_texture_desc.c
src/gallium/drivers/r300/r300_texture_desc.h
src/gallium/drivers/r300/r300_tgsi_to_rc.c
src/gallium/drivers/r300/r300_transfer.c
src/gallium/drivers/r300/r300_winsys.h [deleted file]
src/gallium/drivers/r600/eg_state_inlines.h
src/gallium/drivers/r600/evergreen_state.c
src/gallium/drivers/r600/evergreend.h
src/gallium/drivers/r600/r600.h
src/gallium/drivers/r600/r600_asm.c
src/gallium/drivers/r600/r600_asm.h
src/gallium/drivers/r600/r600_blit.c
src/gallium/drivers/r600/r600_buffer.c
src/gallium/drivers/r600/r600_pipe.c
src/gallium/drivers/r600/r600_pipe.h
src/gallium/drivers/r600/r600_shader.c
src/gallium/drivers/r600/r600_state.c
src/gallium/drivers/r600/r600_state_common.c
src/gallium/drivers/r600/r600_state_inlines.h
src/gallium/drivers/r600/r600d.h
src/gallium/drivers/softpipe/sp_tex_sample.c
src/gallium/drivers/svga/include/svga3d_reg.h
src/gallium/drivers/svga/svga_context.c
src/gallium/drivers/svga/svga_context.h
src/gallium/drivers/svga/svga_draw.c
src/gallium/drivers/svga/svga_draw_private.h
src/gallium/drivers/svga/svga_pipe_blit.c
src/gallium/drivers/svga/svga_pipe_clear.c
src/gallium/drivers/svga/svga_resource_buffer_upload.c
src/gallium/drivers/svga/svga_resource_texture.c
src/gallium/drivers/svga/svga_screen.c
src/gallium/drivers/svga/svga_state_framebuffer.c
src/gallium/drivers/svga/svga_state_tss.c
src/gallium/drivers/trace/README
src/gallium/drivers/trace/tr_context.c
src/gallium/drivers/trace/tr_dump_state.c
src/gallium/drivers/trace/tr_dump_state.h
src/gallium/drivers/trace/tr_screen.c
src/gallium/drivers/trace/tr_texture.c
src/gallium/drivers/trace/tr_texture.h
src/gallium/include/pipe/p_compiler.h
src/gallium/include/pipe/p_defines.h
src/gallium/include/pipe/p_format.h
src/gallium/include/pipe/p_state.h
src/gallium/state_trackers/egl/wayland/native_wayland.c
src/gallium/state_trackers/egl/wayland/native_wayland.h
src/gallium/state_trackers/python/README [deleted file]
src/gallium/state_trackers/python/SConscript [deleted file]
src/gallium/state_trackers/python/gallium.i [deleted file]
src/gallium/state_trackers/python/p_compiler.i [deleted file]
src/gallium/state_trackers/python/p_context.i [deleted file]
src/gallium/state_trackers/python/p_device.i [deleted file]
src/gallium/state_trackers/python/p_state.i [deleted file]
src/gallium/state_trackers/python/p_texture.i [deleted file]
src/gallium/state_trackers/python/st_device.c [deleted file]
src/gallium/state_trackers/python/st_device.h [deleted file]
src/gallium/state_trackers/python/st_hardpipe_winsys.c [deleted file]
src/gallium/state_trackers/python/st_sample.c [deleted file]
src/gallium/state_trackers/python/st_sample.h [deleted file]
src/gallium/state_trackers/python/st_softpipe_winsys.c [deleted file]
src/gallium/state_trackers/python/st_winsys.h [deleted file]
src/gallium/state_trackers/python/tests/regress/fragment-shader/frag-abs.png [deleted file]
src/gallium/state_trackers/python/u_format.i [deleted file]
src/gallium/state_trackers/vega/shaders_cache.c
src/gallium/state_trackers/wgl/stw_ext_pbuffer.c
src/gallium/state_trackers/wgl/stw_framebuffer.c
src/gallium/targets/dri-r300/target.c
src/gallium/targets/egl-static/egl_pipe.c
src/gallium/targets/egl/pipe_r300.c
src/gallium/targets/xorg-radeon/radeon_target.c
src/gallium/tests/graw/fragment-shader [deleted symlink]
src/gallium/tests/graw/fragment-shader/frag-abs.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-add.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-cb-1d.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-cb-2d.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-dp3.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-dp4.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-dst.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-ex2.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-face.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-flr.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-frc.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-kil.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-lg2.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-lit.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-lrp.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-mad-immx.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-mad.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-max.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-min.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-mov.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-mul.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-rcp.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-rsq.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-sge.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-slt.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-srcmod-abs.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-srcmod-absneg.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-srcmod-neg.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-srcmod-swz.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-sub.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-tempx.sh [new file with mode: 0644]
src/gallium/tests/graw/fragment-shader/frag-xpd.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader [deleted symlink]
src/gallium/tests/graw/vertex-shader/vert-abs.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-add.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-arl.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-arr.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-cb-1d.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-cb-2d.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-dp3.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-dp4.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-dst.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-ex2.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-flr.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-frc.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-lg2.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-lit.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-lrp.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-mad.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-max.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-min.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-mov.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-mul.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-rcp.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-rsq.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-sge.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-slt.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-srcmod-abs.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-srcmod-absneg.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-srcmod-neg.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-srcmod-swz.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-sub.sh [new file with mode: 0644]
src/gallium/tests/graw/vertex-shader/vert-xpd.sh [new file with mode: 0644]
src/gallium/tests/python/retrace/interpreter.py [deleted file]
src/gallium/tests/python/tests/regress/fragment-shader/frag-cb-2d.sh [deleted file]
src/gallium/tests/python/tests/regress/fragment-shader/frag-face.sh [deleted file]
src/gallium/tests/python/tests/regress/fragment-shader/frag-kil.sh [deleted file]
src/gallium/tests/python/tests/regress/fragment-shader/frag-mad-immx.sh [deleted file]
src/gallium/tests/python/tests/regress/fragment-shader/frag-tempx.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-abs.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-add.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-arl.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-arr.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-cb-1d.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-cb-2d.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-dp3.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-dp4.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-dst.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-ex2.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-flr.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-frc.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-lg2.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-lit.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-lrp.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-mad.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-max.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-min.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-mov.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-mul.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-rcp.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-rsq.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-sge.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-slt.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-srcmod-abs.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-srcmod-absneg.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-srcmod-neg.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-srcmod-swz.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-sub.sh [deleted file]
src/gallium/tests/python/tests/regress/vertex-shader/vert-xpd.sh [deleted file]
src/gallium/tests/python/tests/surface_copy.py [deleted file]
src/gallium/tests/python/tests/texture_blit.py [deleted file]
src/gallium/tests/python/tests/texture_transfer.py [deleted file]
src/gallium/tests/unit/SConscript
src/gallium/tests/unit/translate_test.c
src/gallium/tools/trace/dump.py [new file with mode: 0755]
src/gallium/tools/trace/format.py [new file with mode: 0755]
src/gallium/tools/trace/model.py [new file with mode: 0755]
src/gallium/tools/trace/parse.py [new file with mode: 0755]
src/gallium/winsys/i915/drm/i915_drm_winsys.c
src/gallium/winsys/r600/drm/evergreen_hw_context.c
src/gallium/winsys/r600/drm/r600_drm.c
src/gallium/winsys/r600/drm/r600_hw_context.c
src/gallium/winsys/r600/drm/r600_priv.h
src/gallium/winsys/r600/drm/radeon_bo.c
src/gallium/winsys/r600/drm/radeon_pciid.c
src/gallium/winsys/radeon/drm/Makefile
src/gallium/winsys/radeon/drm/SConscript
src/gallium/winsys/radeon/drm/radeon_drm_bo.c
src/gallium/winsys/radeon/drm/radeon_drm_bo.h
src/gallium/winsys/radeon/drm/radeon_drm_common.c [deleted file]
src/gallium/winsys/radeon/drm/radeon_drm_cs.c
src/gallium/winsys/radeon/drm/radeon_drm_cs.h
src/gallium/winsys/radeon/drm/radeon_drm_public.h
src/gallium/winsys/radeon/drm/radeon_drm_winsys.c [new file with mode: 0644]
src/gallium/winsys/radeon/drm/radeon_drm_winsys.h [new file with mode: 0644]
src/gallium/winsys/radeon/drm/radeon_winsys.h
src/glsl/ast_function.cpp
src/glsl/ast_to_hir.cpp
src/glsl/glcpp/glcpp-parse.y
src/glsl/glcpp/tests/084-unbalanced-parentheses.c.expected [new file with mode: 0644]
src/glsl/glcpp/tests/093-divide-by-zero.c.expected [new file with mode: 0644]
src/glsl/glcpp/tests/094-divide-by-zero-short-circuit.c
src/glsl/glcpp/tests/094-divide-by-zero-short-circuit.c.expected [new file with mode: 0644]
src/glsl/glcpp/tests/095-recursive-define.c.expected [new file with mode: 0644]
src/glsl/glcpp/tests/glcpp-test
src/glsl/glsl_parser_extras.cpp
src/glsl/glsl_parser_extras.h
src/glsl/ir.h
src/glsl/ir_clone.cpp
src/glsl/ir_print_visitor.cpp
src/glsl/ir_print_visitor.h
src/glsl/ir_validate.cpp
src/glsl/ir_variable.cpp
src/glsl/linker.cpp
src/glsl/opt_copy_propagation_elements.cpp
src/glx/dri2_glx.c
src/glx/glxext.c
src/glx/indirect.c
src/glx/indirect.h
src/glx/indirect_init.c
src/mapi/glapi/gen/ARB_color_buffer_float.xml [new file with mode: 0644]
src/mapi/glapi/gen/ARB_sampler_objects.xml [new file with mode: 0644]
src/mapi/glapi/gen/ARB_texture_buffer_object.xml [new file with mode: 0644]
src/mapi/glapi/gen/GL3x.xml
src/mapi/glapi/gen/Makefile
src/mapi/glapi/gen/gl_API.xml
src/mapi/glapi/gen/gl_XML.py
src/mapi/glapi/glapi_mapi_tmp.h
src/mapi/glapi/glapi_sparc.S
src/mapi/glapi/glapi_x86-64.S
src/mapi/glapi/glapi_x86.S
src/mapi/glapi/glapitable.h
src/mapi/glapi/glapitemp.h
src/mapi/glapi/glprocs.h
src/mesa/SConscript
src/mesa/drivers/SConscript [new file with mode: 0644]
src/mesa/drivers/common/meta.c
src/mesa/drivers/dri/common/spantmp2.h
src/mesa/drivers/dri/common/texmem.c
src/mesa/drivers/dri/common/utils.c
src/mesa/drivers/dri/common/utils.h
src/mesa/drivers/dri/common/xmlconfig.c
src/mesa/drivers/dri/i810/i810context.c
src/mesa/drivers/dri/i810/i810tex.c
src/mesa/drivers/dri/i915/i830_texstate.c
src/mesa/drivers/dri/i915/i915_context.c
src/mesa/drivers/dri/i915/i915_context.h
src/mesa/drivers/dri/i915/i915_fragprog.c
src/mesa/drivers/dri/i915/i915_state.c
src/mesa/drivers/dri/i915/i915_texstate.c
src/mesa/drivers/dri/i915/i915_vtbl.c
src/mesa/drivers/dri/i965/brw_cc.c
src/mesa/drivers/dri/i965/brw_context.c
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_defines.h
src/mesa/drivers/dri/i965/brw_draw.c
src/mesa/drivers/dri/i965/brw_draw_upload.c
src/mesa/drivers/dri/i965/brw_eu.c
src/mesa/drivers/dri/i965/brw_eu.h
src/mesa/drivers/dri/i965/brw_eu_emit.c
src/mesa/drivers/dri/i965/brw_fs.cpp
src/mesa/drivers/dri/i965/brw_fs.h
src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp
src/mesa/drivers/dri/i965/brw_gs.c
src/mesa/drivers/dri/i965/brw_gs.h
src/mesa/drivers/dri/i965/brw_gs_emit.c
src/mesa/drivers/dri/i965/brw_misc_state.c
src/mesa/drivers/dri/i965/brw_program.c
src/mesa/drivers/dri/i965/brw_sf_state.c
src/mesa/drivers/dri/i965/brw_state_dump.c
src/mesa/drivers/dri/i965/brw_structs.h
src/mesa/drivers/dri/i965/brw_vs.c
src/mesa/drivers/dri/i965/brw_vs.h
src/mesa/drivers/dri/i965/brw_vs_emit.c
src/mesa/drivers/dri/i965/brw_vtbl.c
src/mesa/drivers/dri/i965/brw_wm.c
src/mesa/drivers/dri/i965/brw_wm.h
src/mesa/drivers/dri/i965/brw_wm_emit.c
src/mesa/drivers/dri/i965/brw_wm_sampler_state.c
src/mesa/drivers/dri/i965/brw_wm_state.c
src/mesa/drivers/dri/i965/brw_wm_surface_state.c
src/mesa/drivers/dri/i965/gen6_cc.c
src/mesa/drivers/dri/i965/gen6_gs_state.c
src/mesa/drivers/dri/i965/gen6_urb.c
src/mesa/drivers/dri/i965/gen6_vs_state.c
src/mesa/drivers/dri/i965/gen6_wm_state.c
src/mesa/drivers/dri/intel/intel_batchbuffer.c
src/mesa/drivers/dri/intel/intel_blit.c
src/mesa/drivers/dri/intel/intel_chipset.h
src/mesa/drivers/dri/intel/intel_context.c
src/mesa/drivers/dri/intel/intel_context.h
src/mesa/drivers/dri/intel/intel_extensions.c
src/mesa/drivers/dri/intel/intel_fbo.c
src/mesa/drivers/dri/intel/intel_span.c
src/mesa/drivers/dri/intel/intel_tex_format.c
src/mesa/drivers/dri/intel/intel_tex_image.c
src/mesa/drivers/dri/intel/intel_tex_subimage.c
src/mesa/drivers/dri/intel/intel_tex_validate.c
src/mesa/drivers/dri/mach64/mach64_dd.c
src/mesa/drivers/dri/mach64/mach64_tex.c
src/mesa/drivers/dri/mga/mgadd.c
src/mesa/drivers/dri/mga/mgatex.c
src/mesa/drivers/dri/nouveau/nouveau_driver.c
src/mesa/drivers/dri/nouveau/nouveau_driver.h
src/mesa/drivers/dri/nouveau/nouveau_texture.c
src/mesa/drivers/dri/nouveau/nv04_state_tex.c
src/mesa/drivers/dri/nouveau/nv10_state_tex.c
src/mesa/drivers/dri/nouveau/nv20_state_tex.c
src/mesa/drivers/dri/r128/r128_dd.c
src/mesa/drivers/dri/r128/r128_span.c
src/mesa/drivers/dri/r128/r128_tex.c
src/mesa/drivers/dri/r200/r200_context.c
src/mesa/drivers/dri/r200/r200_tex.c
src/mesa/drivers/dri/r300/compiler/r300_fragprog_emit.c
src/mesa/drivers/dri/r300/compiler/r3xx_vertprog.c
src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c
src/mesa/drivers/dri/r300/compiler/radeon_code.h
src/mesa/drivers/dri/r300/compiler/radeon_compiler.c
src/mesa/drivers/dri/r300/compiler/radeon_dataflow.c
src/mesa/drivers/dri/r300/compiler/radeon_opcodes.c
src/mesa/drivers/dri/r300/compiler/radeon_opcodes.h
src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
src/mesa/drivers/dri/r300/compiler/radeon_pair_translate.c
src/mesa/drivers/dri/r300/compiler/radeon_program_pair.h
src/mesa/drivers/dri/r300/compiler/radeon_program_tex.c
src/mesa/drivers/dri/r300/r300_context.c
src/mesa/drivers/dri/r300/r300_fragprog_common.c
src/mesa/drivers/dri/r300/r300_reg.h
src/mesa/drivers/dri/r300/r300_state.c
src/mesa/drivers/dri/r300/r300_tex.c
src/mesa/drivers/dri/r300/r300_texstate.c
src/mesa/drivers/dri/r600/defaultendian.h
src/mesa/drivers/dri/r600/evergreen_blit.c
src/mesa/drivers/dri/r600/evergreen_blit_shaders.h
src/mesa/drivers/dri/r600/evergreen_chip.c
src/mesa/drivers/dri/r600/evergreen_oglprog.c
src/mesa/drivers/dri/r600/evergreen_render.c
src/mesa/drivers/dri/r600/evergreen_tex.c
src/mesa/drivers/dri/r600/evergreen_vertprog.c
src/mesa/drivers/dri/r600/r600_blit.c
src/mesa/drivers/dri/r600/r600_blit_shaders.h
src/mesa/drivers/dri/r600/r600_context.c
src/mesa/drivers/dri/r600/r600_emit.c
src/mesa/drivers/dri/r600/r600_tex.c
src/mesa/drivers/dri/r600/r600_texstate.c
src/mesa/drivers/dri/r600/r700_assembler.c
src/mesa/drivers/dri/r600/r700_assembler.h
src/mesa/drivers/dri/r600/r700_chip.c
src/mesa/drivers/dri/r600/r700_render.c
src/mesa/drivers/dri/radeon/radeon_bocs_wrapper.h
src/mesa/drivers/dri/radeon/radeon_chipset.h
src/mesa/drivers/dri/radeon/radeon_common.c
src/mesa/drivers/dri/radeon/radeon_common_context.c
src/mesa/drivers/dri/radeon/radeon_context.c
src/mesa/drivers/dri/radeon/radeon_debug.h
src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
src/mesa/drivers/dri/radeon/radeon_screen.c
src/mesa/drivers/dri/radeon/radeon_span.c
src/mesa/drivers/dri/radeon/radeon_tex.c
src/mesa/drivers/dri/savage/savagedd.c
src/mesa/drivers/dri/savage/savagerender.c
src/mesa/drivers/dri/savage/savagetex.c
src/mesa/drivers/dri/sis/sis_dd.c
src/mesa/drivers/dri/sis/sis_texstate.c
src/mesa/drivers/dri/tdfx/tdfx_dd.c
src/mesa/drivers/dri/tdfx/tdfx_tex.c
src/mesa/drivers/dri/unichrome/via_context.c
src/mesa/drivers/dri/unichrome/via_state.c
src/mesa/drivers/dri/unichrome/via_tex.c
src/mesa/drivers/osmesa/SConscript [new file with mode: 0644]
src/mesa/drivers/osmesa/osmesa.c
src/mesa/drivers/windows/gdi/SConscript [new file with mode: 0644]
src/mesa/drivers/windows/gdi/mesa.def
src/mesa/drivers/windows/gdi/wgl.c
src/mesa/drivers/windows/gdi/wmesa.c
src/mesa/drivers/windows/gdi/wmesadef.h
src/mesa/main/api_arrayelt.c
src/mesa/main/api_exec.c
src/mesa/main/arrayobj.c
src/mesa/main/atifragshader.c
src/mesa/main/attrib.c
src/mesa/main/blend.c
src/mesa/main/bufferobj.c
src/mesa/main/buffers.c
src/mesa/main/clear.c
src/mesa/main/clip.c
src/mesa/main/clip.h
src/mesa/main/colortab.c
src/mesa/main/compiler.h
src/mesa/main/context.c
src/mesa/main/context.h
src/mesa/main/dd.h
src/mesa/main/debug.c
src/mesa/main/debug.h
src/mesa/main/depthstencil.c
src/mesa/main/dlist.c
src/mesa/main/drawpix.c
src/mesa/main/enable.c
src/mesa/main/enums.c
src/mesa/main/extensions.c
src/mesa/main/fbobject.c
src/mesa/main/fbobject.h
src/mesa/main/ff_fragment_shader.cpp
src/mesa/main/fog.c
src/mesa/main/formats.c
src/mesa/main/formats.h
src/mesa/main/framebuffer.c
src/mesa/main/get.c
src/mesa/main/glapidispatch.h
src/mesa/main/image.c
src/mesa/main/macros.h
src/mesa/main/matrix.c
src/mesa/main/mfeatures.h
src/mesa/main/mtypes.h
src/mesa/main/pack.c
src/mesa/main/pbo.c
src/mesa/main/pixel.c
src/mesa/main/readpix.c
src/mesa/main/remap_helper.h
src/mesa/main/renderbuffer.c
src/mesa/main/renderbuffer.h
src/mesa/main/samplerobj.c [new file with mode: 0644]
src/mesa/main/samplerobj.h [new file with mode: 0644]
src/mesa/main/shaderapi.c
src/mesa/main/shared.c
src/mesa/main/shared.h
src/mesa/main/state.c
src/mesa/main/texcompress_rgtc.c
src/mesa/main/texenv.c
src/mesa/main/texfetch.c
src/mesa/main/texfetch_tmp.h
src/mesa/main/texformat.c
src/mesa/main/texgetimage.c
src/mesa/main/teximage.c
src/mesa/main/teximage.h
src/mesa/main/texobj.c
src/mesa/main/texobj.h
src/mesa/main/texparam.c
src/mesa/main/texrender.c
src/mesa/main/texstate.c
src/mesa/main/texstore.c
src/mesa/main/uniforms.c
src/mesa/main/varray.c
src/mesa/main/varray.h
src/mesa/main/version.c
src/mesa/program/arbprogparse.c
src/mesa/program/ir_to_mesa.cpp
src/mesa/program/prog_optimize.c
src/mesa/program/prog_statevars.c
src/mesa/program/prog_statevars.h
src/mesa/program/program.c
src/mesa/program/program_parse.y
src/mesa/program/program_parse_extra.c
src/mesa/program/program_parser.h
src/mesa/program/programopt.c
src/mesa/program/programopt.h
src/mesa/sources.mak
src/mesa/state_tracker/st_atom_blend.c
src/mesa/state_tracker/st_atom_depth.c
src/mesa/state_tracker/st_atom_rasterizer.c
src/mesa/state_tracker/st_atom_sampler.c
src/mesa/state_tracker/st_atom_texture.c
src/mesa/state_tracker/st_cb_blit.c
src/mesa/state_tracker/st_cb_bufferobjects.c
src/mesa/state_tracker/st_cb_clear.c
src/mesa/state_tracker/st_cb_drawpixels.c
src/mesa/state_tracker/st_cb_fbo.c
src/mesa/state_tracker/st_cb_readpixels.c
src/mesa/state_tracker/st_cb_texture.c
src/mesa/state_tracker/st_context.c
src/mesa/state_tracker/st_context.h
src/mesa/state_tracker/st_draw.c
src/mesa/state_tracker/st_draw.h
src/mesa/state_tracker/st_draw_feedback.c
src/mesa/state_tracker/st_extensions.c
src/mesa/state_tracker/st_format.c
src/mesa/state_tracker/st_texture.h
src/mesa/swrast/s_aatriangle.c
src/mesa/swrast/s_context.c
src/mesa/swrast/s_fragprog.c
src/mesa/swrast/s_readpix.c
src/mesa/swrast/s_span.c
src/mesa/swrast/s_texcombine.c
src/mesa/swrast/s_texfilter.c
src/mesa/swrast/s_triangle.c
src/mesa/tnl/t_context.c
src/mesa/vbo/vbo_context.c
src/mesa/vbo/vbo_exec_api.c
src/mesa/vbo/vbo_exec_array.c
src/mesa/vbo/vbo_exec_draw.c
src/mesa/vbo/vbo_save_draw.c
src/mesa/vbo/vbo_split_copy.c
src/mesa/vf/vf.c [deleted file]
src/mesa/vf/vf.h [deleted file]
src/mesa/vf/vf_generic.c [deleted file]
src/mesa/vf/vf_sse.c [deleted file]

index a1ab65ef0c4c59b2affc3a0f7dcfe92c6a827bc5..41d1654b42a22c2962af1006a35f98b7e14b2c5b 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,10 @@ TOP = .
 SUBDIRS = src
 
 
+# The git command below generates an empty string when we're not
+# building in a GIT tree (i.e., building from a release tarball).
 default: $(TOP)/configs/current
+       @$(TOP)/bin/extract_git_sha1
        @for dir in $(SUBDIRS) ; do \
                if [ -d $$dir ] ; then \
                        (cd $$dir && $(MAKE)) || exit 1 ; \
@@ -197,8 +200,12 @@ MAIN_FILES = \
        $(DIRECTORY)/configure.ac                                       \
        $(DIRECTORY)/acinclude.m4                                       \
        $(DIRECTORY)/aclocal.m4                                         \
+       $(DIRECTORY)/SConstruct                                         \
+       $(DIRECTORY)/common.py                                          \
+       $(DIRECTORY)/scons/*py                                          \
        $(DIRECTORY)/bin/config.guess                                   \
        $(DIRECTORY)/bin/config.sub                                     \
+       $(DIRECTORY)/bin/extract_git_sha1                               \
        $(DIRECTORY)/bin/install-sh                                     \
        $(DIRECTORY)/bin/mklib                                          \
        $(DIRECTORY)/bin/minstall                                       \
@@ -223,17 +230,23 @@ MAIN_FILES = \
        $(DIRECTORY)/include/GL/vms_x_fix.h                             \
        $(DIRECTORY)/include/GL/wglext.h                                \
        $(DIRECTORY)/include/GL/wmesa.h                                 \
+       $(DIRECTORY)/src/getopt/SConscript                              \
+       $(DIRECTORY)/src/getopt/getopt*.[ch]                            \
        $(DIRECTORY)/src/glsl/Makefile                                  \
        $(DIRECTORY)/src/glsl/Makefile.template                         \
        $(DIRECTORY)/src/glsl/SConscript                                \
        $(DIRECTORY)/src/glsl/*.[ch]                                    \
+       $(DIRECTORY)/src/glsl/*.ll                                      \
+       $(DIRECTORY)/src/glsl/*.yy                                      \
        $(DIRECTORY)/src/glsl/*.[cly]pp                                 \
        $(DIRECTORY)/src/glsl/README                                    \
        $(DIRECTORY)/src/glsl/glcpp/*.[chly]                            \
        $(DIRECTORY)/src/glsl/glcpp/README                              \
        $(DIRECTORY)/src/glsl/builtins                                  \
        $(DIRECTORY)/src/Makefile                                       \
+       $(DIRECTORY)/src/SConscript                                     \
        $(DIRECTORY)/src/mesa/Makefile*                                 \
+       $(DIRECTORY)/src/mesa/SConscript                                \
        $(DIRECTORY)/src/mesa/sources.mak                               \
        $(DIRECTORY)/src/mesa/descrip.mms                               \
        $(DIRECTORY)/src/mesa/gl.pc.in                                  \
@@ -241,12 +254,12 @@ MAIN_FILES = \
        $(DIRECTORY)/src/mesa/depend                                    \
        $(MAIN_ES_FILES)                                                \
        $(DIRECTORY)/src/mesa/main/*.[chS]                              \
+       $(DIRECTORY)/src/mesa/main/*.cpp                                \
        $(DIRECTORY)/src/mesa/main/descrip.mms                          \
        $(DIRECTORY)/src/mesa/math/*.[ch]                               \
        $(DIRECTORY)/src/mesa/math/descrip.mms                          \
        $(DIRECTORY)/src/mesa/program/*.[chly]                          \
        $(DIRECTORY)/src/mesa/program/*.cpp                             \
-       $(DIRECTORY)/src/mesa/program/Makefile                          \
        $(DIRECTORY)/src/mesa/program/descrip.mms                       \
        $(DIRECTORY)/src/mesa/swrast/*.[ch]                             \
        $(DIRECTORY)/src/mesa/swrast/descrip.mms                        \
@@ -259,6 +272,7 @@ MAIN_FILES = \
        $(DIRECTORY)/src/mesa/tnl_dd/*.[ch]                             \
        $(DIRECTORY)/src/mesa/tnl_dd/imm/*.[ch]                         \
        $(DIRECTORY)/src/mesa/tnl_dd/imm/NOTES.imm                      \
+       $(DIRECTORY)/src/mesa/vf/*.[ch]                                 \
        $(DIRECTORY)/src/mesa/drivers/Makefile                          \
        $(DIRECTORY)/src/mesa/drivers/beos/*.cpp                        \
        $(DIRECTORY)/src/mesa/drivers/beos/Makefile                     \
@@ -271,6 +285,9 @@ 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/dri/r300/compiler/*.[ch]          \
+       $(DIRECTORY)/src/mesa/drivers/dri/r300/compiler/Makefile        \
+       $(DIRECTORY)/src/mesa/drivers/dri/r300/compiler/SConscript      \
        $(DIRECTORY)/src/mesa/drivers/windows/*/*.[ch]                  \
        $(DIRECTORY)/src/mesa/drivers/windows/*/*.def                   \
        $(DIRECTORY)/src/mesa/drivers/x11/Makefile                      \
@@ -305,7 +322,9 @@ MAPI_FILES = \
        $(DIRECTORY)/src/mapi/mapi/mapi_abi.py                          \
        $(DIRECTORY)/src/mapi/mapi/sources.mak                          \
        $(DIRECTORY)/src/mapi/mapi/*.[ch]                               \
+       $(DIRECTORY)/src/mapi/shared-glapi/SConscript                   \
        $(DIRECTORY)/src/mapi/vgapi/Makefile                            \
+       $(DIRECTORY)/src/mapi/vgapi/SConscript                          \
        $(DIRECTORY)/src/mapi/vgapi/vgapi.csv                           \
        $(DIRECTORY)/src/mapi/vgapi/vg.pc.in
 
@@ -318,6 +337,7 @@ EGL_FILES = \
        $(DIRECTORY)/src/egl/*/*.[ch]                                   \
        $(DIRECTORY)/src/egl/*/*/Makefile                               \
        $(DIRECTORY)/src/egl/*/*/*.[ch]                                 \
+       $(DIRECTORY)/src/egl/main/SConscript                            \
        $(DIRECTORY)/src/egl/main/*.pc.in                               \
        $(DIRECTORY)/src/egl/main/*.def
 
@@ -393,6 +413,7 @@ GLUT_FILES = \
        $(DIRECTORY)/include/GL/glut.h                  \
        $(DIRECTORY)/include/GL/glutf90.h               \
        $(DIRECTORY)/src/glut/glx/Makefile*             \
+       $(DIRECTORY)/src/glut/glx/SConscript            \
        $(DIRECTORY)/src/glut/glx/depend                \
        $(DIRECTORY)/src/glut/glx/glut.pc.in            \
        $(DIRECTORY)/src/glut/glx/*def                  \
diff --git a/bin/extract_git_sha1 b/bin/extract_git_sha1
new file mode 100755 (executable)
index 0000000..e6e6731
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/sh
+touch src/mesa/main/git_sha1.h
+if which git > /dev/null; then
+    # Extract the 7-digit "short" SHA1 for the current HEAD, convert
+    # it to a string, and wrap it in a #define.  This is used in
+    # src/mesa/main/version.c to put the GIT SHA1 in the GL_VERSION string.
+    git log -n 1 --oneline |\
+       sed 's/^\([^ ]*\) .*/#define MESA_GIT_SHA1 "git-\1"/' \
+       > src/mesa/main/git_sha1.h
+fi
index ce2da8317d754443ad88d6d75b16f4e84b395ddf..4f4b59dae9ed00785d73a73afb4710746d958456 100644 (file)
@@ -64,7 +64,8 @@ GALLIUM_WINSYS_DIRS = sw sw/xlib drm/vmware drm/intel drm/i965
 GALLIUM_TARGET_DIRS = egl-swrast
 GALLIUM_STATE_TRACKERS_DIRS = egl vdpau
 
-DRI_DIRS = r300 radeon swrast
+DRI_DIRS = i810 i915 i965 mach64 mga r128 r200 r300 r600 radeon \
+       savage sis tdfx unichrome swrast
 
 INTEL_LIBS = `pkg-config --libs libdrm_intel`
 INTEL_CFLAGS = `pkg-config --cflags libdrm_intel`
index b16fff74591131939498296a5ff8042df7b1993d..1a3ed77e63530f2b0f337c786dd5ffb7d6ccc369 100644 (file)
@@ -319,6 +319,21 @@ else
     esac
 fi
 
+dnl
+dnl potentially-infringing-but-nobody-knows-for-sure stuff
+dnl
+AC_ARG_ENABLE([texture-float],
+    [AS_HELP_STRING([--enable-texture-float],
+        [enable floating-point textures and renderbuffers @<:@default=disabled@:>@])],
+    [enable_texture_float="$enableval"],
+    [enable_texture_float=no]
+)
+if test "x$enable_texture_float" = xyes; then
+    AC_MSG_WARN([Floating-point textures enabled.])
+    AC_MSG_WARN([Please consult docs/patents.txt with your lawyer before building Mesa.])
+    DEFINES="$DEFINES -DTEXTURE_FLOAT_ENABLED"
+fi
+
 GL_LIB_NAME='lib$(GL_LIB).'${LIB_EXTENSION}
 GLU_LIB_NAME='lib$(GLU_LIB).'${LIB_EXTENSION}
 GLUT_LIB_NAME='lib$(GLUT_LIB).'${LIB_EXTENSION}
@@ -729,6 +744,27 @@ else
     enable_xcb=no
 fi
 
+dnl Direct rendering or just indirect rendering
+case "$host_os" in
+gnu*)
+    dnl Disable by default on GNU/Hurd
+    driglx_direct_default="no"
+    ;;
+cygwin*)
+    dnl Disable by default on cygwin
+    driglx_direct_default="no"
+    ;;
+*)
+    driglx_direct_default="yes"
+    ;;
+esac
+AC_ARG_ENABLE([driglx-direct],
+    [AS_HELP_STRING([--disable-driglx-direct],
+        [enable direct rendering in GLX and EGL for DRI \
+            @<:@default=auto@:>@])],
+    [driglx_direct="$enableval"],
+    [driglx_direct="$driglx_direct_default"])
+
 dnl
 dnl libGL configuration per driver
 dnl
@@ -762,12 +798,17 @@ dri|no) # these checks are still desired when there is no mesa_driver
         AC_MSG_ERROR([Can't use static libraries for DRI drivers])
     fi
 
-    # Check for libdrm
-    PKG_CHECK_MODULES([LIBDRM], [libdrm >= $LIBDRM_REQUIRED])
-    PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= $DRI2PROTO_REQUIRED])
     PKG_CHECK_MODULES([GLPROTO], [glproto >= $GLPROTO_REQUIRED])
-    GL_PC_REQ_PRIV="libdrm >= $LIBDRM_REQUIRED dri2proto >= $DRI2PROTO_REQUIRED glproto >= $GLPROTO_REQUIRED"
-    DRI_PC_REQ_PRIV="libdrm >= $LIBDRM_REQUIRED"
+    GL_PC_REQ_PRIV="glproto >= $GLPROTO_REQUIRED"
+    DRI_PC_REQ_PRIV=""
+
+    if test x"$driglx_direct" = xyes; then
+        # Check for libdrm
+        PKG_CHECK_MODULES([LIBDRM], [libdrm >= $LIBDRM_REQUIRED])
+        PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= $DRI2PROTO_REQUIRED])
+        GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV libdrm >= $LIBDRM_REQUIRED dri2proto >= $DRI2PROTO_REQUIRED"
+        DRI_PC_REQ_PRIV="libdrm >= $LIBDRM_REQUIRED"
+    fi
 
     # find the DRI deps for libGL
     if test "$x11_pkgconfig" = yes; then
@@ -910,12 +951,6 @@ AC_ARG_WITH([dri-searchpath],
     [DRI_DRIVER_SEARCH_DIR="$withval"],
     [DRI_DRIVER_SEARCH_DIR='${DRI_DRIVER_INSTALL_DIR}'])
 AC_SUBST([DRI_DRIVER_SEARCH_DIR])
-dnl Direct rendering or just indirect rendering
-AC_ARG_ENABLE([driglx-direct],
-    [AS_HELP_STRING([--disable-driglx-direct],
-        [enable direct rendering in GLX and EGL for DRI @<:@default=enabled@:>@])],
-    [driglx_direct="$enableval"],
-    [driglx_direct="yes"])
 dnl Which drivers to build - default is chosen by platform
 AC_ARG_WITH([dri-drivers],
     [AS_HELP_STRING([--with-dri-drivers@<:@=DIRS...@:>@],
@@ -1006,6 +1041,16 @@ if test "$mesa_driver" = dri -o "$mesa_driver" = no; then
             DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
         fi
         ;;
+    cygwin*)
+        DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
+        DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING"
+        if test "x$driglx_direct" = xyes; then
+            DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
+        fi
+        if test "x$DRI_DIRS" = "xyes"; then
+            DRI_DIRS="swrast"
+        fi
+        ;;
     esac
 
     # default drivers
@@ -1758,16 +1803,15 @@ fi
 dnl
 dnl Gallium Radeon r300g configuration
 dnl
-AC_ARG_ENABLE([gallium-radeon],
-    [AS_HELP_STRING([--enable-gallium-radeon],
-        [build gallium radeon @<:@default=disabled@:>@])],
-    [enable_gallium_radeon="$enableval"],
-    [enable_gallium_radeon=auto])
-if test "x$enable_gallium_radeon" = xauto; then
+AC_ARG_ENABLE([gallium-r300],
+    [AS_HELP_STRING([--enable-gallium-r300],
+        [build gallium r300 @<:@default=DRI-only@:>@])],
+    [enable_gallium_r300="$enableval"],
+    [enable_gallium_r300=auto])
+if test "x$enable_gallium_r300" = xauto; then
     GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS r300"
     gallium_check_st "radeon/drm" "dri-r300"
-fi
-if test "x$enable_gallium_radeon" = xyes; then
+elif test "x$enable_gallium_r300" = xyes; then
     GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS r300"
     gallium_check_st "radeon/drm" "dri-r300" "xorg-radeon"
 fi
@@ -1777,7 +1821,7 @@ dnl Gallium Radeon r600g configuration
 dnl
 AC_ARG_ENABLE([gallium-r600],
     [AS_HELP_STRING([--enable-gallium-r600],
-        [build gallium radeon @<:@default=disabled@:>@])],
+        [build gallium r600 @<:@default=disabled@:>@])],
     [enable_gallium_r600="$enableval"],
     [enable_gallium_r600=auto])
 if test "x$enable_gallium_r600" = xyes; then
diff --git a/docs/ARB_color_buffer_float.txt b/docs/ARB_color_buffer_float.txt
new file mode 100644 (file)
index 0000000..e501120
--- /dev/null
@@ -0,0 +1,4 @@
+Known issues in the ARB_color_buffer_float implementation:
+- Rendering to multiple render targets, some fixed-point, some floating-point, with FIXED_ONLY fragment clamping and polygon smooth enabled may write incorrect values to the fixed point buffers (depends on spec interpretation)
+- For fragment programs with ARB_fog_* options, colors are clamped before fog application regardless of the fragment clamping setting (this depends on spec interpretation)
+
index ca265af54d7057562362c931916446556aea08a9..6eeb9e4f35f37befb1e3a96b4992d851848e9a99 100644 (file)
@@ -12,11 +12,11 @@ Feature                                               Status
 
 GL 3.0:
 
-GLSL changes (GL_EXT_gpu_shader4, etc)                not started
+GLSL 1.30 (GL_EXT_gpu_shader4, etc.)                  started
 Conditional rendering (GL_NV_conditional_render)      DONE (swrast & softpipe)
 Map buffer subranges (GL_ARB_map_buffer_range)        DONE
-Clamping controls (GL_ARB_color_buffer_float)         BRANCH ~mareko/mesa floating2
-Float textures, renderbuffers (GL_ARB_texture_float)  BRANCH ~mareko/mesa floating2
+Clamping controls (GL_ARB_color_buffer_float)         DONE
+Float textures, renderbuffers (GL_ARB_texture_float)  DONE (gallium r300)
 GL_EXT_packed_float                                   not started
 GL_EXT_texture_shared_exponent                        not started
 Float depth buffers (GL_ARB_depth_buffer_float)       not started
@@ -45,7 +45,7 @@ Depth format cube textures                            0% done
 
 GL 3.1:
 
-GLSL 1.30 and 1.40                                    not started
+GLSL 1.40                                             not started
 Instanced drawing (GL_ARB_draw_instanced)             DONE (gallium, swrast)
 Buffer copying (GL_ARB_copy_buffer)                   DONE
 Primitive restart (GL_NV_primitive_restart)           DONE (gallium)
@@ -53,7 +53,7 @@ Primitive restart (GL_NV_primitive_restart)           DONE (gallium)
 Texture buffer objs (GL_ARB_texture_buffer_object)    not started
 Rectangular textures (GL_ARB_texture_rectangle)       DONE
 Uniform buffer objs (GL_ARB_uniform_buffer_object)    not started
-Signed normalized textures (GL_EXT_texture_snorm)     ~50% done
+Signed normalized textures (GL_EXT_texture_snorm)     DONE (gallium)
 
 
 GL 3.2:
@@ -77,7 +77,7 @@ GLSL 3.30                                             not started
 GL_ARB_blend_func_extended                            not started
 GL_ARB_explicit_attrib_location                       DONE (swrast, i915, i965)
 GL_ARB_occlusion_query2                               DONE (swrast, gallium)
-GL_ARB_sampler_objects                                not started
+GL_ARB_sampler_objects                                DONE (gallium)
 GL_ARB_texture_rgb10_a2ui                             not started
 GL_ARB_texture_swizzle                                DONE (same as EXT version)
 GL_ARB_timer_query                                    DONE (only Xlib sw driver)
index 8dcc72379cdccc6ef38fd28aeca6c9e04d4c6e43..06e1d902edd31740a1ea9e9f5392637fec39c2bc 100644 (file)
@@ -67,7 +67,7 @@ Additions to Chapter 3 the GLX 1.4 Specification (Functions and Errors)
     On "PC" computers, AGP memory can be allocated with glXAllocateMemoryNV
     and freed with glXFreeMemoryNV.  Sometimes it's useful to know where a
     block of AGP memory is located with respect to the start of the AGP
-    aperature.  The function
+    aperture.  The function
 
         GLuint glXGetAGPOffsetMESA( const GLvoid *pointer )
 
index c9853a7fd0f1dd6e4a77453666b351d4b47f836c..198de3ec3ceba0b39f43fa738f881373de5bda54 100644 (file)
@@ -24,7 +24,7 @@ Number
 
 Dependencies
 
-    Reguires EGL 1.4 or later.  This extension is written against the
+    Requires EGL 1.4 or later.  This extension is written against the
     wording of the EGL 1.4 specification.
 
     EGL_KHR_base_image is required.
@@ -134,7 +134,7 @@ Issues
         RESOLVED: The eglQueryImage function has been proposed often,
         but it goes against the EGLImage design.  EGLImages are opaque
         handles to a 2D array of pixels, which can be passed between
-        client APIs.  By referenceing an EGLImage in a client API, the
+        client APIs.  By referencing an EGLImage in a client API, the
         EGLImage target (a texture, a renderbuffer or such) can be
         used to query the attributes of the EGLImage.  We don't have a
         full client API for creating and querying DRM buffers, though,
index 53d5fca71b04671fa3024174f6c627f12bf2dfa9..33fb3c7bf806bc9ed7995efae06f70c299b7af63 100644 (file)
@@ -48,7 +48,7 @@ IP Status
 
 Issues
 
-    1. Should we also defined UNPACK_INVERT_MESA for glDrawPixels, etc?
+    1. Should we also define UNPACK_INVERT_MESA for glDrawPixels, etc?
 
     Resolved:  No, we're only concerned with pixel packing.  There are other
     solutions for inverting images when using glDrawPixels (negative Y pixel
index 8db9350d83148867375fba0066bf877f5727d8d9..52d1e5a9c7c67afd886e61aac05d4a40f990f1f5 100644 (file)
@@ -31,12 +31,12 @@ Overview
 
     Mesa's implementation of GLX is entirely implemented on the client side.
     Therefore, Mesa cannot immediately detect when an X window or pixmap is
-    destroyed in order to free any ancilliary data associated with the window
+    destroyed in order to free any ancillary data associated with the window
     or pixmap.
 
     The glxMesaReleaseBuffers() function can be used to explicitly indicate
-    when the back color buffer, depth buffer, stencil buffer, and/or accum-
-    ulation buffer associated with a drawable can be freed.
+    when the back color buffer, depth buffer, stencil buffer, and/or accumu-
+    lation buffer associated with a drawable can be freed.
 
 IP Status
 
@@ -60,7 +60,7 @@ Additions to Chapter 3 of the GLX 1.3 Specification (Functions and Errors)
 
        Bool glXReleaseBuffersMESA( Display *dpy, GLXDrawable d );
 
-    causes all software ancilliary buffers (back buffer, depth, stencil,
+    causes all software ancillary buffers (back buffer, depth, stencil,
     accum, etc) associated with the named drawable to be immediately
     deallocated.  True is returned if <d> is a valid Mesa GLX drawable,
     else False is returned.  After calling glXReleaseBuffersMESA, the
index 533d017c9a91270febb18a201862c8d2b057dfab..dabc7c421da76c4b69052a5a9162aef94fdd3783 100644 (file)
@@ -35,7 +35,7 @@ Overview
 
     Mesa's glViewport command queries the current window size and updates
     its internal data structors accordingly.  This normally works fine
-    since most applications call glViewport in responce to window size
+    since most applications call glViewport in response to window size
     changes.
 
     In some situations, however, the application may not call glViewport
@@ -65,7 +65,7 @@ Additions to the AGL/GLX/WGL Specifications
 
 Errors
 
-    INVALID_OPERATION is generated if ResizeBuffersMESA is called betweeen
+    INVALID_OPERATION is generated if glResizeBuffersMESA is called between
     Begin and End.
 
 New State
index 856978b535b7ca6b7f8b2e1e2ab3d4bcc42cdf81..a002563c9dc9a6472bcfd624d07be92dc015bf19 100644 (file)
@@ -88,8 +88,8 @@ Additions to the GLX 1.3 Specification
     this is typically the time required to display both the even and odd 
     fields of a frame of video data.
 
-    If <interval> is set to a value of 0, buffer swaps are not synchron-
-    ized to a video frame.  The <interval> value is silently clamped to
+    If <interval> is set to a value of 0, buffer swaps are not synchro-
+    nized to a video frame.  The <interval> value is silently clamped to
     the maximum implementation-dependent value supported before being
     stored.
 
index 9dee65b045d5cda51c61e9a5a49d0237da37e900..b146821f72ecfb0b000588b612278d889b6ab0b8 100644 (file)
@@ -328,7 +328,7 @@ Additions to Chapter 3 of the OpenGL 2.0 Specification (Rasterization)
 
     -- Section 3.8.10 "Texture Completeness"
 
-       Change the second paragaph (page 177) to say (spec changes identical
+       Change the second paragraph (page 177) to say (spec changes identical
        to EXT_texture_array):
 
        "For one-, two-, or three-dimensional textures and one- or
@@ -443,10 +443,10 @@ Additions to Chapter 3 of the OpenGL 2.0 Specification (Rasterization)
        Change second through fourth paragraphs (page 188) to say:
 
        "Let D_t be the depth texture value, in the range [0, 1].  For
-       texture lookups from one- and two-dimesional, rectangle, and
+       texture lookups from one- and two-dimensional, rectangle, and
        one-dimensional array targets, let R be the interpolated <r>
        texture coordinate, clamped to the range [0, 1].  For texture lookups
-       from two-dimesional array texture targets, let R be the interpolated
+       from two-dimensional array texture targets, let R be the interpolated
        <q> texture coordinate, clamped to the range [0, 1].  Then the
        effective texture value L_t, I_t, or A_t is computed as follows:
 
@@ -604,7 +604,7 @@ Additions to Chapter 5 of the OpenGL 2.0 Specification (Special Functions)
 
     -- Section 5.4 "Display Lists"
 
-       Change the first paragraphi on page 242 to say (spec changes
+       Change the first paragraph on page 242 to say (spec changes
        identical to EXT_texture_array):
 
        "TexImage3D, TexImage2D, TexImage1D, Histogram, and ColorTable are
index 49c8e9e5dd4bd8e718eebd18bf2ded7919ed167f..e3a6b59afac75a0d430f806b9e7413638839576d 100644 (file)
@@ -44,7 +44,7 @@ Overview
     ARB_texture_compression_rgtc introduces some compressed red and
     red_green signed formats but no uncompressed ones, which might
     still be useful. NV_texture_shader adds signed texture formats,
-    but also a lot of functionality which has been superceded by fragment
+    but also a lot of functionality which has been superseded by fragment
     shaders.
     It is usually possible to get the same functionality
     using a unsigned format by doing scale and bias in a shader, but this
@@ -105,7 +105,7 @@ Issues
        This is also different to what NV_texture_shader used.
        The above mapping should be considered the reference, but there
        is some leeway so other mappings are allowed for implementations which
-       cannot do this. Particulary the mapping given in NV_texture_shader or
+       cannot do this. Particularly the mapping given in NV_texture_shader or
        the standard OpenGL byte/float mapping is considered acceptable too, as
        might be a mapping which represents -1.0 by -128, 0.0 by 0 and 1.0 by
        127 (that is, uses different scale factors for negative and positive
index 4d01f1814c1110efafb4575ee209b235742af22d..9e81e9c4db4d5cf3fc8886c2c87e0114f69ec63f 100644 (file)
@@ -88,7 +88,7 @@ Additions to Chapter 2 of the OpenGL 1.2 Specification (OpenGL Operation)
       WindosPos4MESA takes four values indicating x, y, z, and w.
       WindowPos3MESA (or WindowPos2MESA) is analaguos, but sets only
       x, y, and z with w implicitly set to 1 (or only x and y with z
-      implicititly set to 0 and w implicitly set to 1).
+      implicitly set to 0 and w implicitly set to 1).
 
       WindowPosMESA operates like RasterPos except that the current modelview
       matrix, projection matrix and viewport parameters are ignored and the
@@ -108,7 +108,7 @@ GLX Protocol
 
 Errors
 
-    INVALID_OPERATION is generated if WindowPosMESA is called betweeen
+    INVALID_OPERATION is generated if WindowPosMESA is called between
     Begin and End.
 
 New State
index 0fa1f7b39dd9af1b8b4dc2e7781a2de477ad1b6d..6a730e81ccf11e00a7a874bd87d4a49cab7fa643 100644 (file)
@@ -26,7 +26,7 @@ Number
 Dependencies
 
     OpenGL 1.0 or later is required
-    This extensions is written against the OpenGL 1.4 Specification.
+    This extension is written against the OpenGL 1.4 Specification.
     NV_texture_rectangle effects the definition of this extension.
 
 Overview
@@ -104,7 +104,7 @@ Additions to Chapter 3 of the OpenGL 1.4 Specification (Rasterization)
 
 
     In section 3.6.4, Rasterization of Pixel Rectangles, on page 104,
-    add the following to Table 3.12 (Packed pixel fiedl assignments):
+    add the following to Table 3.12 (Packed pixel field assignments):
 
                        First       Second     Third      Fourth
     Format             Element     Element    Element    Element
index 0ff49d6a76267e3678631c433e0a2c33fece90e0..e2fde3c507b7c0e900c2648a164db3ee064c1c5c 100644 (file)
@@ -25,7 +25,7 @@ Number
 
 Dependencies
 
-    Reguires EGL 1.4 or later.  This extension is written against the
+    Requires EGL 1.4 or later.  This extension is written against the
     wording of the EGL 1.4 specification.
 
     EGL_KHR_base_image is required.
@@ -40,9 +40,9 @@ Overview
     provides a new target for eglCreateImageKHR, to create an EGLImage
     from a wl_buffer
 
-    Adding a implementation specific wayland interface, allows the
+    Adding an implementation specific wayland interface, allows the
     EGL implementation to define specific wayland requests and events,
-    needed for buffer sharing in a EGL wayland platform.
+    needed for buffer sharing in an EGL wayland platform.
 
 IP Status
 
@@ -82,7 +82,7 @@ Additions to the EGL 1.4 Specification:
 
     Import a wl_buffer by calling eglCreateImageKHR with
     wl_buffer as EGLClientBuffer, EGL_WAYLAND_BUFFER_WL as the target,
-    and an empty attribute_list.
+    NULL context and an empty attribute_list.
 
 Issues
 
index cf1661e4eac2e9d08273fcda83f954408d08ce8b..8fc2ac0da9feef8e119a90ec175c15b5396b4e15 100644 (file)
@@ -62,6 +62,7 @@ a:visited {
 <LI><A HREF="perf.html" target="MainFrame">Performance Tips</A>
 <LI><A HREF="extensions.html" target="MainFrame">Mesa Extensions</A>
 <LI><A HREF="mangling.html" target="MainFrame">Function Name Mangling</A>
+<LI><A href="llvmpipe.html" target="MainFrame">Gallium llvmpipe driver</A>
 </ul>
 
 <b>Developer Topics</b>
index 3cb9423dd911f20624123047626a8ccfeeb4f907..03fa60b4dc5ec3e43f12353cab55be5fbbc8edb6 100644 (file)
@@ -21,76 +21,52 @@ When a new release is coming, release candidates (betas) may be found
 
 
 <p>
-Mesa is distributed in several parts:
+The Mesa package is named MesaLib-x.y.z.{tar.bz2, tar.gz, zip} where x.y.z
+is the version.  There are three types of compressed archives.
 </p>
-<ul>
-<li><b>MesaLib-x.y.z</b> - the main Mesa library source code, drivers
-    and documentation.
-</li>
-<li><b>MesaDemos-x.y.z</b> - OpenGL demonstration and test programs.
-    Most of the programs require GLUT (either the
-    <a href="http://www.opengl.org/resources/libraries/glut"
-    target="_parent">original GLUT by Mark Kilgard</a> or
-    <a href="http://freeglut.sourceforge.net" target="_parent">freeglut</a> or
-    <a href="http://openglut.sourceforge.net" target="_parent">OpenGLUT</a>).
-</li>
-<li><b>MesaGLUT-x.y.z</b> - Mark Kilgard's GLUT, easily compiled and used
-    with Mesa.  Plus, other implementation of GLUT for DOS, OS/2, BeOS, etc.
-</li>
-</ul>
-
 <p>
-If you're not interested in running the demos, you'll only need the first
-package.
+There's also the MesaGLUT-x.y.z.{tar.bz2, tar.gz, zip} packages which
+contain Mark Kilgard's GLUT library.
+This is optional.
+Most Linux distributions include an implementation of GLUT (such as freeglut).
 </p>
-
 <p>
-If you're new to this and not sure what you're doing, grab all three packages.
+In the past, the Mesa demos collection was distributed as
+MesaDemos-x.y.z.{tar.bz2, tar.gz, zip}.
+Now, the
+<a href="ftp://ftp.freedesktop.org/pub/mesa/demos/" target="_parent">
+Mesa demos</a> are distributed separately.
 </p>
 
-<p>
-The packages are available in .tar.gz, .tar.bz2 and .zip formats.
-Other sites might offer additional package formats.
-</p>
 
 <H1>Unpacking</H1>
 
 <p>
-All the packages should be in the same directory prior to unpacking.
+To unpack .tar.gz files:
 </p>
-
-<ul>
-<li>To unpack .tar.gz files:
 <pre>
-       tar zxf MesaLib-X.Y.tar.gz
-       tar zxf MesaDemos-X.Y.tar.gz
-       tar zxf MesaGLUT-X.Y.tar.gz
+       tar zxf MesaLib-x.y.z.tar.gz
 </pre>
 or
 <pre>
-       gzcat MesaLib-X.Y.tar.gz | tar xf -
-       gzcat MesaDemos-X.Y.tar.gz | tar xf -
-       gzcat MesaGLUT-X.Y.tar.gz | tar xf -
+       gzcat MesaLib-x.y.z.tar.gz | tar xf -
 </pre>
 or
 <pre>
-       gunzip MesaLib-X.Y.tar.gz ; tar xf MesaLib-X.Y.tar
-       gunzip MesaDemos-X.Y.tar.gz ; tar xf MesaDemos-X.Y.tar
-       gunzip MesaGLUT-X.Y.tar.gz ; tar xf MesaGLUT-X.Y.tar
+       gunzip MesaLib-x.y.z.tar.gz ; tar xf MesaLib-x.y.z.tar
 </pre>
-<li>To unpack .tar.bz2 files:
+<p>
+To unpack .tar.bz2 files:
+</p>
 <pre>
-       bunzip2 -c MesaLib-X.Y.tar.gz | tar xf -
-       bunzip2 -c MesaDemos-X.Y.tar.gz | tar xf -
-       bunzip2 -c MesaGLUT-X.Y.tar.gz | tar xf -
+       bunzip2 -c MesaLib-x.y.z.tar.gz | tar xf -
 </pre>
-<li>To unpack .zip files:
+<p>
+To unpack .zip files:
+</p>
 <pre>
-       unzip MesaLib-X.Y.zip
-       unzip MesaDemos-X.Y.zip
-       unzip MesaGLUT-X.Y.zip
+       unzip MesaLib-x.y.z.zip
 </pre>
-</ul>
 
 
 <h1>Contents</h1>
@@ -106,22 +82,13 @@ bin/               - shell scripts for making shared libraries, etc
 docs/          - documentation
 src/           - source code for libraries
 src/mesa       - sources for the main Mesa library and device drivers
+src/gallium     - sources for Gallium and Gallium drivers
 src/glu                - libGLU source code
 src/glx                - sources for building libGL with full GLX and DRI support
 src/glw                - Xt/Motif/OpenGL widget code
 </pre>
 
-If you downloaded and unpacked the MesaDemos.X.Y package:
-
-<pre>
-progs/demos    - original Mesa demos
-progs/xdemos   - GLX OpenGL/Mesa demos
-progs/redbook  - examples from the OpenGL Programming Guide
-progs/samples  - examples from SGI
-progs/images/  - image files
-</pre>
-
-If you downloaded and unpacked the MesaGLUT.X.Y package:
+If you downloaded and unpacked the MesaGLUT.x.y.z package:
 <pre>
 src/glut       - GLUT library source code
 </pre>
index c8be8437176ad380a34c7c2f0762ad5f982ca675..986d2f8eb35ad1dab31e729b3447842844b5d30d 100644 (file)
@@ -49,6 +49,15 @@ Setting this variable automatically sets the MESA_TEX_PROG variable as well.
 <li>MESA_EXTENSION_OVERRIDE - can be used to enable/disable extensions.
 A value such as "GL_EXT_foo -GL_EXT_bar" will enable the GL_EXT_foo extension
 and disable the GL_EXT_bar extension.
+<li>MESA_EXTENSION_MAX_YEAR - The GL_EXTENSIONS string returned by Mesa is sorted
+by extension year.
+If this variable is set to year X, only extensions defined on or before year
+X will be reported.
+This is to work-around a bug in some games where the extension string is
+copied into a fixed-size buffer without truncating.
+If the extension string is too long, the buffer overrun can cause the game
+to crash.
+This is a work-around for that.
 <li>MESA_GLSL - <a href="shading.html#envvars">shading language compiler options</a>
 </ul>
 
index 3962ea5c91e12ace2584412944c6d754f1515223..bfa3bb8f8425aba7cf565182329a7a2683d9ddca 100644 (file)
 <ol>
 <li><a href="#unix-x11">Unix / X11</a>
   <ul>
-  <li><a href="#prereq">Prerequisites for DRI and hardware acceleration</a>
+  <li><a href="#prereq-general">General prerequisites for building</a>
+  <li><a href="#prereq-dri">Prerequisites for DRI and hardware acceleration</a>
   <li><a href="#autoconf">Building with autoconf</a>
   <li><a href="#traditional">Building with traditional Makefiles</a>
   <li><a href="#libs">The Libraries</a>
-  <li><a href="#demos">Running the demos
   <li><a href="#install">Installing the header and library files
   <li><a href="#pkg-config">Building OpenGL programs with pkg-config
   </ul>
 <li><a href="#windows">Windows</a>
-<li><a href="#scons">SCons</a>
+<li><a href="#scons">Building with SCons</a>
 <li><a href="#other">Other</a>
 </ol>
 <br>
 <H2>1. Unix/X11 Compilation and Installation</H1>
 
 
-<a name="prereq">
-<h3>1.1 Prerequisites for DRI and hardware acceleration</h3>
+<a name="prereq-general">
+<h3>1.1 General prerequisites for building</h3>
+
+<ul>
+<li>lex / yacc - for building the GLSL compiler.
+On Linux systems, flex and bison are used.
+Versions 2.5.35 and 2.4.1, respectively, (or later) should work.
+</li>
+<li>python - Python is needed for building the Gallium components.
+Version 2.6.4 or later should work.
+</li>
+</ul>
+
+
+<a name="prereq-dri">
+<h3>1.2 Prerequisites for DRI and hardware acceleration</h3>
 
 <p>
 The following are required for DRI-based hardware acceleration with Mesa:
@@ -49,7 +63,7 @@ version 2.4.15 or later
 
 
 <a name="autoconf">
-<h3>1.2 Building with Autoconf</h3>
+<h3>1.3 Building with Autoconf</h3>
 
 <p>
 Mesa may be <a href="autoconf.html">built using autoconf</a>.
@@ -59,7 +73,7 @@ If that fails the traditional Mesa build system is available.
 
 
 <a name="traditional">
-<h3>1.3 Building with traditional Makefiles</h3>
+<h3>1.4 Building with traditional Makefiles</h3>
 
 <p>
 The traditional Mesa build system is based on a collection of pre-defined
@@ -126,7 +140,7 @@ Later, if you want to rebuild for a different configuration run
 
 
 <a name="libs">
-<h3>1.4 The libraries</h3>
+<h3>1.5 The libraries</h3>
 
 <p>
 When compilation has finished, look in the top-level <code>lib/</code>
@@ -185,81 +199,11 @@ If you built the DRI hardware drivers, you'll also see the DRI drivers:
 -rwxr-xr-x   1 brian users 10997120 Jul 21 12:13 unichrome_dri.so
 </pre>
 
-
-<a name="demos">
-<h3>1.5 Running the demos</h3>
-
-<p>
-If you downloaded/unpacked the MesaDemos-x.y.z.tar.gz archive or
-obtained Mesa from CVS, the <b>progs/</b> directory will contain a
-bunch of demonstration programs.
-</p>
-
-<p>
-Before running a demo, you'll probably have to set two environment variables
-to indicate where the libraries are located.  For example:
-<p>
-<blockquote>
-<b>cd lib/</b>
-<br>
-<b>export LD_LIBRARY_PATH=${PWD}</b>
-<br>
-<b>export LIBGL_DRIVERS_PATH=${PWD}</b> (if using DRI drivers)
-</blockquote>
-
 <p>
-Next, change to the Mesa/demos/ directory:
+If you built with Gallium support, look in lib/gallium/ for Gallium-based
+versions of libGL and device drivers.
 </p>
-<blockquote>
-<b>cd ../progs/demos</b>
-</blockquote>
 
-<p>
-Run a demo such as gears:
-</p>
-<blockquote>
-<b>./gears</b>
-</blockquote>
-
-<p>
-If this doesn't work, try the <b>Mesa/progs/xdemos/glxinfo</b> program
-and see that it prints the expected Mesa version number.
-</p>
-
-<p>
-If you're using Linux or a similar OS, verify that the demo program is
-being linked with the proper library files:
-</p>
-<blockquote>
-<b>ldd gears</b>
-</blockquote>
-
-<p>
-You should see something like this:
-</p>
-<pre>
-        libglut.so.3 => /home/brian/Mesa/lib/libglut.so.3 (0x40013000)
-        libGLU.so.1 => /home/brian/Mesa/lib/libGLU.so.1 (0x40051000)
-        libGL.so.1 => /home/brian/Mesa/lib/libGL.so.1 (0x400e0000)
-        libc.so.6 => /lib/i686/libc.so.6 (0x42000000)
-        libm.so.6 => /lib/i686/libm.so.6 (0x403da000)
-        libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x403fc000)
-        libXmu.so.6 => /usr/X11R6/lib/libXmu.so.6 (0x404da000)
-        libXt.so.6 => /usr/X11R6/lib/libXt.so.6 (0x404f1000)
-        libXi.so.6 => /usr/X11R6/lib/libXi.so.6 (0x40543000)
-        libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x4054b000)
-        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x405fd000)
-        libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x40605000)
-        libpthread.so.0 => /lib/i686/libpthread.so.0 (0x40613000)
-        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
-        libdl.so.2 => /lib/libdl.so.2 (0x40644000)
-        libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x40647000)
-        libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x40650000)
-</pre>
-
-<p>
-Retrace your steps if this doesn't look right.
-</p>
 
 
 <a name="install">
diff --git a/docs/llvmpipe.html b/docs/llvmpipe.html
new file mode 100644 (file)
index 0000000..28d7411
--- /dev/null
@@ -0,0 +1,204 @@
+<HTML>
+
+<TITLE>llvmpipe</TITLE>
+
+<link rel="stylesheet" type="text/css" href="mesa.css"></head>
+
+<BODY>
+
+<H1>Introduction</H1>
+
+<p>
+The Gallium llvmpipe driver is a software rasterizer that uses LLVM to
+do runtime code generation.
+Shaders, point/line/triangle rasterization and vertex processing are
+implemented with LLVM IR which is translated to x86 or x86-64 machine
+code.
+Also, the driver is multithreaded to take advantage of multiple CPU cores
+(up to 8 at this time).
+It's the fastest software rasterizer for Mesa.
+</p>
+
+
+<h1>Requirements</h1>
+
+<dl>
+<dt>An x86 or amd64 processor.  64-bit mode is preferred.</dt>
+<dd>
+   <p>
+   Support for sse2 is strongly encouraged.  Support for ssse3, and sse4.1 will
+   yield the most efficient code.  The less features the CPU has the more
+   likely is that you ran into underperforming, buggy, or incomplete code.  
+   </p>
+   <p>
+   See /proc/cpuinfo to know what your CPU supports.
+   </p>
+</dd>
+<dt>LLVM. Version 2.8 recommended. 2.6 or later required.</dt>
+<dd>
+   <p>
+   <b>NOTE</b>: LLVM 2.8 and earlier will not work on systems that support the
+   Intel AVX extensions (e.g. Sandybridge).  LLVM's code generator will
+   fail when trying to emit AVX instructions.  This was fixed in LLVM 2.9.
+   </p>
+   <p>
+   For Linux, on a recent Debian based distribution do:
+   </p>
+<pre>
+     aptitude install llvm-dev
+</pre>
+   For a RPM-based distribution do:
+   </p>
+<pre>
+     yum install llvm-devel
+</pre>
+
+   <p>
+   For Windows download pre-built MSVC 9.0 or MinGW binaries from
+   http://people.freedesktop.org/~jrfonseca/llvm/ and set the LLVM environment
+   variable to the extracted path.
+   </p>
+
+   <p>
+   For MSVC there are two set of binaries: llvm-x.x-msvc32mt.7z and
+   llvm-x.x-msvc32mtd.7z .
+   </p>
+
+   <p>
+   You have to set the LLVM=/path/to/llvm-x.x-msvc32mtd env var when passing
+   debug=yes to scons, and LLVM=/path/to/llvm-x.x-msvc32mt when building with
+   debug=no. This is necessary as LLVM builds as static library so the chosen
+   MS CRT must match.
+   </p>
+</dd>
+
+<dt>scons (optional)</dt>
+</dl>
+
+
+
+<h1>Building</h1>
+
+To build everything on Linux invoke scons as:
+
+<pre>
+  scons build=debug libgl-xlib
+</pre>
+
+Alternatively, you can build it with GNU make, if you prefer, by invoking it as
+
+<pre>
+  make linux-llvm
+</pre>
+
+but the rest of these instructions assume that scons is used.
+
+For windows is everything the except except the winsys:
+
+<pre>
+  scons build=debug libgl-gdi
+</pre>
+
+
+<h1>Using</h1>
+
+On Linux, building will create a drop-in alternative for libGL.so into
+
+<pre>
+  build/foo/gallium/targets/libgl-xlib/libGL.so
+</pre>
+or
+<pre>
+  lib/gallium/libGL.so
+</pre>
+
+To use it set the LD_LIBRARY_PATH environment variable accordingly.
+
+For performance evaluation pass debug=no to scons, and use the corresponding
+lib directory without the "-debug" suffix.
+
+On Windows, building will create a drop-in alternative for opengl32.dll. To use
+it put it in the same directory as the application. It can also be used by
+replacing the native ICD driver, but it's quite an advanced usage, so if you
+need to ask, don't even try it.
+
+
+<h1>Profiling</h1>
+
+To profile llvmpipe you should pass the options
+
+<pre>
+  scons build=profile <same-as-before>
+</pre>
+
+This will ensure that frame pointers are used both in C and JIT functions, and
+that no tail call optimizations are done by gcc.
+
+To better profile JIT code you'll need to build LLVM with oprofile integration.
+
+<pre>
+  ./configure \
+      --prefix=$install_dir \
+      --enable-optimized \
+      --disable-profiling \
+      --enable-targets=host-only \
+      --with-oprofile
+
+  make -C "$build_dir"
+  make -C "$build_dir" install
+
+  find "$install_dir/lib" -iname '*.a' -print0 | xargs -0 strip --strip-debug
+</pre>
+
+The you should define
+
+<pre>
+  export LLVM=/path/to/llvm-2.6-profile
+</pre>
+
+and rebuild.
+
+
+<h1>Unit testing</h1>
+
+<p>
+Building will also create several unit tests in
+build/linux-???-debug/gallium/drivers/llvmpipe:
+</p>
+
+</ul>
+<li> lp_test_blend: blending
+<li> lp_test_conv: SIMD vector conversion
+<li> lp_test_format: pixel unpacking/packing
+</ul>
+
+<p>
+Some of this tests can output results and benchmarks to a tab-separated-file
+for posterior analysis, e.g.:
+</p>
+<pre>
+  build/linux-x86_64-debug/gallium/drivers/llvmpipe/lp_test_blend -o blend.tsv
+</pre>
+
+
+<h1>Development Notes</h1>
+
+<ul>
+<li>
+  When looking to this code by the first time start in lp_state_fs.c, and 
+  then skim through the lp_bld_* functions called in there, and the comments
+  at the top of the lp_bld_*.c functions.  
+</li>
+<li>
+  The driver-independent parts of the LLVM / Gallium code are found in
+  src/gallium/auxiliary/gallivm/.  The filenames and function prefixes
+  need to be renamed from "lp_bld_" to something else though.
+</li>
+<li>
+  We use LLVM-C bindings for now. They are not documented, but follow the C++
+  interfaces very closely, and appear to be complete enough for code
+  generation. See 
+  http://npcontemplation.blogspot.com/2008/06/secret-of-llvm-c-bindings.html
+  for a stand-alone example.  See the llvm-c/Core.h file for reference.
+</li>
+</ul>
index 6a706ab3c56b7f9516e7ce2c455cf7dab8b87324..a6a658aefaf8e8f89dde68ed5801ad83d2d175a0 100644 (file)
 <H1>News</H1>
 
 
+<h2>April 6, 2011</h2>
+
+<p>
+<a href="relnotes-7.10.2.html">Mesa 7.10.2</a> is released.  This is a bug
+fix release release.
+</p>
+
 <h2>March 2, 2011</h2>
 
 <p>
diff --git a/docs/patents.txt b/docs/patents.txt
new file mode 100644 (file)
index 0000000..3834e25
--- /dev/null
@@ -0,0 +1,31 @@
+ARB_texture_float:
+
+    Silicon Graphics, Inc. owns US Patent #6,650,327, issued November 18,
+    2003 [1].
+
+    SGI believes this patent contains necessary IP for graphics systems
+    implementing floating point rasterization and floating point
+    framebuffer capabilities described in ARB_texture_float extension, and
+    will discuss licensing on RAND terms, on an individual basis with
+    companies wishing to use this IP in the context of conformant OpenGL
+    implementations [2].
+
+    The source code to implement ARB_texture_float extension is included
+    and can be toggled on at compile time, for those who purchased a
+    license from SGI, or are in a country where the patent does not apply,
+    etc.
+
+    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.
+
+    You should contact a lawyer or SGI's legal department if you want to
+    enable this extension.
+
+
+[1] http://www.google.com/patents/about?id=mIIOAAAAEBAJ&dq=6650327
+[2] http://www.opengl.org/registry/specs/ARB/texture_float.txt
diff --git a/docs/relnotes-7.10.2.html b/docs/relnotes-7.10.2.html
new file mode 100644 (file)
index 0000000..55b6794
--- /dev/null
@@ -0,0 +1,206 @@
+<HTML>
+
+<head>
+<TITLE>Mesa Release Notes</TITLE>
+<link rel="stylesheet" type="text/css" href="mesa.css">
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+</head>
+
+<BODY>
+
+<body bgcolor="#eeeeee">
+
+<H1>Mesa 7.10.2 Release Notes / April 6, 2011</H1>
+
+<p>
+Mesa 7.10.2 is a bug fix release which fixes bugs found since the 7.10 release.
+</p>
+<p>
+Mesa 7.10.2 implements the OpenGL 2.1 API, but the version reported by
+glGetString(GL_VERSION) depends on the particular driver being used.
+Some drivers don't support all the features required in OpenGL 2.1.
+</p>
+<p>
+See the <a href="install.html">Compiling/Installing page</a> for prerequisites
+for DRI hardware acceleration.
+</p>
+
+
+<h2>MD5 checksums</h2>
+<pre>
+2f9f444265534a2cfd9a99d1a8291089  MesaLib-7.10.2.tar.gz
+f5de82852f1243f42cc004039e10b771  MesaLib-7.10.2.tar.bz2
+47836e37bab6fcafe3ac90c9544ba0e9  MesaLib-7.10.2.zip
+175120325828f313621cc5bc6c504803  MesaGLUT-7.10.2.tar.gz
+8c71d273f5f8d6c5eda4ffc39e0fe03e  MesaGLUT-7.10.2.tar.bz2
+03036c8efe7b791a90fa0f2c41b43f43  MesaGLUT-7.10.2.zip
+</pre>
+
+
+<h2>New features</h2>
+<p>None.</p>
+
+<h2>Bug fixes</h2>
+<p>This list is likely incomplete.</p>
+<ul>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=29172">Bug 29172</a> - Arrandale - Pill Popper Pops Pills</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31159">Bug 31159</a> - shadow problem in 0ad game</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=32688">Bug 32688</a> - [RADEON:KMS:R300G] some games have a wireframe or outline visible</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=32949">Bug 32949</a> - [glsl wine] Need for Speed renders incorrectly with GLSL enabled</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=34203">Bug 34203</a> - [GLSL] fail to call long chains across shaders</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=34376">Bug 34376</a> - [GLSL] allowing assignment to unsized array
+  <ul>
+    <li>The commit message incorrectly
+    lists <a href="https://bugs.freedesktop.org/show_bug.cgi?id=34367">bug
+    34367</a>.</li>
+  </ul>
+</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=34370">Bug 34370</a> - [GLSL] "i&lt;5 &amp;&amp; i&lt;4" in for loop fails</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=34374">Bug 34374</a> - [GLSL] fail to redeclare an array using initializer</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=35073">Bug 35073</a> - [GM45] Alpha test is broken when rendering to FBO with no color attachment</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=35483">Bug 35483</a> - util_blit_pixels_writemask: crash in line 322 of src/gallium/auxiliary/util/u_blit.c</li>
+
+<!-- <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=">Bug </a> - </li> -->
+
+</ul>
+
+
+<h2>Changes</h2>
+<p>The full set of changes can be viewed by using the following GIT command:</p>
+
+<pre>
+  git log mesa-7.10.1..mesa-7.10.2
+</pre>
+
+<p><em>Note:</em> Reverted commits and the reverts are not included in this list.</p>
+
+<p>Alex Deucher (2):
+<ul>
+  <li>r600c: add new ontario pci ids</li>
+  <li>r600g: add some additional ontario pci ids</li>
+</ul></p>
+
+<p>Benjamin Franzke (1):
+<ul>
+  <li>st/dri: Fix surfaceless gl using contexts with previous bound surfaces</li>
+</ul></p>
+
+<p>Brian Paul (9):
+<ul>
+  <li>docs: pull 7.9.2 release notes into 7.10 branch</li>
+  <li>docs: update news.html with 7.10.1 and 7.9.2 releases</li>
+  <li>docs: fill in 7.10.1 release data</li>
+  <li>docs: add, fix release notes links</li>
+  <li>docs: update info about Mesa packaging/contents</li>
+  <li>docs: update prerequisites, remove old demo info</li>
+  <li>mesa: Guard against null pointer deref in fbo validation</li>
+  <li>st/mesa: Apply LOD bias from correct texture unit</li>
+  <li>glsl: silence warning in printf() with a cast</li>
+</ul></p>
+
+<p>Chad Versace (1):
+<ul>
+  <li>i965: Fix tex_swizzle when depth mode is GL_RED</li>
+</ul></p>
+
+<p>Dave Airlie (1):
+<ul>
+  <li>r600: don't close fd on failed load</li>
+</ul></p>
+
+<p>Eric Anholt (2):
+<ul>
+  <li>i965: Apply a workaround for the Ironlake "vertex flashing".</li>
+  <li>i965: Fix alpha testing when there is no color buffer in the FBO.</li>
+</ul></p>
+
+<p>Fabian Bieler (1):
+<ul>
+  <li>st/mesa: Apply LOD from texture object</li>
+</ul></p>
+
+<p>Henri Verbeet (1):
+<ul>
+  <li>st/mesa: Validate state before doing blits.</li>
+</ul></p>
+
+<p>Ian Romanick (13):
+<ul>
+  <li>docs: Add 7.10.1 md5sums</li>
+  <li>glsl: Refactor AST-to-HIR code handling variable initializers</li>
+  <li>glsl: Refactor AST-to-HIR code handling variable redeclarations</li>
+  <li>glsl: Process redeclarations before initializers</li>
+  <li>glsl: Function signatures cannot have NULL return type</li>
+  <li>glsl: Add several function / call related validations</li>
+  <li>linker: Add imported functions to the linked IR</li>
+  <li>glsl: Use insert_before for lists instead of open coding it</li>
+  <li>glsl: Only allow unsized array assignment in an initializer</li>
+  <li>glcpp: Refresh autogenerated lexer files</li>
+  <li>docs: Initial bits of 7.10.2 release notes</li>
+  <li>mesa: set version string to 7.10.2</li>
+  <li>mesa: Remove nonexistant files from _FILES lists</li>
+</ul></p>
+
+<p>Jerome Glisse (1):
+<ul>
+  <li>r600g: move user fence into base radeon structure</li>
+</ul></p>
+
+<p>José Fonseca (2):
+<ul>
+  <li>mesa: Fix typo glGet*v(GL_TEXTURE_COORD_ARRAY_*).</li>
+  <li>mesa: More glGet* fixes.</li>
+</ul></p>
+
+<p>Kenneth Graunke (4):
+<ul>
+  <li>glcpp: Rework lexer to use a SKIP state rather than REJECT.</li>
+  <li>glcpp: Remove trailing contexts from #if rules.</li>
+  <li>i965/fs: Fix linear gl_Color interpolation on pre-gen6 hardware.</li>
+  <li>glsl: Accept precision qualifiers on sampler types, but only in ES.</li>
+</ul></p>
+
+<p>Marek Olšák (15):
+<ul>
+  <li>st/mesa: fix crash when DrawBuffer-&gt;_ColorDrawBuffers[0] is NULL</li>
+  <li>st/mesa: fail to alloc a renderbuffer if st_choose_renderbuffer_format fails</li>
+  <li>r300/compiler: fix the saturate modifier when applied to TEX instructions</li>
+  <li>r300/compiler: fix translating the src negate bits in pair_translate</li>
+  <li>r300/compiler: Abs doesn't cancel Negate (in the conversion to native swizzles)</li>
+  <li>r300/compiler: TEX instructions don't support negation on source arguments</li>
+  <li>r300/compiler: do not set TEX_IGNORE_UNCOVERED on r500</li>
+  <li>r300/compiler: saturate Z before the shadow comparison</li>
+  <li>r300/compiler: fix equal and notequal shadow compare functions</li>
+  <li>r300/compiler: remove unused variables</li>
+  <li>st/mesa: fix crash when using both user and vbo buffers with the same stride</li>
+  <li>r300g: fix alpha-test with no colorbuffer</li>
+  <li>r300g: tell the GLSL compiler to lower the continue opcode</li>
+  <li>r300/compiler: propagate SaturateMode down to the result of shadow comparison</li>
+  <li>r300/compiler: apply the texture swizzle to shadow pass and fail values too</li>
+</ul></p>
+
+<p>Michel Dänzer (1):
+<ul>
+  <li>Use proper source row stride when getting depth/stencil texels.</li>
+</ul></p>
+
+<p>Tom Stellard (4):
+<ul>
+  <li>r300/compiler: Use a 4-bit writemask in pair instructions</li>
+  <li>prog_optimize: Fix reallocating registers for shaders with loops</li>
+  <li>r300/compiler: Fix vertex shader MAD instructions with constant swizzles</li>
+  <li>r300/compiler: Don't try to convert RGB to Alpha in full instructions</li>
+</ul></p>
+
+</body>
+</html>
index 277339bc4ced5727a2e90ffe988eed285aa13c0e..2bd126c6bce68ab950e515085b2f13d662043118 100644 (file)
@@ -36,11 +36,22 @@ tbd
 
 <h2>New features</h2>
 <ul>
+<li>GL_ARB_color_buffer_float (gallium drivers, i965)
+<li>GL_ARB_draw_buffers_blend (gallium)
 <li>GL_ARB_draw_instanced extension (gallium drivers, swrast)
 <li>GL_ARB_instanced_arrays extension (gallium drivers)
-<li>GL_ARB_texture_compression_rgtc (gallium r600, swrast)
-<li>GL_ARB_draw_buffers_blend (gallium)
+<li>GL_ARB_occlusion_query2 (gallium drivers, swrast)
+<li>GL_ARB_sampler_objects (gallium drivers)
+<li>GL_ARB_texture_compression_rgtc (gallium drivers, swrast)
+<li>GL_ARB_texture_float (gallium, i965)
+<li>GL_EXT_texture_compression_latc (gallium drivers, swrast)
+<li>GL_EXT_texture_compression_rgtc (gallium drivers, swrast)
 <li>GL_EXT_texture_sRGB_decode (gallium drivers, swrast, i965)
+<li>GL_EXT_texture_snorm (gallium drivers)
+<li>GL_ATI_draw_buffers (all drivers)
+<li>GL_ATI_texture_compression_3dc (gallium drivers, swrast)
+<li>GL_ATI_texture_float (gallium, i965)
+<li>GL_NV_texture_barrier (gallium drivers)
 </ul>
 
 
index b0ca3ef431355afa4ccbe6c2981c42410e214ab1..c1a7ab78dfd1f521e7e327ae4be4951646df016d 100644 (file)
@@ -14,6 +14,7 @@ The release notes summarize what's new or changed in each Mesa release.
 
 <UL>
 <LI><A HREF="relnotes-7.11.html">7.11 release notes</A>
+<LI><A HREF="relnotes-7.10.2.html">7.10.2 release notes</A>
 <LI><A HREF="relnotes-7.10.1.html">7.10.1 release notes</A>
 <LI><A HREF="relnotes-7.10.html">7.10 release notes</A>
 <LI><A HREF="relnotes-7.9.2.html">7.9.2 release notes</A>
index 005b29444048edd32a2a134919ffc8c45f0c8597..e4aa0994be9e55ea3837d333cc91fe35ef5a5fbd 100644 (file)
@@ -80,7 +80,7 @@ typedef void *EGLNativePixmapType;
 
 #elif defined(WL_EGL_PLATFORM)
 
-typedef struct wl_egl_display *EGLNativeDisplayType;
+typedef struct wl_display     *EGLNativeDisplayType;
 typedef struct wl_egl_pixmap  *EGLNativePixmapType;
 typedef struct wl_egl_window  *EGLNativeWindowType;
 
index 8e5f1383ffaadcd72e136f757173d4a582894c02..bca550fa2d4241622752e73736549565f278e1ad 100644 (file)
@@ -655,6 +655,8 @@ typedef double              GLclampd;       /* double precision float in [0,1] */
 #define GL_TEXTURE_ENV_COLOR                   0x2201
 #define GL_TEXTURE_GEN_S                       0x0C60
 #define GL_TEXTURE_GEN_T                       0x0C61
+#define GL_TEXTURE_GEN_R                       0x0C62
+#define GL_TEXTURE_GEN_Q                       0x0C63
 #define GL_TEXTURE_GEN_MODE                    0x2500
 #define GL_TEXTURE_BORDER_COLOR                        0x1004
 #define GL_TEXTURE_WIDTH                       0x1000
@@ -685,8 +687,6 @@ typedef double              GLclampd;       /* double precision float in [0,1] */
 #define GL_T                                   0x2001
 #define GL_R                                   0x2002
 #define GL_Q                                   0x2003
-#define GL_TEXTURE_GEN_R                       0x0C62
-#define GL_TEXTURE_GEN_Q                       0x0C63
 
 /* Utility */
 #define GL_VENDOR                              0x1F00
diff --git a/scons/python.py b/scons/python.py
deleted file mode 100644 (file)
index 9e94d05..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-"""gallium
-
-Frontend-tool for Gallium3D architecture.
-
-"""
-
-# 
-# Copyright 2008 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, 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 TUNGSTEN 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.
-# 
-
-
-import sys
-import distutils.sysconfig
-import os.path
-
-
-def generate(env):
-    # See http://www.scons.org/wiki/PythonExtensions
-    
-    if sys.platform in ['win32']:
-        python_root = sys.prefix
-        python_version = '%u%u' % sys.version_info[:2]
-        python_include = os.path.join(python_root, 'include')
-        python_libs = os.path.join(python_root, 'libs')
-        python_lib = os.path.join(python_libs, 'python' + python_version + '.lib')
-        
-        env.Append(CPPPATH = [python_include])
-        env.Append(LIBPATH = [python_libs])
-        env.Append(LIBS = ['python' + python_version + '.lib'])
-        env.Replace(SHLIBPREFIX = '')
-        env.Replace(SHLIBSUFFIX = '.pyd')
-        
-        # XXX; python25_d.lib is not included in Python for windows, and 
-        # we'll get missing symbols unless we undefine _DEBUG
-        cppdefines = env['CPPDEFINES']
-        cppdefines = [define for define in cppdefines if define != '_DEBUG']
-        env.Replace(CPPDEFINES = cppdefines)
-        env.AppendUnique(CPPFLAGS = ['/U_DEBUG'])
-        env.AppendUnique(LINKFLAGS = ['/nodefaultlib:python25_d.lib'])
-    else:
-        #env.ParseConfig('python-config --cflags --ldflags --libs')
-        env.AppendUnique(CPPPATH = [distutils.sysconfig.get_python_inc()])
-        env.Replace(SHLIBPREFIX = '')
-        env.Replace(SHLIBSUFFIX = distutils.sysconfig.get_config_vars()['SO'])
-
-    # for debugging
-    #print env.Dump()
-
-
-def exists(env):
-    return 1
index f7e063b35249423af8699d17da74fcb116650c2a..5e47fbe126a970de9a4b71275217b21e5a4e2939 100644 (file)
@@ -462,6 +462,12 @@ dri2_create_screen(_EGLDisplay *disp)
       }
    }
 
+   if (dri2_dpy->image) {
+      disp->Extensions.MESA_drm_image = EGL_TRUE;
+      disp->Extensions.KHR_image_base = EGL_TRUE;
+      disp->Extensions.KHR_gl_renderbuffer_image = EGL_TRUE;
+   }
+
    return EGL_TRUE;
 
  cleanup_dri_screen:
index cb1de2681f18e0cf0578bb1a86abafb6c47a3e3a..99f990ac688c7228437e3de6f4bf34f0eba48ff3 100644 (file)
@@ -85,8 +85,10 @@ struct dri2_egl_display
    __DRIswrastLoaderExtension  swrast_loader_extension;
    const __DRIextension     *extensions[3];
 #ifdef HAVE_WAYLAND_PLATFORM
-   struct wl_egl_display    *wl_dpy;
+   struct wl_display        *wl_dpy;
    struct wl_drm            *wl_server_drm;
+   struct wl_drm            *wl_drm;
+   int                      authenticated;
 #endif
 
    int (*authenticate) (_EGLDisplay *disp, uint32_t id);
index bd4fa80af59780fe4513e537d63e18e37ce2db47..9c6d3ddac22f877baae0a844a52649d01424a0e4 100644 (file)
@@ -708,11 +708,6 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
    for (i = 0; dri2_dpy->driver_configs[i]; i++)
       dri2_add_config(disp, dri2_dpy->driver_configs[i], i + 1, 0, 0, NULL);
 
-   disp->Extensions.MESA_drm_image = EGL_TRUE;
-   disp->Extensions.KHR_image_base = EGL_TRUE;
-   disp->Extensions.KHR_gl_renderbuffer_image = EGL_TRUE;
-   disp->Extensions.KHR_gl_texture_2D_image = EGL_TRUE;
-
 #ifdef HAVE_WAYLAND_PLATFORM
    disp->Extensions.WL_bind_wayland_display = EGL_TRUE;
 #endif
index 6ae3f6554b16ef91d544fe96862814a88afc9b04..030c68777af1611cd8b27b31898246589256f344 100644 (file)
@@ -32,6 +32,8 @@
 #include <dlfcn.h>
 #include <errno.h>
 #include <unistd.h>
+#include <fcntl.h>
+#include <xf86drm.h>
 
 #include "egl_dri2.h"
 
@@ -107,7 +109,7 @@ dri2_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type,
       dri2_surf->base.Width  = dri2_surf->wl_pix->width;
       dri2_surf->base.Height = dri2_surf->wl_pix->height;
 
-      if (dri2_surf->wl_pix->name > 0) {
+      if (dri2_surf->wl_pix->driver_private) {
          dri2_buf = dri2_surf->wl_pix->driver_private;
          dri2_surf->dri_buffers[__DRI_BUFFER_FRONT_LEFT] = dri2_buf->dri_buffer;
       }
@@ -204,7 +206,19 @@ dri2_wl_egl_pixmap_destroy(struct wl_egl_pixmap *egl_pixmap)
    
    egl_pixmap->driver_private = NULL;
    egl_pixmap->destroy = NULL;
-   egl_pixmap->name = 0;
+}
+
+static struct wl_buffer *
+wayland_create_buffer(struct dri2_egl_surface *dri2_surf,
+                      __DRIbuffer *buffer,
+                      struct wl_visual *visual)
+{
+   struct dri2_egl_display *dri2_dpy =
+      dri2_egl_display(dri2_surf->base.Resource.Display);
+
+   return wl_drm_create_buffer(dri2_dpy->wl_drm, buffer->name,
+                               dri2_surf->base.Width, dri2_surf->base.Height,
+                               buffer->pitch, visual);
 }
 
 static void
@@ -244,8 +258,6 @@ dri2_process_front_buffer(struct dri2_egl_surface *dri2_surf, unsigned format)
       dri2_buf->dri_buffer = dri2_surf->dri_buffers[__DRI_BUFFER_FRONT_LEFT];
       dri2_buf->dri2_dpy   = dri2_dpy;
 
-      dri2_surf->wl_pix->name           = dri2_buf->dri_buffer->name;
-      dri2_surf->wl_pix->stride         = dri2_buf->dri_buffer->pitch;
       dri2_surf->wl_pix->driver_private = dri2_buf;
       dri2_surf->wl_pix->destroy        = dri2_wl_egl_pixmap_destroy;
       break;
@@ -282,9 +294,9 @@ dri2_release_buffers(struct dri2_egl_surface *dri2_surf)
          switch (i) {
          case __DRI_BUFFER_FRONT_LEFT:
             if (dri2_surf->pending_buffer)
-               force_roundtrip(dri2_dpy->wl_dpy->display);
+               force_roundtrip(dri2_dpy->wl_dpy);
             dri2_surf->pending_buffer = dri2_surf->dri_buffers[i];
-            wl_display_sync_callback(dri2_dpy->wl_dpy->display,
+            wl_display_sync_callback(dri2_dpy->wl_dpy,
                                      dri2_release_pending_buffer, dri2_surf);
             break;
          default:
@@ -357,6 +369,12 @@ dri2_get_buffers_with_format(__DRIdrawable * driDrawable,
    assert(dri2_surf->type == DRI2_PIXMAP_SURFACE ||
           dri2_surf->dri_buffers[__DRI_BUFFER_BACK_LEFT]);
 
+   if (dri2_surf->type == DRI2_PIXMAP_SURFACE && !dri2_surf->wl_pix->buffer)
+      dri2_surf->wl_pix->buffer =
+         wayland_create_buffer(dri2_surf,
+                              dri2_surf->dri_buffers[__DRI_BUFFER_FRONT_LEFT],
+                              dri2_surf->wl_pix->visual);
+
    *out_count = dri2_surf->buffer_count;
    if (dri2_surf->buffer_count == 0)
           return NULL;
@@ -417,19 +435,8 @@ dri2_flush_front_buffer(__DRIdrawable * driDrawable, void *loaderPrivate)
 #endif
 }
 
-static struct wl_buffer *
-wayland_create_buffer(struct dri2_egl_surface *dri2_surf, __DRIbuffer *buffer)
-{
-   struct dri2_egl_display *dri2_dpy =
-      dri2_egl_display(dri2_surf->base.Resource.Display);
-
-   return wl_drm_create_buffer(dri2_dpy->wl_dpy->drm, buffer->name,
-                               dri2_surf->base.Width, dri2_surf->base.Height,
-                               buffer->pitch, dri2_surf->wl_win->visual);
-}
-
 static void
-wayland_frame_callback(void *data, uint32_t time)
+wayland_frame_callback(struct wl_surface *surface, void *data, uint32_t time)
 {
    struct dri2_egl_surface *dri2_surf = data;
 
@@ -455,11 +462,12 @@ dri2_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw)
    struct dri2_egl_driver *dri2_drv = dri2_egl_driver(drv);
 
    while (dri2_surf->block_swap_buffers)
-      wl_display_iterate(dri2_dpy->wl_dpy->display, WL_DISPLAY_READABLE);
+      wl_display_iterate(dri2_dpy->wl_dpy, WL_DISPLAY_READABLE);
 
    dri2_surf->block_swap_buffers = EGL_TRUE;
-   wl_display_frame_callback(dri2_dpy->wl_dpy->display,
-        wayland_frame_callback, dri2_surf);
+   wl_display_frame_callback(dri2_dpy->wl_dpy,
+                            dri2_surf->wl_win->surface,
+                            wayland_frame_callback, dri2_surf);
 
    if (dri2_surf->type == DRI2_WINDOW_SURFACE) {
       pointer_swap(
@@ -477,8 +485,11 @@ dri2_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw)
       if (!dri2_surf->wl_drm_buffer[WL_BUFFER_FRONT])
         dri2_surf->wl_drm_buffer[WL_BUFFER_FRONT] =
            wayland_create_buffer(dri2_surf,
-                 dri2_surf->dri_buffers[__DRI_BUFFER_FRONT_LEFT]);
+                 dri2_surf->dri_buffers[__DRI_BUFFER_FRONT_LEFT],
+                 dri2_surf->wl_win->visual);
 
+      wl_buffer_damage(dri2_surf->wl_drm_buffer[WL_BUFFER_FRONT], 0, 0,
+                      dri2_surf->base.Width, dri2_surf->base.Height);
       wl_surface_attach(dri2_surf->wl_win->surface,
            dri2_surf->wl_drm_buffer[WL_BUFFER_FRONT],
            dri2_surf->dx, dri2_surf->dy);
@@ -535,18 +546,23 @@ dri2_create_image_khr_pixmap(_EGLDisplay *disp, _EGLContext *ctx,
                                     wl_egl_pixmap->width,
                                     wl_egl_pixmap->height);
 
-   wl_egl_pixmap->name    = dri2_buf->dri_buffer->name;
-   wl_egl_pixmap->stride  = dri2_buf->dri_buffer->pitch;
    wl_egl_pixmap->destroy = dri2_wl_egl_pixmap_destroy;
    wl_egl_pixmap->driver_private = dri2_buf;
 
+   wl_egl_pixmap->buffer =
+      wl_drm_create_buffer(dri2_dpy->wl_drm,
+                          dri2_buf->dri_buffer->name,
+                          wl_egl_pixmap->width,
+                          wl_egl_pixmap->height,
+                          dri2_buf->dri_buffer->pitch,
+                          wl_egl_pixmap->visual);
+
    wl_attr_list[1] = wl_egl_pixmap->width;
    wl_attr_list[3] = wl_egl_pixmap->height;
-   wl_attr_list[5] = wl_egl_pixmap->stride / 4;
-
+   wl_attr_list[5] = dri2_buf->dri_buffer->pitch / 4;
 
    return dri2_create_image_khr(disp->Driver, disp, ctx, EGL_DRM_BUFFER_MESA,
-              (EGLClientBuffer)(intptr_t) wl_egl_pixmap->name, wl_attr_list);
+       (EGLClientBuffer)(intptr_t) dri2_buf->dri_buffer->name, wl_attr_list);
 }
 
 static _EGLImage *
@@ -570,16 +586,16 @@ dri2_wayland_authenticate(_EGLDisplay *disp, uint32_t id)
    struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
    int ret = 0;
 
-   dri2_dpy->wl_dpy->authenticated = false;
+   dri2_dpy->authenticated = false;
 
-   wl_drm_authenticate(dri2_dpy->wl_dpy->drm, id);
-   force_roundtrip(dri2_dpy->wl_dpy->display);
+   wl_drm_authenticate(dri2_dpy->wl_drm, id);
+   force_roundtrip(dri2_dpy->wl_dpy);
 
-   if (!dri2_dpy->wl_dpy->authenticated)
+   if (!dri2_dpy->authenticated)
       ret = -1;
 
    /* reset authenticated */
-   dri2_dpy->wl_dpy->authenticated = true;
+   dri2_dpy->authenticated = true;
 
    return ret;
 }
@@ -605,10 +621,45 @@ dri2_terminate(_EGLDriver *drv, _EGLDisplay *disp)
    return EGL_TRUE;
 }
 
+static void
+drm_handle_device(void *data, struct wl_drm *drm, const char *device)
+{
+   struct dri2_egl_display *dri2_dpy = data;
+   drm_magic_t magic;
+
+   dri2_dpy->device_name = strdup(device);
+   if (!dri2_dpy->device_name)
+      return;
+
+   dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR);
+   if (dri2_dpy->fd == -1) {
+      _eglLog(_EGL_WARNING, "wayland-egl: could not open %s (%s)",
+             dri2_dpy->device_name, strerror(errno));
+      return;
+   }
+
+   drmGetMagic(dri2_dpy->fd, &magic);
+   wl_drm_authenticate(dri2_dpy->wl_drm, magic);
+}
+
+static void
+drm_handle_authenticated(void *data, struct wl_drm *drm)
+{
+   struct dri2_egl_display *dri2_dpy = data;
+
+   dri2_dpy->authenticated = true;
+}
+
+static const struct wl_drm_listener drm_listener = {
+       drm_handle_device,
+       drm_handle_authenticated
+};
+
 EGLBoolean
 dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp)
 {
    struct dri2_egl_display *dri2_dpy;
+   uint32_t id;
    int i;
 
    drv->API.CreateWindowSurface = dri2_create_window_surface;
@@ -627,21 +678,23 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp)
    disp->DriverData = (void *) dri2_dpy;
    dri2_dpy->wl_dpy = disp->PlatformDisplay;
 
-   if (dri2_dpy->wl_dpy->fd == -1)
-      force_roundtrip(dri2_dpy->wl_dpy->display);
-   if (dri2_dpy->wl_dpy->fd == -1)
+   id = wl_display_get_global(dri2_dpy->wl_dpy, "wl_drm", 1);
+   if (id == 0)
+      wl_display_iterate(dri2_dpy->wl_dpy, WL_DISPLAY_READABLE);
+   id = wl_display_get_global(dri2_dpy->wl_dpy, "wl_drm", 1);
+   if (id == 0)
       goto cleanup_dpy;
-
-   dri2_dpy->fd = dup(dri2_dpy->wl_dpy->fd);
-   if (dri2_dpy->fd < 0) {
-      _eglError(EGL_BAD_ALLOC, "DRI2: failed to dup fd");
+   dri2_dpy->wl_drm = wl_drm_create(dri2_dpy->wl_dpy, id, 1);
+   if (!dri2_dpy->wl_drm)
       goto cleanup_dpy;
-   }
+   wl_drm_add_listener(dri2_dpy->wl_drm, &drm_listener, dri2_dpy);
+   force_roundtrip(dri2_dpy->wl_dpy);
+   if (dri2_dpy->fd == -1)
+      goto cleanup_drm;
 
-   if (!dri2_dpy->wl_dpy->authenticated)
-      force_roundtrip(dri2_dpy->wl_dpy->display);
-   if (!dri2_dpy->wl_dpy->authenticated)
-      goto cleanup_dpy;
+   force_roundtrip(dri2_dpy->wl_dpy);
+   if (!dri2_dpy->authenticated)
+      goto cleanup_fd;
 
    dri2_dpy->driver_name = dri2_get_driver_for_fd(dri2_dpy->fd);
    if (dri2_dpy->driver_name == NULL) {
@@ -649,14 +702,8 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp)
       goto cleanup_fd;
    }
 
-   dri2_dpy->device_name = strdup(dri2_dpy->wl_dpy->device_name);
-   if (dri2_dpy->device_name == NULL) {
-      _eglError(EGL_BAD_ALLOC, "DRI2: failed to get device name");
-      goto cleanup_driver_name;
-   }
-
    if (!dri2_load_driver(disp))
-      goto cleanup_device_name;
+      goto cleanup_driver_name;
 
    dri2_dpy->dri2_loader_extension.base.name = __DRI_DRI2_LOADER;
    dri2_dpy->dri2_loader_extension.base.version = 3;
@@ -677,11 +724,7 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp)
                      EGL_WINDOW_BIT | EGL_PIXMAP_BIT, NULL);
 
 
-   disp->Extensions.MESA_drm_image = EGL_TRUE;
-   disp->Extensions.KHR_image_base = EGL_TRUE;
    disp->Extensions.KHR_image_pixmap = EGL_TRUE;
-   disp->Extensions.KHR_gl_renderbuffer_image = EGL_TRUE;
-   disp->Extensions.KHR_gl_texture_2D_image = EGL_TRUE;
 
    disp->Extensions.WL_bind_wayland_display = EGL_TRUE;
    dri2_dpy->authenticate = dri2_wayland_authenticate;
@@ -694,12 +737,13 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp)
 
  cleanup_driver:
    dlclose(dri2_dpy->driver);
- cleanup_device_name:
-   free(dri2_dpy->device_name);
  cleanup_driver_name:
    free(dri2_dpy->driver_name);
  cleanup_fd:
    close(dri2_dpy->fd);
+ cleanup_drm:
+   free(dri2_dpy->device_name);
+   wl_drm_destroy(dri2_dpy->wl_drm);
  cleanup_dpy:
    free(dri2_dpy);
    
index b3e60b8a1153f8227503e402555d854aebc99ce4..5d4ac6ae9482b862aa01f5efed6eb4afa5f24fc1 100644 (file)
@@ -231,7 +231,7 @@ dri2_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type,
    if (dri2_dpy->dri2) {
       xcb_dri2_create_drawable (dri2_dpy->conn, dri2_surf->drawable);
    } else {
-      swrastCreateDrawable(dri2_dpy, dri2_surf, _eglGetConfigKey(conf, EGL_DEPTH_SIZE));
+      swrastCreateDrawable(dri2_dpy, dri2_surf, _eglGetConfigKey(conf, EGL_BUFFER_SIZE));
    }
 
    if (type != EGL_PBUFFER_BIT) {
@@ -990,7 +990,7 @@ dri2_initialize_x11_dri2(_EGLDriver *drv, _EGLDisplay *disp)
    if (!dri2_load_driver(disp))
       goto cleanup_conn;
 
-   dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR);
+   dri2_dpy->fd = open(dri2_dpy->device_name, O_RDWR | O_CLOEXEC);
    if (dri2_dpy->fd == -1) {
       _eglLog(_EGL_WARNING,
              "DRI2: could not open %s (%s)", dri2_dpy->device_name,
@@ -1030,11 +1030,7 @@ dri2_initialize_x11_dri2(_EGLDriver *drv, _EGLDisplay *disp)
         goto cleanup_configs;
    }
 
-   disp->Extensions.MESA_drm_image = EGL_TRUE;
-   disp->Extensions.KHR_image_base = EGL_TRUE;
    disp->Extensions.KHR_image_pixmap = EGL_TRUE;
-   disp->Extensions.KHR_gl_renderbuffer_image = EGL_TRUE;
-   disp->Extensions.KHR_gl_texture_2D_image = EGL_TRUE;
    disp->Extensions.NOK_swap_region = EGL_TRUE;
    disp->Extensions.NOK_texture_from_pixmap = EGL_TRUE;
 
index c232769697a1219f77031028776ffd15bc791828..789b020a592ab7731314bfee5678e12f14817a85 100644 (file)
@@ -12,7 +12,8 @@ wayland_drm_OBJECTS = $(wayland_drm_SOURCES:.c=.o)
 
 wayland_drm_INCLUDES = \
                $(WAYLAND_CFLAGS) \
-               -I$(TOP)/src/egl/main
+               -I$(TOP)/src/egl/main \
+               -I$(TOP)/include
 
 # Generate protocol sources
 prefix=$(shell pkg-config --variable=prefix wayland-server)
index 46725d85179156e5dbd0e8e6468417a277159ded..cd5d191227aa9dda77d29bba02b2eb3114120790 100644 (file)
@@ -2,7 +2,7 @@
 <protocol name="drm">
   <!-- drm support. This object is created by the server and published
        using the display's global event. -->
-  <interface name="drm" version="1">
+  <interface name="wl_drm" version="1">
     <!-- Call this request with the magic received from drmGetMagic().
          It will be passed on to the drmAuthMagic() or
          DRIAuthConnection() call.  This authentication must be
     <!-- Create a wayland buffer for the named DRM buffer.  The DRM
          surface must have a name using the flink ioctl -->
     <request name="create_buffer">
-      <arg name="id" type="new_id" interface="buffer"/>
+      <arg name="id" type="new_id" interface="wl_buffer"/>
       <arg name="name" type="uint"/>
       <arg name="width" type="int"/>
       <arg name="height" type="int"/>
       <arg name="stride" type="uint"/>
-      <arg name="visual" type="object" interface="visual"/>
+      <arg name="visual" type="object" interface="wl_visual"/>
     </request>
 
     <!-- Notification of the path of the drm device which is used by
index 6624fbe9d4eeb8ab5ecad980d3aad7843aa52266..3d5cb399e579cd256fdadc46f7b41751ec7b9e54 100644 (file)
@@ -51,9 +51,8 @@ struct wl_drm {
 };
 
 static void
-drm_buffer_damage(struct wl_buffer *buffer_base,
-                 struct wl_surface *surface,
-                 int32_t x, int32_t y, int32_t width, int32_t height)
+buffer_damage(struct wl_client *client, struct wl_buffer *buffer,
+             int32_t x, int32_t y, int32_t width, int32_t height)
 {
 }
 
@@ -74,6 +73,7 @@ buffer_destroy(struct wl_client *client, struct wl_buffer *buffer)
 }
 
 const static struct wl_buffer_interface buffer_interface = {
+       buffer_damage,
        buffer_destroy
 };
 
@@ -103,8 +103,6 @@ drm_create_buffer(struct wl_client *client, struct wl_drm *drm,
        buffer->buffer.width = width;
        buffer->buffer.height = height;
        buffer->buffer.visual = visual;
-       buffer->buffer.attach = NULL;
-       buffer->buffer.damage = drm_buffer_damage;
 
        if (visual->object.interface != &wl_visual_interface) {
                /* FIXME: Define a real exception event instead of
@@ -164,7 +162,9 @@ const static struct wl_drm_interface drm_interface = {
 };
 
 static void
-post_drm_device(struct wl_client *client, struct wl_object *global)
+post_drm_device(struct wl_client *client,
+               struct wl_object *global,
+               uint32_t version)
 {
        struct wl_drm *drm = (struct wl_drm *) global;
 
index 38b21c25be29fd08f58b9e4507712ebdf7be4a7a..7bb436a78ab9f3ea779b0e412af5ffb96d442618 100644 (file)
@@ -42,11 +42,10 @@ struct wl_egl_window {
 struct wl_egl_pixmap {
        struct wl_egl_display *display;
        struct wl_visual      *visual;
+       struct wl_buffer *buffer;
 
-       int name;
        int width;
        int height;
-       int stride;
 
        void (*destroy) (struct wl_egl_pixmap *egl_pixmap);
 
index 2c84bec64a5dd2cfe304cfd751ea8b2dfcc34b25..3e1a9c45bdc273ee68fada6638b199f91eac1855 100644 (file)
 #include "wayland-drm-client-protocol.h"
 #include <xf86drm.h>
 
-static void
-drm_handle_device(void *data, struct wl_drm *drm, const char *device)
-{
-       struct wl_egl_display *egl_display = data;
-       drm_magic_t magic;
-
-       egl_display->device_name = strdup(device);
-
-       egl_display->fd = open(egl_display->device_name, O_RDWR);
-
-       if (egl_display->fd == -1) {
-               fprintf(stderr, "wayland-egl: could not open %s (%s)",
-                       egl_display->device_name, strerror(errno));
-               return;
-       }
-       drmGetMagic(egl_display->fd, &magic);
-       wl_drm_authenticate(egl_display->drm, magic);
-}
-
-static void
-drm_handle_authenticated(void *data, struct wl_drm *drm)
-{
-       struct wl_egl_display *egl_display = data;
-
-       egl_display->authenticated = true;
-}
-
-static const struct wl_drm_listener drm_listener = {
-       drm_handle_device,
-       drm_handle_authenticated
-};
-
-static void
-wl_display_handle_global(struct wl_display *display, uint32_t id,
-                        const char *interface, uint32_t version, void *data)
-{
-       struct wl_egl_display *egl_display = data;
-
-       if (strcmp(interface, "drm") == 0) {
-               egl_display->drm = wl_drm_create(display, id);
-               wl_drm_add_listener(egl_display->drm, &drm_listener,
-                                   egl_display);
-       }
-}
-
-/* stolen from egl_dri2:dri2_load() */
-static void *
-get_flush_address() {
-       void *handle;
-       void *(*get_proc_address)(const char *procname);
-
-       handle = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);
-       if (handle) {
-               get_proc_address = (void* (*)(const char *))
-                       dlsym(handle, "_glapi_get_proc_address");
-               /* no need to keep a reference */
-               dlclose(handle);
-       }
-
-       /*
-        * If glapi is not available, loading DRI drivers will fail.  Ideally, we
-        * should load one of libGL, libGLESv1_CM, or libGLESv2 and go on.  But if
-        * the app has loaded another one of them with RTLD_LOCAL, there may be
-        * unexpected behaviors later because there will be two copies of glapi
-        * (with global variables of the same names!) in the memory.
-        */
-       if (!get_proc_address) {
-               fprintf(stderr, "failed to find _glapi_get_proc_address");
-               return NULL;
-       }
-
-       return get_proc_address("glFlush");
-}
-
-WL_EGL_EXPORT struct wl_egl_display *
-wl_egl_display_create(struct wl_display *display)
-{
-       struct wl_egl_display *egl_display;
-
-       egl_display = malloc(sizeof *egl_display);
-       if (!egl_display)
-               return NULL;
-
-       egl_display->display = display;
-       egl_display->drm = NULL;
-       egl_display->fd = -1;
-       egl_display->device_name = NULL;
-       egl_display->authenticated = false;
-
-       egl_display->glFlush = (void (*)(void)) get_flush_address();
-
-       wl_display_add_global_listener(display, wl_display_handle_global,
-                                      egl_display);
-
-       return egl_display;
-}
-
-WL_EGL_EXPORT void
-wl_egl_display_destroy(struct wl_egl_display *egl_display)
-{
-
-       free(egl_display->device_name);
-       close(egl_display->fd);
-
-       wl_drm_destroy(egl_display->drm);
-
-       free(egl_display);
-}
-
 WL_EGL_EXPORT void
 wl_egl_window_resize(struct wl_egl_window *egl_window,
                     int width, int height,
@@ -138,8 +29,7 @@ wl_egl_window_resize(struct wl_egl_window *egl_window,
 }
 
 WL_EGL_EXPORT struct wl_egl_window *
-wl_egl_window_create(struct wl_egl_display *egl_display,
-                    struct wl_surface *surface,
+wl_egl_window_create(struct wl_surface *surface,
                     int width, int height,
                     struct wl_visual *visual)
 {
@@ -175,8 +65,7 @@ wl_egl_window_get_attached_size(struct wl_egl_window *egl_window,
 }
 
 WL_EGL_EXPORT struct wl_egl_pixmap *
-wl_egl_pixmap_create(struct wl_egl_display *egl_display,
-                    int width, int height,
+wl_egl_pixmap_create(int width, int height,
                     struct wl_visual *visual, uint32_t flags)
 {
        struct wl_egl_pixmap *egl_pixmap;
@@ -185,14 +74,13 @@ wl_egl_pixmap_create(struct wl_egl_display *egl_display,
        if (egl_pixmap == NULL)
                return NULL;
 
-       egl_pixmap->display = egl_display;
        egl_pixmap->width   = width;
        egl_pixmap->height  = height;
        egl_pixmap->visual  = visual;
-       egl_pixmap->name    = 0;
-       egl_pixmap->stride  = 0;
 
        egl_pixmap->destroy = NULL;
+       egl_pixmap->buffer  = NULL;
+       egl_pixmap->driver_private = NULL;
 
        return egl_pixmap;
 }
@@ -206,21 +94,7 @@ wl_egl_pixmap_destroy(struct wl_egl_pixmap *egl_pixmap)
 }
 
 WL_EGL_EXPORT struct wl_buffer *
-wl_egl_pixmap_create_buffer(struct wl_egl_display *egl_display,
-                           struct wl_egl_pixmap *egl_pixmap)
-{
-       if (egl_pixmap->name == 0)
-               return NULL;
-
-       return wl_drm_create_buffer(egl_display->drm, egl_pixmap->name,
-                                   egl_pixmap->width, egl_pixmap->height,
-                                   egl_pixmap->stride, egl_pixmap->visual);
-}
-
-WL_EGL_EXPORT void
-wl_egl_pixmap_flush(struct wl_egl_display *egl_display,
-                   struct wl_egl_pixmap *egl_pixmap)
+wl_egl_pixmap_create_buffer(struct wl_egl_pixmap *egl_pixmap)
 {
-       if (egl_display->glFlush)
-               egl_display->glFlush();
+       return egl_pixmap->buffer;
 }
index 31580556f031d0c3ecb3e166e9378bcba644ebdb..428bc31f86b626b5d21a703a88fbad8f065c8d6f 100644 (file)
@@ -53,7 +53,6 @@ if env['drm']:
 # Needed by some state trackers
 SConscript('winsys/sw/null/SConscript')
 
-SConscript('state_trackers/python/SConscript')
 if env['platform'] != 'embedded':
     SConscript('state_trackers/vega/SConscript')
     SConscript('state_trackers/egl/SConscript')
index aa1b255c0c9ba35203826f7ff88cb993dcf23172..428e097be09e8d8f9fa2a42e9f4766a70d8f9da7 100644 (file)
@@ -107,6 +107,7 @@ C_SOURCES = \
        util/u_caps.c \
        util/u_cpu_detect.c \
        util/u_dl.c \
+       util/u_draw.c \
        util/u_draw_quad.c \
        util/u_format.c \
        util/u_format_other.c \
index 84519cfd048470dec3e0ff3588360c0e20234784..6176f0ae2a835ba68fe1915e2edebeafb4c13f45 100644 (file)
@@ -154,6 +154,7 @@ source = [
     'util/u_dump_defines.c',
     'util/u_dump_state.c',
     'util/u_dl.c',
+    'util/u_draw.c',
     'util/u_draw_quad.c',
     'util/u_format.c',
     'util/u_format_other.c',
index 95d96719873972590a21392b13bde2733e8ae018..d99f94edc43a590059333e431bac94d9b32793a5 100644 (file)
@@ -751,7 +751,7 @@ void
 draw_set_mapped_texture(struct draw_context *draw,
                         unsigned sampler_idx,
                         uint32_t width, uint32_t height, uint32_t depth,
-                        uint32_t last_level,
+                        uint32_t first_level, uint32_t last_level,
                         uint32_t row_stride[PIPE_MAX_TEXTURE_LEVELS],
                         uint32_t img_stride[PIPE_MAX_TEXTURE_LEVELS],
                         const void *data[PIPE_MAX_TEXTURE_LEVELS])
@@ -760,7 +760,7 @@ draw_set_mapped_texture(struct draw_context *draw,
    if(draw->llvm)
       draw_llvm_set_mapped_texture(draw,
                                 sampler_idx,
-                                width, height, depth, last_level,
+                                width, height, depth, first_level, last_level,
                                 row_stride, img_stride, data);
 #endif
 }
index a0b217e4d33b4c05a5d6a81e4c5cbfb741673d54..7db75b71b43879d33b67269a9eead68c7eb42b5e 100644 (file)
@@ -123,7 +123,7 @@ void
 draw_set_mapped_texture(struct draw_context *draw,
                         unsigned sampler_idx,
                         uint32_t width, uint32_t height, uint32_t depth,
-                        uint32_t last_level,
+                        uint32_t first_level, uint32_t last_level,
                         uint32_t row_stride[PIPE_MAX_TEXTURE_LEVELS],
                         uint32_t img_stride[PIPE_MAX_TEXTURE_LEVELS],
                         const void *data[PIPE_MAX_TEXTURE_LEVELS]);
index a5217c1d4ec8c1bf3cc76b5f1bf618ff76e271da..a1b8fc38880e2fb42b93648e841f97770a8c557d 100644 (file)
@@ -106,6 +106,7 @@ create_jit_texture_type(struct gallivm_state *gallivm)
    elem_types[DRAW_JIT_TEXTURE_WIDTH]  =
    elem_types[DRAW_JIT_TEXTURE_HEIGHT] =
    elem_types[DRAW_JIT_TEXTURE_DEPTH] =
+   elem_types[DRAW_JIT_TEXTURE_FIRST_LEVEL] =
    elem_types[DRAW_JIT_TEXTURE_LAST_LEVEL] = int32_type;
    elem_types[DRAW_JIT_TEXTURE_ROW_STRIDE] =
    elem_types[DRAW_JIT_TEXTURE_IMG_STRIDE] =
@@ -136,6 +137,9 @@ create_jit_texture_type(struct gallivm_state *gallivm)
    LP_CHECK_MEMBER_OFFSET(struct draw_jit_texture, depth,
                           target, texture_type,
                           DRAW_JIT_TEXTURE_DEPTH);
+   LP_CHECK_MEMBER_OFFSET(struct draw_jit_texture, first_level,
+                          target, texture_type,
+                          DRAW_JIT_TEXTURE_FIRST_LEVEL);
    LP_CHECK_MEMBER_OFFSET(struct draw_jit_texture, last_level,
                           target, texture_type,
                           DRAW_JIT_TEXTURE_LAST_LEVEL);
@@ -438,7 +442,8 @@ generate_vs(struct draw_llvm *llvm,
             const LLVMValueRef (*inputs)[NUM_CHANNELS],
             LLVMValueRef system_values_array,
             LLVMValueRef context_ptr,
-            struct lp_build_sampler_soa *draw_sampler)
+            struct lp_build_sampler_soa *draw_sampler,
+            boolean clamp_vertex_color)
 {
    const struct tgsi_token *tokens = llvm->draw->vs.vertex_shader->state.tokens;
    struct lp_type vs_type;
@@ -474,6 +479,30 @@ generate_vs(struct draw_llvm *llvm,
                      outputs,
                      sampler,
                      &llvm->draw->vs.vertex_shader->info);
+
+   if(clamp_vertex_color)
+   {
+      LLVMValueRef out;
+      unsigned chan, attrib;
+      struct lp_build_context bld;
+      struct tgsi_shader_info* info = &llvm->draw->vs.vertex_shader->info;
+      lp_build_context_init(&bld, llvm->gallivm, vs_type);
+
+      for (attrib = 0; attrib < info->num_outputs; ++attrib) {
+         for(chan = 0; chan < NUM_CHANNELS; ++chan) {
+            if(outputs[attrib][chan]) {
+               switch (info->output_semantic_name[attrib]) {
+               case TGSI_SEMANTIC_COLOR:
+               case TGSI_SEMANTIC_BCOLOR:
+                  out = LLVMBuildLoad(builder, outputs[attrib][chan], "");
+                  out = lp_build_clamp(&bld, out, bld.zero, bld.one);
+                  LLVMBuildStore(builder, out, outputs[attrib][chan]);
+                  break;
+               }
+            }
+         }
+      }
+   }
 }
 
 #if DEBUG_STORE
@@ -1235,7 +1264,8 @@ draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *variant)
                   ptr_aos,
                   system_values_array,
                   context_ptr,
-                  sampler);
+                  sampler,
+                  variant->key.clamp_vertex_color);
 
       /* store original positions in clip before further manipulation */
       store_clip(gallivm, io, outputs);
@@ -1446,7 +1476,8 @@ draw_llvm_generate_elts(struct draw_llvm *llvm, struct draw_llvm_variant *varian
                   ptr_aos,
                   system_values_array,
                   context_ptr,
-                  sampler);
+                  sampler,
+                  variant->key.clamp_vertex_color);
 
       /* store original positions in clip before further manipulation */
       store_clip(gallivm, io, outputs);
@@ -1524,6 +1555,8 @@ draw_llvm_make_variant_key(struct draw_llvm *llvm, char *store)
 
    key = (struct draw_llvm_variant_key *)store;
 
+   key->clamp_vertex_color = llvm->draw->rasterizer->clamp_vertex_color; /**/
+
    /* Presumably all variants of the shader should have the same
     * number of vertex elements - ie the number of shader inputs.
     */
@@ -1566,7 +1599,7 @@ void
 draw_llvm_set_mapped_texture(struct draw_context *draw,
                              unsigned sampler_idx,
                              uint32_t width, uint32_t height, uint32_t depth,
-                             uint32_t last_level,
+                             uint32_t first_level, uint32_t last_level,
                              uint32_t row_stride[PIPE_MAX_TEXTURE_LEVELS],
                              uint32_t img_stride[PIPE_MAX_TEXTURE_LEVELS],
                              const void *data[PIPE_MAX_TEXTURE_LEVELS])
@@ -1582,9 +1615,10 @@ draw_llvm_set_mapped_texture(struct draw_context *draw,
    jit_tex->width = width;
    jit_tex->height = height;
    jit_tex->depth = depth;
+   jit_tex->first_level = first_level;
    jit_tex->last_level = last_level;
 
-   for (j = 0; j <= last_level; j++) {
+   for (j = first_level; j <= last_level; j++) {
       jit_tex->data[j] = data[j];
       jit_tex->row_stride[j] = row_stride[j];
       jit_tex->img_stride[j] = img_stride[j];
index e8623e7bcdc6c2c085054d08c94f672ddd977173..375b7b8b571f25537e5de2251250a0b314de6633 100644 (file)
@@ -50,6 +50,7 @@ struct draw_jit_texture
    uint32_t width;
    uint32_t height;
    uint32_t depth;
+   uint32_t first_level;
    uint32_t last_level;
    uint32_t row_stride[PIPE_MAX_TEXTURE_LEVELS];
    uint32_t img_stride[PIPE_MAX_TEXTURE_LEVELS];
@@ -64,6 +65,7 @@ enum {
    DRAW_JIT_TEXTURE_WIDTH = 0,
    DRAW_JIT_TEXTURE_HEIGHT,
    DRAW_JIT_TEXTURE_DEPTH,
+   DRAW_JIT_TEXTURE_FIRST_LEVEL,
    DRAW_JIT_TEXTURE_LAST_LEVEL,
    DRAW_JIT_TEXTURE_ROW_STRIDE,
    DRAW_JIT_TEXTURE_IMG_STRIDE,
@@ -162,6 +164,7 @@ struct draw_llvm_variant_key
 {
    unsigned nr_vertex_elements:8;
    unsigned nr_samplers:8;
+   unsigned clamp_vertex_color:1;
    unsigned clip_xy:1;
    unsigned clip_z:1;
    unsigned clip_user:1;
@@ -169,7 +172,7 @@ struct draw_llvm_variant_key
    unsigned bypass_viewport:1;
    unsigned need_edgeflags:1;
    unsigned nr_planes:4;
-   unsigned pad:6;
+   unsigned pad:5;
 
    /* Variable number of vertex elements:
     */
@@ -295,7 +298,7 @@ void
 draw_llvm_set_mapped_texture(struct draw_context *draw,
                              unsigned sampler_idx,
                              uint32_t width, uint32_t height, uint32_t depth,
-                             uint32_t last_level,
+                             uint32_t first_level, uint32_t last_level,
                              uint32_t row_stride[PIPE_MAX_TEXTURE_LEVELS],
                              uint32_t img_stride[PIPE_MAX_TEXTURE_LEVELS],
                              const void *data[PIPE_MAX_TEXTURE_LEVELS]);
index 574c7cc452f9d9d4c443ca9996d8a05ec45cd578..8af34617353dfe1ee69fe04da1ae620ec1a3374e 100644 (file)
@@ -144,6 +144,7 @@ draw_llvm_texture_member(const struct lp_sampler_dynamic_state *base,
 DRAW_LLVM_TEXTURE_MEMBER(width,      DRAW_JIT_TEXTURE_WIDTH, TRUE)
 DRAW_LLVM_TEXTURE_MEMBER(height,     DRAW_JIT_TEXTURE_HEIGHT, TRUE)
 DRAW_LLVM_TEXTURE_MEMBER(depth,      DRAW_JIT_TEXTURE_DEPTH, TRUE)
+DRAW_LLVM_TEXTURE_MEMBER(first_level,DRAW_JIT_TEXTURE_FIRST_LEVEL, TRUE)
 DRAW_LLVM_TEXTURE_MEMBER(last_level, DRAW_JIT_TEXTURE_LAST_LEVEL, TRUE)
 DRAW_LLVM_TEXTURE_MEMBER(row_stride, DRAW_JIT_TEXTURE_ROW_STRIDE, FALSE)
 DRAW_LLVM_TEXTURE_MEMBER(img_stride, DRAW_JIT_TEXTURE_IMG_STRIDE, FALSE)
@@ -209,6 +210,7 @@ draw_llvm_sampler_soa_create(const struct lp_sampler_static_state *static_state,
    sampler->dynamic_state.base.width = draw_llvm_texture_width;
    sampler->dynamic_state.base.height = draw_llvm_texture_height;
    sampler->dynamic_state.base.depth = draw_llvm_texture_depth;
+   sampler->dynamic_state.base.first_level = draw_llvm_texture_first_level;
    sampler->dynamic_state.base.last_level = draw_llvm_texture_last_level;
    sampler->dynamic_state.base.row_stride = draw_llvm_texture_row_stride;
    sampler->dynamic_state.base.img_stride = draw_llvm_texture_img_stride;
index 58c5858734a0504290f585ff004a019885d07cea..61ae4665539d8ba70e5f68908b140abf226f5cec 100644 (file)
@@ -341,6 +341,16 @@ vbuf_flush_vertices( struct vbuf_stage *vbuf )
       vbuf->max_vertices = vbuf->nr_vertices = 0;
       vbuf->vertex_ptr = vbuf->vertices = NULL;
    }
+
+   /* Reset point/line/tri function pointers.
+    * If (for example) we transition from points to tris and back to points
+    * again, we need to call the vbuf_first_point() function again to flush
+    * the triangles before drawing more points.  This can happen when drawing
+    * with front polygon mode = filled and back polygon mode = line or point.
+    */
+   vbuf->stage.point = vbuf_first_point;
+   vbuf->stage.line = vbuf_first_line;
+   vbuf->stage.tri = vbuf_first_tri;
 }
    
 
@@ -378,10 +388,6 @@ vbuf_flush( struct draw_stage *stage, unsigned flags )
    struct vbuf_stage *vbuf = vbuf_stage( stage );
 
    vbuf_flush_vertices( vbuf );
-
-   stage->point = vbuf_first_point;
-   stage->line = vbuf_first_line;
-   stage->tri = vbuf_first_tri;
 }
 
 
index db2e3c5410d8c054151ae3c6ef665a2ec230a338..b7d693f8584b486e24bf93ed5c76497d9815bbc5 100644 (file)
@@ -146,6 +146,14 @@ struct draw_context
       struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS];
       unsigned nr_vertex_buffers;
 
+      /*
+       * This is the largest legal index value for the current set of
+       * bound vertex buffers.  Regardless of any other consideration,
+       * all vertex lookups need to be clamped to 0..max_index to
+       * prevent out-of-bound access.
+       */
+      unsigned max_index;
+
       struct pipe_vertex_element vertex_element[PIPE_MAX_ATTRIBS];
       unsigned nr_vertex_elements;
 
index c3d7e871f7a3e54bb7a9db4fbbf7cd739ad76ab3..e0eda67c1a2aa6cfc37f9194156ae50e43881f6d 100644 (file)
@@ -470,6 +470,17 @@ draw_vbo(struct draw_context *draw,
    if (0)
       draw_print_arrays(draw, info->mode, info->start, MIN2(info->count, 20));
 
+   draw->pt.max_index = util_draw_max_index(draw->pt.vertex_buffer,
+                                            draw->pt.nr_vertex_buffers,
+                                            draw->pt.vertex_element,
+                                            draw->pt.nr_vertex_elements,
+                                            info);
+
+   /*
+    * TODO: We could use draw->pt.max_index to further narrow
+    * the min_index/max_index hints given by the state tracker.
+    */
+
    for (instance = 0; instance < info->instance_count; instance++) {
       draw->instance_id = instance + info->start_instance;
 
index 4fa3b265e10daf20876354614e5b9b6392fe7ed3..5589a8212e470ac7ebf2f6df9ba8be1e018a8e77 100644 (file)
@@ -139,7 +139,7 @@ void draw_pt_fetch_run( struct pt_fetch *fetch,
                            ((char *)draw->pt.user.vbuffer[i] + 
                             draw->pt.vertex_buffer[i].buffer_offset),
                            draw->pt.vertex_buffer[i].stride,
-                           draw->pt.user.max_index);
+                           draw->pt.max_index);
    }
 
    translate->run_elts( translate,
index 51043102a6113e14f6169983dfee69cb9e5195d6..0ab11d015c6b156290294f7be52d17da3dfb9d81 100644 (file)
@@ -186,7 +186,7 @@ static void fetch_emit_prepare( struct draw_pt_middle_end *middle,
                                   ((char *)draw->pt.user.vbuffer[i] + 
                                    draw->pt.vertex_buffer[i].buffer_offset),
                                   draw->pt.vertex_buffer[i].stride,
-                                  draw->pt.user.max_index);
+                                  draw->pt.max_index);
    }
 
    *max_vertices = (draw->render->max_vertex_buffer_bytes / 
index 1e926fb028ea069aacac2f2e560f7876f135b659..0dbbfe2b73ccca3b3d7669882db3d373395a62f0 100644 (file)
@@ -169,7 +169,7 @@ static void fse_prepare( struct draw_pt_middle_end *middle,
                                ((const ubyte *) draw->pt.user.vbuffer[i] + 
                                 draw->pt.vertex_buffer[i].buffer_offset),
                               draw->pt.vertex_buffer[i].stride,
-                              draw->pt.user.max_index );
+                              draw->pt.max_index );
    }
 
    *max_vertices = (draw->render->max_vertex_buffer_bytes / 
index a6875253094a7731635860c6c0598cd75393bedb..c19dcd9e1f7fe44d54e1f0de8942b60b9603c4e3 100644 (file)
@@ -85,7 +85,12 @@ vsplit_flush_cache(struct vsplit_frontend *vsplit, unsigned flags)
 static INLINE void
 vsplit_add_cache(struct vsplit_frontend *vsplit, unsigned fetch)
 {
-   unsigned hash = fetch % MAP_SIZE;
+   struct draw_context *draw = vsplit->draw;
+   unsigned hash;
+
+   fetch = MIN2(fetch, draw->pt.max_index);
+
+   hash = fetch % MAP_SIZE;
 
    if (vsplit->cache.fetches[hash] != fetch) {
       /* update cache */
index 75dba8c39a58dc7db6e770f91f2e9431c47ec0dc..bb3cbf80ad76980be4614f74713e1b842035da17 100644 (file)
@@ -47,14 +47,18 @@ CONCAT(vsplit_primitive_, ELT_TYPE)(struct vsplit_frontend *vsplit,
    const ushort *draw_elts = NULL;
    unsigned i;
 
+   ib += istart;
+
    /* use the ib directly */
    if (min_index == 0 && sizeof(ib[0]) == sizeof(draw_elts[0])) {
       if (icount > vsplit->max_vertices)
          return FALSE;
 
       for (i = 0; i < icount; i++) {
-         ELT_TYPE idx = ib[istart + i];
-         assert(idx >= min_index && idx <= max_index);
+         ELT_TYPE idx = ib[i];
+            if (idx < min_index || idx > max_index) {
+            debug_printf("warning: index out of range\n");
+         }
       }
       draw_elts = (const ushort *) ib;
    }
@@ -83,17 +87,21 @@ CONCAT(vsplit_primitive_, ELT_TYPE)(struct vsplit_frontend *vsplit,
    if (!draw_elts) {
       if (min_index == 0) {
          for (i = 0; i < icount; i++) {
-            ELT_TYPE idx = ib[istart + i];
+            ELT_TYPE idx = ib[i];
 
-            assert(idx >= min_index && idx <= max_index);
+            if (idx < min_index || idx > max_index) {
+               debug_printf("warning: index out of range\n");
+           }
             vsplit->draw_elts[i] = (ushort) idx;
          }
       }
       else {
          for (i = 0; i < icount; i++) {
-            ELT_TYPE idx = ib[istart + i];
+            ELT_TYPE idx = ib[i];
 
-            assert(idx >= min_index && idx <= max_index);
+            if (idx < min_index || idx > max_index) {
+               debug_printf("warning: index out of range\n");
+           }
             vsplit->draw_elts[i] = (ushort) (idx - min_index);
          }
       }
index 7caad6f0053a77d2d0cfc76de426c7b40e490197..1763dbc199f4c8a41a6ab75d706e289e95e0bc65 100644 (file)
@@ -104,10 +104,17 @@ draw_create_vertex_shader(struct draw_context *draw,
    }
 
    if (!draw->pt.middle.llvm) {
+#if 0
+/* these paths don't support vertex clamping
+ * TODO: either add it, or remove them completely
+ * use LLVM instead if you want performance
+ * use exec instead if you want debugging/more correctness
+ */
 #if defined(PIPE_ARCH_X86)
       vs = draw_create_vs_sse( draw, shader );
 #elif defined(PIPE_ARCH_PPC)
       vs = draw_create_vs_ppc( draw, shader );
+#endif
 #endif
    }
 #if HAVE_LLVM
index c41d7c42a018e20ff58aafe47b89894210eec249..d9c4209a42b42419d9ee8223f6b266816ac33b39 100644 (file)
@@ -95,6 +95,7 @@ vs_exec_run_linear( struct draw_vertex_shader *shader,
    struct tgsi_exec_machine *machine = evs->machine;
    unsigned int i, j;
    unsigned slot;
+   boolean clamp_vertex_color = shader->draw->rasterizer->clamp_vertex_color;
 
    tgsi_exec_set_constant_buffers(machine, PIPE_MAX_CONSTANT_BUFFERS,
                                   constants, const_size);
@@ -151,11 +152,22 @@ vs_exec_run_linear( struct draw_vertex_shader *shader,
        */
       for (j = 0; j < max_vertices; j++) {
          for (slot = 0; slot < shader->info.num_outputs; slot++) {
-            output[slot][0] = machine->Outputs[slot].xyzw[0].f[j];
-            output[slot][1] = machine->Outputs[slot].xyzw[1].f[j];
-            output[slot][2] = machine->Outputs[slot].xyzw[2].f[j];
-            output[slot][3] = machine->Outputs[slot].xyzw[3].f[j];
-
+            unsigned name = shader->info.output_semantic_name[slot];
+            if(clamp_vertex_color &&
+                  (name == TGSI_SEMANTIC_COLOR || name == TGSI_SEMANTIC_BCOLOR))
+            {
+               output[slot][0] = CLAMP(machine->Outputs[slot].xyzw[0].f[j], 0.0f, 1.0f);
+               output[slot][1] = CLAMP(machine->Outputs[slot].xyzw[1].f[j], 0.0f, 1.0f);
+               output[slot][2] = CLAMP(machine->Outputs[slot].xyzw[2].f[j], 0.0f, 1.0f);
+               output[slot][3] = CLAMP(machine->Outputs[slot].xyzw[3].f[j], 0.0f, 1.0f);
+            }
+            else
+            {
+               output[slot][0] = machine->Outputs[slot].xyzw[0].f[j];
+               output[slot][1] = machine->Outputs[slot].xyzw[1].f[j];
+               output[slot][2] = machine->Outputs[slot].xyzw[2].f[j];
+               output[slot][3] = machine->Outputs[slot].xyzw[3].f[j];
+            }
          }
 
 #if 0
index bb2c82fe0eddb5cb3c67525d223c3b560db1498c..0b724a34948768be5ccb406b8c0375a5c098d3ea 100644 (file)
 #include <llvm/Target/TargetInstrInfo.h>
 #include <llvm/Support/raw_ostream.h>
 #include <llvm/Support/MemoryObject.h>
+
+#if HAVE_LLVM >= 0x0209
+#include <llvm/Support/Host.h>
+#else
 #include <llvm/System/Host.h>
+#endif
 
 #if HAVE_LLVM >= 0x0207
 #include <llvm/MC/MCDisassembler.h>
@@ -202,9 +207,17 @@ lp_disassemble(const void* func)
    }
 
    raw_debug_ostream Out;
+   TargetMachine *TM = T->createTargetMachine(Triple, "");
 
+#if HAVE_LLVM >= 0x0300
+   unsigned int AsmPrinterVariant = AsmInfo->getAssemblerDialect();
+#else
    int AsmPrinterVariant = AsmInfo->getAssemblerDialect();
-#if HAVE_LLVM >= 0x0208
+#endif
+#if HAVE_LLVM >= 0x0300
+   OwningPtr<MCInstPrinter> Printer(
+         T->createMCInstPrinter(*TM, AsmPrinterVariant, *AsmInfo));
+#elif HAVE_LLVM >= 0x0208
    OwningPtr<MCInstPrinter> Printer(
          T->createMCInstPrinter(AsmPrinterVariant, *AsmInfo));
 #else
@@ -216,8 +229,6 @@ lp_disassemble(const void* func)
       return;
    }
 
-   TargetMachine *TM = T->createTargetMachine(Triple, "");
-
    const TargetInstrInfo *TII = TM->getInstrInfo();
 
    /*
index 8ad34598a92d94d25fa6975f051dd57d78c61393..4636371a0f5713884d4b019b04dccd43caded23a 100644 (file)
  */
 #define BRILINEAR_FACTOR 2
 
+static LLVMValueRef
+lp_build_minify(struct lp_build_context *bld,
+                LLVMValueRef base_size,
+                LLVMValueRef level);
 
 /**
  * Does the given texture wrap mode allow sampling the texture border color?
@@ -184,9 +188,11 @@ lp_sampler_static_state(struct lp_sampler_static_state *state,
  */
 static LLVMValueRef
 lp_build_rho(struct lp_build_sample_context *bld,
+             unsigned unit,
              const LLVMValueRef ddx[4],
              const LLVMValueRef ddy[4])
 {
+   struct lp_build_context *int_size_bld = &bld->int_size_bld;
    struct lp_build_context *float_size_bld = &bld->float_size_bld;
    struct lp_build_context *float_bld = &bld->float_bld;
    const unsigned dims = bld->dims;
@@ -198,8 +204,9 @@ lp_build_rho(struct lp_build_sample_context *bld,
    LLVMValueRef dsdx, dsdy, dtdx, dtdy, drdx, drdy;
    LLVMValueRef rho_x, rho_y;
    LLVMValueRef rho_vec;
-   LLVMValueRef float_size;
+   LLVMValueRef int_size, float_size;
    LLVMValueRef rho;
+   LLVMValueRef first_level, first_level_vec;
 
    dsdx = ddx[0];
    dsdy = ddy[0];
@@ -235,7 +242,11 @@ lp_build_rho(struct lp_build_sample_context *bld,
 
    rho_vec = lp_build_max(float_size_bld, rho_x, rho_y);
 
-   float_size = lp_build_int_to_float(float_size_bld, bld->int_size);
+   first_level = bld->dynamic_state->first_level(bld->dynamic_state,
+                                                 bld->gallivm, unit);
+   first_level_vec = lp_build_broadcast_scalar(&bld->int_size_bld, first_level);
+   int_size = lp_build_minify(int_size_bld, bld->int_size, first_level_vec);
+   float_size = lp_build_int_to_float(float_size_bld, int_size);
 
    rho_vec = lp_build_mul(float_size_bld, rho_vec, float_size);
 
@@ -442,7 +453,7 @@ lp_build_lod_selector(struct lp_build_sample_context *bld,
       else {
          LLVMValueRef rho;
 
-         rho = lp_build_rho(bld, ddx, ddy);
+         rho = lp_build_rho(bld, unit, ddx, ddy);
 
          /*
           * Compute lod = log2(rho)
@@ -542,18 +553,18 @@ lp_build_nearest_mip_level(struct lp_build_sample_context *bld,
                            LLVMValueRef *level_out)
 {
    struct lp_build_context *int_bld = &bld->int_bld;
-   LLVMValueRef last_level, level;
-
-   LLVMValueRef zero = lp_build_const_int32(bld->gallivm, 0);
+   LLVMValueRef first_level, last_level, level;
 
+   first_level = bld->dynamic_state->first_level(bld->dynamic_state,
+                                                 bld->gallivm, unit);
    last_level = bld->dynamic_state->last_level(bld->dynamic_state,
                                                bld->gallivm, unit);
 
    /* convert float lod to integer */
-   level = lod_ipart;
+   level = lp_build_add(int_bld, lod_ipart, first_level);
 
    /* clamp level to legal range of levels */
-   *level_out = lp_build_clamp(int_bld, level, zero, last_level);
+   *level_out = lp_build_clamp(int_bld, level, first_level, last_level);
 }
 
 
@@ -573,39 +584,42 @@ lp_build_linear_mip_levels(struct lp_build_sample_context *bld,
    LLVMBuilderRef builder = bld->gallivm->builder;
    struct lp_build_context *int_bld = &bld->int_bld;
    struct lp_build_context *float_bld = &bld->float_bld;
-   LLVMValueRef last_level;
+   LLVMValueRef first_level, last_level;
    LLVMValueRef clamp_min;
    LLVMValueRef clamp_max;
 
-   *level0_out = lod_ipart;
-   *level1_out = lp_build_add(int_bld, lod_ipart, int_bld->one);
+   first_level = bld->dynamic_state->first_level(bld->dynamic_state,
+                                                 bld->gallivm, unit);
+
+   *level0_out = lp_build_add(int_bld, lod_ipart, first_level);
+   *level1_out = lp_build_add(int_bld, *level0_out, int_bld->one);
 
    last_level = bld->dynamic_state->last_level(bld->dynamic_state,
                                                bld->gallivm, unit);
 
    /*
-    * Clamp both lod_ipart and lod_ipart + 1 to [0, last_level], with the
-    * minimum number of comparisons, and zeroing lod_fpart in the extreme
+    * Clamp both *level0_out and *level1_out to [first_level, last_level], with
+    * the minimum number of comparisons, and zeroing lod_fpart in the extreme
     * ends in the process.
     */
 
-   /* lod_ipart < 0 */
+   /* *level0_out < first_level */
    clamp_min = LLVMBuildICmp(builder, LLVMIntSLT,
-                             lod_ipart, int_bld->zero,
-                             "clamp_lod_to_zero");
+                             *level0_out, first_level,
+                             "clamp_lod_to_first");
 
    *level0_out = LLVMBuildSelect(builder, clamp_min,
-                                 int_bld->zero, *level0_out, "");
+                                 first_level, *level0_out, "");
 
    *level1_out = LLVMBuildSelect(builder, clamp_min,
-                                 int_bld->zero, *level1_out, "");
+                                 first_level, *level1_out, "");
 
    *lod_fpart_inout = LLVMBuildSelect(builder, clamp_min,
                                       float_bld->zero, *lod_fpart_inout, "");
 
-   /* lod_ipart >= last_level */
+   /* *level0_out >= last_level */
    clamp_max = LLVMBuildICmp(builder, LLVMIntSGE,
-                             lod_ipart, last_level,
+                             *level0_out, last_level,
                              "clamp_lod_to_last");
 
    *level0_out = LLVMBuildSelect(builder, clamp_max,
index 8c9d5df4e43aa9281002977747378a0bfe487f05..a71e656fe0e95d3924f7de9d9b741af1717188b2 100644 (file)
@@ -120,6 +120,12 @@ struct lp_sampler_dynamic_state
              struct gallivm_state *gallivm,
              unsigned unit);
 
+   /** Obtain the first mipmap level (base level) (returns int32) */
+   LLVMValueRef
+   (*first_level)( const struct lp_sampler_dynamic_state *state,
+                   struct gallivm_state *gallivm,
+                   unsigned unit);
+
    /** Obtain the number of mipmap levels minus one (returns int32) */
    LLVMValueRef
    (*last_level)( const struct lp_sampler_dynamic_state *state,
index e61cf9541ea9cb50fd8c28f1939606c912ab3296..4f16015996846d974b08643aa65523f682c54c6c 100644 (file)
@@ -939,6 +939,7 @@ lp_build_sample_aos(struct lp_build_sample_context *bld,
    LLVMValueRef unswizzled[4];
    LLVMValueRef face_ddx[4], face_ddy[4];
    struct lp_build_context h16_bld;
+   LLVMValueRef first_level;
    LLVMValueRef i32t_zero = lp_build_const_int32(bld->gallivm, 0);
 
    /* we only support the common/simple wrap modes at this time */
@@ -1008,7 +1009,9 @@ lp_build_sample_aos(struct lp_build_sample_context *bld,
          lp_build_nearest_mip_level(bld, unit, lod_ipart, &ilevel0);
       }
       else {
-         ilevel0 = i32t_zero;
+         first_level = bld->dynamic_state->first_level(bld->dynamic_state,
+                                                       bld->gallivm, unit);
+         ilevel0 = first_level;
       }
       break;
    case PIPE_TEX_MIPFILTER_NEAREST:
@@ -1065,7 +1068,7 @@ lp_build_sample_aos(struct lp_build_sample_context *bld,
          lp_build_sample_mipmap(bld, 
                                 mag_filter, PIPE_TEX_MIPFILTER_NONE,
                                 s, t, r,
-                                i32t_zero, NULL, NULL,
+                                ilevel0, NULL, NULL,
                                 packed_lo, packed_hi);
       }
       lp_build_endif(&if_ctx);
index 9961ba08f3a1d83b53a1f314589020ff3251a958..4ea7b4bd8a26e8ffc308fb5023ac0cc614aff800 100644 (file)
@@ -943,6 +943,7 @@ lp_build_sample_general(struct lp_build_sample_context *bld,
    LLVMValueRef ilevel0, ilevel1 = NULL;
    LLVMValueRef face_ddx[4], face_ddy[4];
    LLVMValueRef texels[4];
+   LLVMValueRef first_level;
    LLVMValueRef i32t_zero = lp_build_const_int32(bld->gallivm, 0);
    unsigned chan;
 
@@ -1009,7 +1010,9 @@ lp_build_sample_general(struct lp_build_sample_context *bld,
          lp_build_nearest_mip_level(bld, unit, lod_ipart, &ilevel0);
       }
       else {
-         ilevel0 = i32t_zero;
+         first_level = bld->dynamic_state->first_level(bld->dynamic_state,
+                                                       bld->gallivm, unit);
+         ilevel0 = first_level;
       }
       break;
    case PIPE_TEX_MIPFILTER_NEAREST:
@@ -1068,7 +1071,7 @@ lp_build_sample_general(struct lp_build_sample_context *bld,
          lp_build_sample_mipmap(bld, unit,
                                 mag_filter, PIPE_TEX_MIPFILTER_NONE,
                                 s, t, r,
-                                i32t_zero, NULL, NULL,
+                                ilevel0, NULL, NULL,
                                 texels);
       }
       lp_build_endif(&if_ctx);
index b03dd3a0cf88433bd58d8e4deae6b8e2c6d6a370..5231bb08374a463c79d6587892c11c0ee6c7bebc 100644 (file)
@@ -726,6 +726,16 @@ void x86_movzx16(struct x86_function *p, struct x86_reg dst, struct x86_reg src
    emit_modrm(p, dst, src);
 }
 
+void x86_cmovcc( struct x86_function *p,
+                 struct x86_reg dst,
+                 struct x86_reg src,
+                 enum x86_cc cc)
+{
+   DUMP_RRI( dst, src, cc );
+   emit_2ub( p, 0x0f, 0x40 + cc );
+   emit_modrm( p, dst, src );
+}
+
 void x86_xor( struct x86_function *p,
              struct x86_reg dst,
              struct x86_reg src )
index 2b9678b17657764622d59d927437f0dc5da33254..af0565bb59d9158c274ace7ebb7a9b616b93930c 100644 (file)
@@ -309,6 +309,7 @@ void sse_movmskps( struct x86_function *p, struct x86_reg dst, struct x86_reg sr
 
 void x86_add( struct x86_function *p, struct x86_reg dst, struct x86_reg src );
 void x86_and( struct x86_function *p, struct x86_reg dst, struct x86_reg src );
+void x86_cmovcc( struct x86_function *p, struct x86_reg dst, struct x86_reg src, enum x86_cc cc );
 void x86_cmp( struct x86_function *p, struct x86_reg dst, struct x86_reg src );
 void x86_dec( struct x86_function *p, struct x86_reg reg );
 void x86_inc( struct x86_function *p, struct x86_reg reg );
index ad809db720d4b485d7c1b9ee55edb4ca678f31cf..e4e1c86833324917a2eb6ce99d71dd98acb6a871 100644 (file)
@@ -381,14 +381,17 @@ static ALWAYS_INLINE void PIPE_CDECL generic_run_one( struct translate_generic *
 
          if (tg->attrib[attr].instance_divisor) {
             index = instance_id / tg->attrib[attr].instance_divisor;
+            /* XXX we need to clamp the index here too, but to a
+             * per-array max value, not the draw->pt.max_index value
+             * that's being given to us via translate->set_buffer().
+             */
          }
          else {
             index = elt;
+            /* clamp to avoid going out of bounds */
+            index = MIN2(index, tg->attrib[attr].max_index);
          }
 
-         /* clamp to void going out of bounds */
-         index = MIN2(index, tg->attrib[attr].max_index);
-
          src = tg->attrib[attr].input_ptr +
                tg->attrib[attr].input_stride * index;
 
index ef7f4be4c3e215f6e462eb92864abfdb44df484b..c3d15661f053f4c0d5f3481c2958dbde8312bd32 100644 (file)
@@ -53,7 +53,7 @@ struct translate_buffer {
    unsigned max_index;
 };
 
-struct translate_buffer_varient {
+struct translate_buffer_variant {
    unsigned buffer_index;
    unsigned instance_divisor;
    void *ptr;                    /* updated either per vertex or per instance */
@@ -103,12 +103,12 @@ struct translate_sse {
    struct translate_buffer buffer[PIPE_MAX_ATTRIBS];
    unsigned nr_buffers;
 
-   /* Multiple buffer varients can map to a single buffer. */
-   struct translate_buffer_varient buffer_varient[PIPE_MAX_ATTRIBS];
-   unsigned nr_buffer_varients;
+   /* Multiple buffer variants can map to a single buffer. */
+   struct translate_buffer_variant buffer_variant[PIPE_MAX_ATTRIBS];
+   unsigned nr_buffer_variants;
 
-   /* Multiple elements can map to a single buffer varient. */
-   unsigned element_to_buffer_varient[PIPE_MAX_ATTRIBS];
+   /* Multiple elements can map to a single buffer variant. */
+   unsigned element_to_buffer_variant[PIPE_MAX_ATTRIBS];
 
    boolean use_instancing;
    unsigned instance_id;
@@ -1062,15 +1062,17 @@ static boolean init_inputs( struct translate_sse *p,
    struct x86_reg instance_id = x86_make_disp(p->machine_EDI,
                                               get_offset(p, &p->instance_id));
 
-   for (i = 0; i < p->nr_buffer_varients; i++) {
-      struct translate_buffer_varient *varient = &p->buffer_varient[i];
-      struct translate_buffer *buffer = &p->buffer[varient->buffer_index];
+   for (i = 0; i < p->nr_buffer_variants; i++) {
+      struct translate_buffer_variant *variant = &p->buffer_variant[i];
+      struct translate_buffer *buffer = &p->buffer[variant->buffer_index];
 
-      if (!index_size || varient->instance_divisor) {
+      if (!index_size || variant->instance_divisor) {
+         struct x86_reg buf_max_index = x86_make_disp(p->machine_EDI,
+                                                     get_offset(p, &buffer->max_index));
          struct x86_reg buf_stride   = x86_make_disp(p->machine_EDI,
                                                      get_offset(p, &buffer->stride));
          struct x86_reg buf_ptr      = x86_make_disp(p->machine_EDI,
-                                                     get_offset(p, &varient->ptr));
+                                                     get_offset(p, &variant->ptr));
          struct x86_reg buf_base_ptr = x86_make_disp(p->machine_EDI,
                                                      get_offset(p, &buffer->base_ptr));
          struct x86_reg elt = p->idx_ESI;
@@ -1079,12 +1081,12 @@ static boolean init_inputs( struct translate_sse *p,
          /* Calculate pointer to first attrib:
           *   base_ptr + stride * index, where index depends on instance divisor
           */
-         if (varient->instance_divisor) {
+         if (variant->instance_divisor) {
             /* Our index is instance ID divided by instance divisor.
              */
             x86_mov(p->func, tmp_EAX, instance_id);
 
-            if (varient->instance_divisor != 1) {
+            if (variant->instance_divisor != 1) {
                struct x86_reg tmp_EDX = p->tmp2_EDX;
                struct x86_reg tmp_ECX = p->src_ECX;
 
@@ -1093,26 +1095,33 @@ static boolean init_inputs( struct translate_sse *p,
                 */
 
                x86_xor(p->func, tmp_EDX, tmp_EDX);
-               x86_mov_reg_imm(p->func, tmp_ECX, varient->instance_divisor);
+               x86_mov_reg_imm(p->func, tmp_ECX, variant->instance_divisor);
                x86_div(p->func, tmp_ECX);    /* EAX = EDX:EAX / ECX */
             }
+
+            /* XXX we need to clamp the index here too, but to a
+             * per-array max value, not the draw->pt.max_index value
+             * that's being given to us via translate->set_buffer().
+             */
          } else {
             x86_mov(p->func, tmp_EAX, elt);
-         }
 
-         /*
-          * TODO: Respect translate_buffer::max_index.
-          */
+            /* Clamp to max_index
+             */
+            x86_cmp(p->func, tmp_EAX, buf_max_index);
+            x86_cmovcc(p->func, tmp_EAX, buf_max_index, cc_AE);
+         }
 
          x86_imul(p->func, tmp_EAX, buf_stride);
          x64_rexw(p->func);
          x86_add(p->func, tmp_EAX, buf_base_ptr);
 
+         x86_cmp(p->func, p->count_EBP, p->tmp_EAX);
 
          /* In the linear case, keep the buffer pointer instead of the
           * index number.
           */
-         if (!index_size && p->nr_buffer_varients == 1)
+         if (!index_size && p->nr_buffer_variants == 1)
          {
             x64_rexw(p->func);
             x86_mov(p->func, elt, tmp_EAX);
@@ -1138,14 +1147,14 @@ static struct x86_reg get_buffer_ptr( struct translate_sse *p,
       return x86_make_disp(p->machine_EDI,
                            get_offset(p, &p->instance_id));
    }
-   if (!index_size && p->nr_buffer_varients == 1) {
+   if (!index_size && p->nr_buffer_variants == 1) {
       return p->idx_ESI;
    }
-   else if (!index_size || p->buffer_varient[var_idx].instance_divisor) {
+   else if (!index_size || p->buffer_variant[var_idx].instance_divisor) {
       struct x86_reg ptr = p->src_ECX;
       struct x86_reg buf_ptr = 
          x86_make_disp(p->machine_EDI,
-                       get_offset(p, &p->buffer_varient[var_idx].ptr));
+                       get_offset(p, &p->buffer_variant[var_idx].ptr));
       
       x64_rexw(p->func);
       x86_mov(p->func, ptr, buf_ptr);
@@ -1153,15 +1162,19 @@ static struct x86_reg get_buffer_ptr( struct translate_sse *p,
    }
    else {
       struct x86_reg ptr = p->src_ECX;
-      const struct translate_buffer_varient *varient = &p->buffer_varient[var_idx];
+      const struct translate_buffer_variant *variant = &p->buffer_variant[var_idx];
 
       struct x86_reg buf_stride = 
          x86_make_disp(p->machine_EDI,
-                       get_offset(p, &p->buffer[varient->buffer_index].stride));
+                       get_offset(p, &p->buffer[variant->buffer_index].stride));
 
       struct x86_reg buf_base_ptr = 
          x86_make_disp(p->machine_EDI,
-                       get_offset(p, &p->buffer[varient->buffer_index].base_ptr));
+                       get_offset(p, &p->buffer[variant->buffer_index].base_ptr));
+
+      struct x86_reg buf_max_index =
+         x86_make_disp(p->machine_EDI,
+                       get_offset(p, &p->buffer[variant->buffer_index].max_index));
 
 
 
@@ -1179,6 +1192,12 @@ static struct x86_reg get_buffer_ptr( struct translate_sse *p,
          x86_mov(p->func, ptr, elt);
          break;
       }
+
+      /* Clamp to max_index
+       */
+      x86_cmp(p->func, ptr, buf_max_index);
+      x86_cmovcc(p->func, ptr, buf_max_index, cc_AE);
+
       x86_imul(p->func, ptr, buf_stride);
       x64_rexw(p->func);
       x86_add(p->func, ptr, buf_base_ptr);
@@ -1191,11 +1210,11 @@ static struct x86_reg get_buffer_ptr( struct translate_sse *p,
 static boolean incr_inputs( struct translate_sse *p, 
                             unsigned index_size )
 {
-   if (!index_size && p->nr_buffer_varients == 1) {
+   if (!index_size && p->nr_buffer_variants == 1) {
       struct x86_reg stride = x86_make_disp(p->machine_EDI,
                                             get_offset(p, &p->buffer[0].stride));
 
-      if (p->buffer_varient[0].instance_divisor == 0) {
+      if (p->buffer_variant[0].instance_divisor == 0) {
          x64_rexw(p->func);
          x86_add(p->func, p->idx_ESI, stride);
          sse_prefetchnta(p->func, x86_make_disp(p->idx_ESI, 192));
@@ -1206,14 +1225,14 @@ static boolean incr_inputs( struct translate_sse *p,
 
       /* Is this worthwhile??
        */
-      for (i = 0; i < p->nr_buffer_varients; i++) {
-         struct translate_buffer_varient *varient = &p->buffer_varient[i];
+      for (i = 0; i < p->nr_buffer_variants; i++) {
+         struct translate_buffer_variant *variant = &p->buffer_variant[i];
          struct x86_reg buf_ptr = x86_make_disp(p->machine_EDI,
-                                                get_offset(p, &varient->ptr));
+                                                get_offset(p, &variant->ptr));
          struct x86_reg buf_stride = x86_make_disp(p->machine_EDI,
-                                                   get_offset(p, &p->buffer[varient->buffer_index].stride));
+                                                   get_offset(p, &p->buffer[variant->buffer_index].stride));
 
-         if (varient->instance_divisor == 0) {
+         if (variant->instance_divisor == 0) {
             x86_mov(p->func, p->tmp_EAX, buf_stride);
             x64_rexw(p->func);
             x86_add(p->func, p->tmp_EAX, buf_ptr);
@@ -1323,18 +1342,18 @@ static boolean build_vertex_emit( struct translate_sse *p,
    label = x86_get_label(p->func);
    {
       struct x86_reg elt = !index_size ? p->idx_ESI : x86_deref(p->idx_ESI);
-      int last_varient = -1;
+      int last_variant = -1;
       struct x86_reg vb;
 
       for (j = 0; j < p->translate.key.nr_elements; j++) {
          const struct translate_element *a = &p->translate.key.element[j];
-         unsigned varient = p->element_to_buffer_varient[j];
+         unsigned variant = p->element_to_buffer_variant[j];
 
          /* Figure out source pointer address:
           */
-         if (varient != last_varient) {
-            last_varient = varient;
-            vb = get_buffer_ptr(p, index_size, varient, elt);
+         if (variant != last_variant) {
+            last_variant = variant;
+            vb = get_buffer_ptr(p, index_size, variant, elt);
          }
          
          if (!translate_attr( p, a, 
@@ -1460,24 +1479,24 @@ struct translate *translate_sse2_create( const struct translate_key *key )
          }
 
          /*
-          * Map vertex element to vertex buffer varient.
+          * Map vertex element to vertex buffer variant.
           */
-         for (j = 0; j < p->nr_buffer_varients; j++) {
-            if (p->buffer_varient[j].buffer_index == key->element[i].input_buffer &&
-                p->buffer_varient[j].instance_divisor == key->element[i].instance_divisor) {
+         for (j = 0; j < p->nr_buffer_variants; j++) {
+            if (p->buffer_variant[j].buffer_index == key->element[i].input_buffer &&
+                p->buffer_variant[j].instance_divisor == key->element[i].instance_divisor) {
                break;
             }
          }
-         if (j == p->nr_buffer_varients) {
-            p->buffer_varient[j].buffer_index = key->element[i].input_buffer;
-            p->buffer_varient[j].instance_divisor = key->element[i].instance_divisor;
-            p->nr_buffer_varients++;
+         if (j == p->nr_buffer_variants) {
+            p->buffer_variant[j].buffer_index = key->element[i].input_buffer;
+            p->buffer_variant[j].instance_divisor = key->element[i].instance_divisor;
+            p->nr_buffer_variants++;
          }
-         p->element_to_buffer_varient[i] = j;
+         p->element_to_buffer_variant[i] = j;
       } else {
          assert(key->element[i].type == TRANSLATE_ELEMENT_INSTANCE_ID);
 
-         p->element_to_buffer_varient[i] = ELEMENT_BUFFER_INSTANCE_ID;
+         p->element_to_buffer_variant[i] = ELEMENT_BUFFER_INSTANCE_ID;
       }
    }
 
index 32519b148b6467fad3cb8bd8891d590d54521243..e0c8f73c7d32d8852037d39bd3267f9dbc001465 100644 (file)
@@ -270,13 +270,15 @@ util_cpu_detect(void)
              util_cpu_caps.x86_cpu_type = 8 + ((regs2[0] >> 20) & 255); /* use extended family (P4, IA64) */
 
          /* general feature flags */
-         util_cpu_caps.has_tsc    = (regs2[3] & (1 << 8  )) >>  8; /* 0x0000010 */
-         util_cpu_caps.has_mmx    = (regs2[3] & (1 << 23 )) >> 23; /* 0x0800000 */
-         util_cpu_caps.has_sse    = (regs2[3] & (1 << 25 )) >> 25; /* 0x2000000 */
-         util_cpu_caps.has_sse2   = (regs2[3] & (1 << 26 )) >> 26; /* 0x4000000 */
-         util_cpu_caps.has_sse3   = (regs2[2] & (1));          /* 0x0000001 */
-         util_cpu_caps.has_ssse3  = (regs2[2] & (1 << 9 )) >> 9;   /* 0x0000020 */
-         util_cpu_caps.has_sse4_1 = (regs2[2] & (1 << 19)) >> 19;
+         util_cpu_caps.has_tsc    = (regs2[3] >>  8) & 1; /* 0x0000010 */
+         util_cpu_caps.has_mmx    = (regs2[3] >> 23) & 1; /* 0x0800000 */
+         util_cpu_caps.has_sse    = (regs2[3] >> 25) & 1; /* 0x2000000 */
+         util_cpu_caps.has_sse2   = (regs2[3] >> 26) & 1; /* 0x4000000 */
+         util_cpu_caps.has_sse3   = (regs2[2] >>  0) & 1; /* 0x0000001 */
+         util_cpu_caps.has_ssse3  = (regs2[2] >>  9) & 1; /* 0x0000020 */
+         util_cpu_caps.has_sse4_1 = (regs2[2] >> 19) & 1;
+         util_cpu_caps.has_sse4_2 = (regs2[2] >> 20) & 1;
+         util_cpu_caps.has_avx    = (regs2[2] >> 28) & 1;
          util_cpu_caps.has_mmx2   = util_cpu_caps.has_sse; /* SSE cpus supports mmxext too */
 
          cacheline = ((regs2[1] >> 8) & 0xFF) * 8;
@@ -290,10 +292,10 @@ util_cpu_detect(void)
 
          cpuid(0x80000001, regs2);
 
-         util_cpu_caps.has_mmx  |= (regs2[3] & (1 << 23 )) >> 23; /* 0x0800000 */
-         util_cpu_caps.has_mmx2 |= (regs2[3] & (1 << 22 )) >> 22; /* 0x400000 */
-         util_cpu_caps.has_3dnow    = (regs2[3] & (1 << 31 )) >> 31; /* 0x80000000 */
-         util_cpu_caps.has_3dnow_ext = (regs2[3] & (1 << 30 )) >> 30;
+         util_cpu_caps.has_mmx  |= (regs2[3] >> 23) & 1;
+         util_cpu_caps.has_mmx2 |= (regs2[3] >> 22) & 1;
+         util_cpu_caps.has_3dnow = (regs2[3] >> 31) & 1;
+         util_cpu_caps.has_3dnow_ext = (regs2[3] >> 30) & 1;
       }
 
       if (regs[0] >= 0x80000006) {
@@ -329,6 +331,8 @@ util_cpu_detect(void)
       debug_printf("util_cpu_caps.has_sse3 = %u\n", util_cpu_caps.has_sse3);
       debug_printf("util_cpu_caps.has_ssse3 = %u\n", util_cpu_caps.has_ssse3);
       debug_printf("util_cpu_caps.has_sse4_1 = %u\n", util_cpu_caps.has_sse4_1);
+      debug_printf("util_cpu_caps.has_sse4_2 = %u\n", util_cpu_caps.has_sse4_2);
+      debug_printf("util_cpu_caps.has_avx = %u\n", util_cpu_caps.has_avx);
       debug_printf("util_cpu_caps.has_3dnow = %u\n", util_cpu_caps.has_3dnow);
       debug_printf("util_cpu_caps.has_3dnow_ext = %u\n", util_cpu_caps.has_3dnow_ext);
       debug_printf("util_cpu_caps.has_altivec = %u\n", util_cpu_caps.has_altivec);
index f3bef0993c71f181bf9c5a455380b53af3a030ea..856e8d7a0efd6f31eeea4bcc2c5e73a8b14133ba 100644 (file)
@@ -53,6 +53,8 @@ struct util_cpu_caps {
    unsigned has_sse3:1;
    unsigned has_ssse3:1;
    unsigned has_sse4_1:1;
+   unsigned has_sse4_2:1;
+   unsigned has_avx:1;
    unsigned has_3dnow:1;
    unsigned has_3dnow_ext:1;
    unsigned has_altivec:1;
index 42adb1f069996ee8c989a1671edf2ce4638d00b8..2384c36cb13a719abab726e9e606c09e47d48a3f 100644 (file)
@@ -39,6 +39,7 @@
 
 
 #include <stddef.h>
+#include "pipe/p_compiler.h"
 
 
 struct list_head
@@ -47,50 +48,56 @@ struct list_head
     struct list_head *next;
 };
 
+static INLINE void list_inithead(struct list_head *item)
+{
+    item->prev = item;
+    item->next = item;
+}
+
+static INLINE void list_add(struct list_head *item, struct list_head *list)
+{
+    item->prev = list;
+    item->next = list->next;
+    list->next->prev = item;
+    list->next = item;
+}
+
+static INLINE void list_addtail(struct list_head *item, struct list_head *list)
+{
+    item->next = list;
+    item->prev = list->prev;
+    list->prev->next = item;
+    list->prev = item;
+}
+
+static INLINE void list_replace(struct list_head *from, struct list_head *to)
+{
+    to->prev = from->prev;
+    to->next = from->next;
+    from->next->prev = to;
+    from->prev->next = to;
+}
+
+static INLINE void list_del(struct list_head *item)
+{
+    item->prev->next = item->next;
+    item->next->prev = item->prev;
+}
 
-#define LIST_INITHEAD(__item)                  \
-  do {                                         \
-    (__item)->prev = (__item);                 \
-    (__item)->next = (__item);                 \
-  } while (0)
-
-#define LIST_ADD(__item, __list)               \
-  do {                                         \
-    (__item)->prev = (__list);                 \
-    (__item)->next = (__list)->next;           \
-    (__list)->next->prev = (__item);           \
-    (__list)->next = (__item);                 \
-  } while (0)
-
-#define LIST_ADDTAIL(__item, __list)           \
-  do {                                         \
-    (__item)->next = (__list);                 \
-    (__item)->prev = (__list)->prev;           \
-    (__list)->prev->next = (__item);           \
-    (__list)->prev = (__item);                 \
-  } while(0)
-
-#define LIST_REPLACE(__from, __to)             \
-  do {                                         \
-    (__to)->prev = (__from)->prev;             \
-    (__to)->next = (__from)->next;             \
-    (__from)->next->prev = (__to);             \
-    (__from)->prev->next = (__to);             \
-  } while (0)
-
-#define LIST_DEL(__item)                       \
-  do {                                         \
-    (__item)->prev->next = (__item)->next;     \
-    (__item)->next->prev = (__item)->prev;     \
-  } while(0)
-
-#define LIST_DELINIT(__item)                   \
-  do {                                         \
-    (__item)->prev->next = (__item)->next;     \
-    (__item)->next->prev = (__item)->prev;     \
-    (__item)->next = (__item);                 \
-    (__item)->prev = (__item);                 \
-  } while(0)
+static INLINE void list_delinit(struct list_head *item)
+{
+    item->prev->next = item->next;
+    item->next->prev = item->prev;
+    item->next = item;
+    item->prev = item;
+}
+
+#define LIST_INITHEAD(__item) list_inithead(__item)
+#define LIST_ADD(__item, __list) list_add(__item, __list)
+#define LIST_ADDTAIL(__item, __list) list_addtail(__item, __list)
+#define LIST_REPLACE(__from, __to) list_replace(__from, __to)
+#define LIST_DEL(__item) list_del(__item)
+#define LIST_DELINIT(__item) list_delinit(__item)
 
 #define LIST_ENTRY(__type, __item, __field)   \
     ((__type *)(((char *)(__item)) - offsetof(__type, __field)))
@@ -114,4 +121,21 @@ struct list_head
        storage = container_of(pos->member.next, pos, member);  \
        &pos->member != (head);                                         \
        pos = storage, storage = container_of(storage->member.next, storage, member))
+
+#define LIST_FOR_EACH_ENTRY_SAFE_REV(pos, storage, head, member)       \
+   for (pos = container_of((head)->prev, pos, member),                 \
+       storage = container_of(pos->member.prev, pos, member);          \
+       &pos->member != (head);                                         \
+       pos = storage, storage = container_of(storage->member.prev, storage, member))
+
+#define LIST_FOR_EACH_ENTRY_FROM(pos, start, head, member)             \
+   for (pos = container_of((start), pos, member);                      \
+       &pos->member != (head);                                         \
+       pos = container_of(pos->member.next, pos, member))
+
+#define LIST_FOR_EACH_ENTRY_FROM_REV(pos, start, head, member)         \
+   for (pos = container_of((start), pos, member);                      \
+       &pos->member != (head);                                         \
+       pos = container_of(pos->member.prev, pos, member))
+
 #endif /*_U_DOUBLE_LIST_H_*/
diff --git a/src/gallium/auxiliary/util/u_draw.c b/src/gallium/auxiliary/util/u_draw.c
new file mode 100644 (file)
index 0000000..20837be
--- /dev/null
@@ -0,0 +1,99 @@
+/**************************************************************************
+ *
+ * Copyright 2011 VMware, 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 VMWARE 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 "util/u_debug.h"
+#include "util/u_math.h"
+#include "util/u_format.h"
+#include "util/u_draw.h"
+
+
+/**
+ * Returns the largest legal index value for the current set of bound vertex
+ * buffers.  Regardless of any other consideration, all vertex lookups need to
+ * be clamped to 0..max_index to prevent an out-of-bound access.
+ */
+unsigned
+util_draw_max_index(
+      const struct pipe_vertex_buffer *vertex_buffers,
+      unsigned nr_vertex_buffers,
+      const struct pipe_vertex_element *vertex_elements,
+      unsigned nr_vertex_elements,
+      const struct pipe_draw_info *info)
+{
+   unsigned max_index;
+   unsigned i;
+
+   max_index = ~0;
+   for (i = 0; i < nr_vertex_elements; i++) {
+      const struct pipe_vertex_element *element =
+         &vertex_elements[i];
+      const struct pipe_vertex_buffer *buffer =
+         &vertex_buffers[element->vertex_buffer_index];
+      unsigned buffer_size;
+      const struct util_format_description *format_desc;
+      unsigned format_size;
+
+      assert(buffer->buffer->height0 == 1);
+      assert(buffer->buffer->depth0 == 1);
+      buffer_size = buffer->buffer->width0;
+
+      format_desc = util_format_description(element->src_format);
+      assert(format_desc->block.width == 1);
+      assert(format_desc->block.height == 1);
+      assert(format_desc->block.bits % 8 == 0);
+      format_size = format_desc->block.bits/8;
+
+      assert(buffer_size - buffer->buffer_offset <= buffer_size);
+      buffer_size -= buffer->buffer_offset;
+
+      assert(buffer_size - element->src_offset <= buffer_size);
+      buffer_size -= element->src_offset;
+
+      assert(buffer_size - format_size <= buffer_size);
+      buffer_size -= format_size;
+
+      if (buffer->stride != 0) {
+         unsigned buffer_max_index;
+
+         buffer_max_index = buffer_size / buffer->stride;
+
+         if (element->instance_divisor == 0) {
+            /* Per-vertex data */
+            max_index = MIN2(max_index, buffer_max_index);
+         }
+         else {
+            /* Per-instance data. Simply make sure the state tracker didn't
+             * request more instances than those that fit in the buffer */
+            assert((info->start_instance + info->instance_count)/element->instance_divisor
+                   <= (buffer_max_index + 1));
+         }
+      }
+   }
+
+   return max_index;
+}
index f06d09ef91d8049459564494b5202c64973990c9..fdb683ca8a290c49502d1ad3e7a178155af90705 100644 (file)
 #include "pipe/p_state.h"
 
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
 static INLINE void
 util_draw_init_info(struct pipe_draw_info *info)
 {
@@ -136,4 +141,18 @@ util_draw_range_elements(struct pipe_context *pipe,
    pipe->draw_vbo(pipe, &info);
 }
 
+
+unsigned
+util_draw_max_index(
+      const struct pipe_vertex_buffer *vertex_buffers,
+      unsigned nr_vertex_buffers,
+      const struct pipe_vertex_element *vertex_elements,
+      unsigned nr_vertex_elements,
+      const struct pipe_draw_info *info);
+
+
+#ifdef __cplusplus
+}
 #endif
+
+#endif /* !U_DRAW_H */
index 4896faa12bf95cce66dd4b21229c5733e9509995..9cbdd0a5b99cc99994b465e63b613b615788f535 100644 (file)
 #include "u_memory.h"
 #include "u_rect.h"
 #include "u_format.h"
+#include "u_format_s3tc.h"
+
+#include "pipe/p_defines.h"
+
+
+boolean
+util_format_is_float(enum pipe_format format)
+{
+   const struct util_format_description *desc = util_format_description(format);
+   unsigned i;
+
+   assert(desc);
+   if (!desc) {
+      return FALSE;
+   }
+
+   /* Find the first non-void channel. */
+   for (i = 0; i < 4; i++) {
+      if (desc->channel[i].type != UTIL_FORMAT_TYPE_VOID) {
+         break;
+      }
+   }
+
+   if (i == 4) {
+      return FALSE;
+   }
+
+   return desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT ? TRUE : FALSE;
+}
+
+
+boolean
+util_format_is_supported(enum pipe_format format, unsigned bind)
+{
+   if (util_format_is_s3tc(format) && !util_format_s3tc_enabled) {
+      return FALSE;
+   }
+
+#ifndef TEXTURE_FLOAT_ENABLED
+   if ((bind & PIPE_BIND_RENDER_TARGET) &&
+       format != PIPE_FORMAT_R9G9B9E5_FLOAT &&
+       format != PIPE_FORMAT_R11G11B10_FLOAT &&
+       util_format_is_float(format)) {
+      return FALSE;
+   }
+#endif
+
+   return TRUE;
+}
 
 
 void
index 22c63ae162a426e3ab15b7a3d792bddf6ed526bf..e4b3f5df6ee669eb92d817ebfda619bb8457297b 100644 (file)
@@ -88,6 +88,22 @@ PIPE_FORMAT_L16_UNORM             , plain, 1, 1, un16,     ,     ,     , xxx1, r
 PIPE_FORMAT_A16_UNORM             , plain, 1, 1, un16,     ,     ,     , 000x, rgb
 PIPE_FORMAT_I16_UNORM             , plain, 1, 1, un16,     ,     ,     , xxxx, rgb
 PIPE_FORMAT_L16A16_UNORM          , plain, 1, 1, un16, un16,     ,     , xxxy, rgb
+PIPE_FORMAT_A8_SNORM              , plain, 1, 1, sn8 ,     ,     ,     , 000x, rgb
+PIPE_FORMAT_L8_SNORM              , plain, 1, 1, sn8 ,     ,     ,     , xxx1, rgb
+PIPE_FORMAT_L8A8_SNORM            , plain, 1, 1, sn8 , sn8 ,     ,     , xxxy, rgb
+PIPE_FORMAT_I8_SNORM              , plain, 1, 1, sn8 ,     ,     ,     , xxxx, rgb
+PIPE_FORMAT_A16_SNORM             , plain, 1, 1, sn16,     ,     ,     , 000x, rgb
+PIPE_FORMAT_L16_SNORM             , plain, 1, 1, sn16,     ,     ,     , xxx1, rgb
+PIPE_FORMAT_L16A16_SNORM          , plain, 1, 1, sn16, sn16,     ,     , xxxy, rgb
+PIPE_FORMAT_I16_SNORM             , plain, 1, 1, sn16,     ,     ,     , xxxx, rgb
+PIPE_FORMAT_A16_FLOAT             , plain, 1, 1, f16 ,     ,     ,     , 000x, rgb
+PIPE_FORMAT_L16_FLOAT             , plain, 1, 1, f16 ,     ,     ,     , xxx1, rgb
+PIPE_FORMAT_L16A16_FLOAT          , plain, 1, 1, f16 , f16 ,     ,     , xxxy, rgb
+PIPE_FORMAT_I16_FLOAT             , plain, 1, 1, f16 ,     ,     ,     , xxxx, rgb
+PIPE_FORMAT_A32_FLOAT             , plain, 1, 1, f32 ,     ,     ,     , 000x, rgb
+PIPE_FORMAT_L32_FLOAT             , plain, 1, 1, f32 ,     ,     ,     , xxx1, rgb
+PIPE_FORMAT_L32A32_FLOAT          , plain, 1, 1, f32 , f32 ,     ,     , xxxy, rgb
+PIPE_FORMAT_I32_FLOAT             , plain, 1, 1, f32 ,     ,     ,     , xxxx, rgb
 
 # SRGB formats
 PIPE_FORMAT_L8_SRGB               , plain, 1, 1, un8 ,     ,     ,     , xxx1, srgb 
index 7659a802a41605fdc1fed38cb8717db03750be8c..bb3ed72e93256500ccac6fa98a3e62f7e6fb9e16 100644 (file)
@@ -473,6 +473,10 @@ util_format_colormask(const struct util_format_description *desc)
 }
 
 
+boolean
+util_format_is_float(enum pipe_format format);
+
+
 /**
  * Whether the src format can be blitted to destation format with a simple
  * memcpy.
@@ -481,6 +485,12 @@ boolean
 util_is_format_compatible(const struct util_format_description *src_desc,
                           const struct util_format_description *dst_desc);
 
+/**
+ * Whether the format is supported by Gallium for the given bindings.
+ * This covers S3TC textures and floating-point render targets.
+ */
+boolean
+util_format_is_supported(enum pipe_format format, unsigned bind);
 
 /**
  * Whether this format is a rgab8 variant.
index 9caf76c802b6986524185f6f29f75494f3e0d9dd..4c5cc4da18254a2eeedc04f9bdf4f6eabffdb7a3 100644 (file)
@@ -157,6 +157,9 @@ util_resource_copy_region(struct pipe_context *pipe,
    unsigned h = src_box->height;
 
    assert(src && dst);
+   assert((src->target == PIPE_BUFFER && dst->target == PIPE_BUFFER) ||
+          (src->target != PIPE_BUFFER && dst->target != PIPE_BUFFER));
+
    if (!src || !dst)
       return;
 
@@ -188,15 +191,19 @@ util_resource_copy_region(struct pipe_context *pipe,
    assert(dst_map);
 
    if (src_map && dst_map) {
-      util_copy_rect(dst_map,
-                     dst_format,
-                     dst_trans->stride,
-                     0, 0,
-                     w, h,
-                     src_map,
-                     src_trans->stride,
-                     0,
-                     0);
+      if (dst->target == PIPE_BUFFER && src->target == PIPE_BUFFER) {
+         memcpy(dst_map, src_map, w);
+      } else {
+         util_copy_rect(dst_map,
+                        dst_format,
+                        dst_trans->stride,
+                        0, 0,
+                        w, h,
+                        src_map,
+                        src_trans->stride,
+                        0,
+                        0);
+      }
    }
 
    pipe->transfer_unmap(pipe, src_trans);
index 521ac07747cee92d07e6512aa2d0f56d4d3a25d6..dea2928f9501f7bc55492ee6c02bc0f567b1e407 100644 (file)
@@ -499,7 +499,7 @@ void u_vbuf_mgr_set_vertex_buffers(struct u_vbuf_mgr *mgrb,
       /* Update the maximum index. */
       mgr->b.max_index =
             MIN2(mgr->b.max_index,
-                 (vb->buffer->width0 - vb->buffer_offset) / vb->stride);
+                 (vb->buffer->width0 - vb->buffer_offset) / vb->stride - 1);
    }
 
    for (; i < mgr->b.nr_real_vertex_buffers; i++) {
@@ -572,7 +572,11 @@ void u_vbuf_mgr_draw_begin(struct u_vbuf_mgr *mgrb,
    int min_index, max_index;
 
    min_index = info->min_index - info->index_bias;
-   max_index = info->max_index - info->index_bias;
+   if (info->max_index == ~0) {
+      max_index = mgr->b.max_index;
+   } else {
+      max_index = MIN2(info->max_index - info->index_bias, mgr->b.max_index);
+   }
 
    /* Translate vertices with non-native layouts or formats. */
    if (mgr->incompatible_vb_layout || mgr->ve->incompatible_layout) {
index 8b241854c83b97d579c6bc6b87de3e77c4218a27..9380dce4f7284aed1923fca3e64ca41670e8c063 100644 (file)
@@ -53,7 +53,7 @@ struct u_vbuf_mgr {
    int nr_real_vertex_buffers;
 
    /* Precomputed max_index for hardware vertex buffers. */
-   int max_index;
+   unsigned max_index;
 
    /* This uploader can optionally be used by the driver.
     *
index 16b204df67621e7e0963e39cae27d4d4ae369d6b..5027db4314e8b8234123a87925fad442f02c8183 100644 (file)
@@ -655,7 +655,7 @@ init_zscan(struct vl_mpeg12_decoder *dec)
 static bool
 init_idct(struct vl_mpeg12_decoder *dec)
 {
-   struct pipe_sampler_view *matrix, *transpose;
+   struct pipe_sampler_view *matrix, *transpose = NULL;
    float matrix_scale, transpose_scale;
 
    dec->nr_of_idct_render_targets = dec->pipe->screen->get_param(dec->pipe->screen, PIPE_CAP_MAX_RENDER_TARGETS);
index b0229c70f20ce24ebbd367523c7a94407c0b6a2d..25a3245066c9464ded4bbe5f832790d72223fe51 100644 (file)
@@ -179,16 +179,25 @@ the mode of the primitive and the vertices to be fetched, in the range between
 Every instance with instanceID in the range between ``start_instance`` and
 ``start_instance``+``instance_count``-1, inclusive, will be drawn.
 
-All vertex indices must fall inside the range given by ``min_index`` and
-``max_index``.  In case non-indexed draw, ``min_index`` should be set to
+If there is an index buffer bound, and ``indexed`` field is true, all vertex
+indices will be looked up in the index buffer.
+
+In indexed draw, ``min_index`` and ``max_index`` respectively provide a lower
+and upper bound of the indices contained in the index buffer inside the range
+between ``start`` to ``start``+``count``-1.  This allows the driver to
+determine which subset of vertices will be referenced during te draw call
+without having to scan the index buffer.  Providing a over-estimation of the
+the true bounds, for example, a ``min_index`` and ``max_index`` of 0 and
+0xffffffff respectively, must give exactly the same rendering, albeit with less
+performance due to unreferenced vertex buffers being unnecessarily DMA'ed or
+processed.  Providing a underestimation of the true bounds will result in
+undefined behavior, but should not result in program or system failure.
+
+In case of non-indexed draw, ``min_index`` should be set to
 ``start`` and ``max_index`` should be set to ``start``+``count``-1.
 
-``index_bias`` is a value added to every vertex index before fetching vertex
-attributes.  It does not affect ``min_index`` and ``max_index``.
-
-If there is an index buffer bound, and ``indexed`` field is true, all vertex
-indices will be looked up in the index buffer.  ``min_index``, ``max_index``,
-and ``index_bias`` apply after index lookup.
+``index_bias`` is a value added to every vertex index after lookup and before
+fetching vertex attributes.
 
 When drawing indexed primitives, the primitive restart index can be
 used to draw disjoint primitive strips.  For example, several separate
index d547055096fc318f8e534e5e45ad7f954aacc1e2..e10c16ed900eeb1d35ab89606ac530fc59efff07 100644 (file)
@@ -7,6 +7,30 @@ The rasterizer state controls the rendering of points, lines and triangles.
 Attributes include polygon culling state, line width, line stipple,
 multisample state, scissoring and flat/smooth shading.
 
+Linkage
+
+clamp_vertex_color
+^^^^^^^^^^^^^^^^^^
+
+If set, TGSI_SEMANTIC_COLOR registers are clamped to the [0, 1] range after
+the execution of the vertex shader, before being passed to the geometry
+shader or fragment shader.
+
+OpenGL: glClampColor(GL_CLAMP_VERTEX_COLOR) in GL 3.0 or GL_ARB_color_buffer_float
+
+D3D11: seems always disabled
+
+clamp_fragment_color
+^^^^^^^^^^^^^^^^^^^^
+
+Controls whether TGSI_SEMANTIC_COLOR outputs of the fragment shader
+are clamped to [0, 1].
+
+OpenGL: glClampColor(GL_CLAMP_FRAGMENT_COLOR) in GL 3.0 or ARB_color_buffer_float
+
+D3D11: seems always disabled
+
+
 Shading
 -------
 
index 813a21e2ee30cd29e78404f5600b82c6ac9edcaf..f73d8a5d32e6d8fc61fba8194aca0fa6e226f9be 100644 (file)
@@ -685,6 +685,12 @@ galahad_resource_copy_region(struct pipe_context *_pipe,
          util_format_short_name(_dst->format));
    }
 
+   if ((_src->target == PIPE_BUFFER && _dst->target != PIPE_BUFFER) ||
+       (_src->target != PIPE_BUFFER && _dst->target == PIPE_BUFFER)) {
+      glhd_warn("Resource target mismatch: Source is %i, destination is %i",
+                _src->target, _dst->target);
+   }
+
    pipe->resource_copy_region(pipe,
                               dst,
                               dst_level,
index e62b609eb5a66588d6fc6a36ca5fe471eb9db491..0f4327fdc810e994e7fe8e0948c8bccf562eb88d 100644 (file)
@@ -27,6 +27,7 @@
 
 
 #include "draw/draw_context.h"
+#include "util/u_format.h"
 #include "util/u_inlines.h"
 #include "util/u_memory.h"
 #include "util/u_string.h"
@@ -285,6 +286,9 @@ i915_is_format_supported(struct pipe_screen *screen,
    const enum pipe_format *list;
    uint i;
 
+   if (!util_format_is_supported(format, tex_usage))
+      return FALSE;
+
    if (sample_count > 1)
       return FALSE;
 
index d02c420f6c236b0b6bf5c51c57a4ce5b0c5d4dd4..ac6e94500c85297b7022c2edc70e1d279d8310b3 100644 (file)
@@ -37,6 +37,7 @@
 #include "util/u_format.h"
 #include "util/u_memory.h"
 #include "util/u_pack_color.h"
+#include "util/u_surface.h"
 
 /*
  * surface functions using the render engine
@@ -51,6 +52,13 @@ i915_surface_copy_render(struct pipe_context *pipe,
 {
    struct i915_context *i915 = i915_context(pipe);
 
+   /* Fallback for buffers. */
+   if (dst->target == PIPE_BUFFER && src->target == PIPE_BUFFER) {
+      util_resource_copy_region(pipe, dst, dst_level, dstx, dsty, dstz,
+                                src, src_level, src_box);
+      return;
+   }
+
    util_blitter_save_blend(i915->blitter, (void *)i915->blend);
    util_blitter_save_depth_stencil_alpha(i915->blitter, (void *)i915->depth_stencil);
    util_blitter_save_stencil_ref(i915->blitter, &i915->stencil_ref);
@@ -158,6 +166,13 @@ i915_surface_copy_blitter(struct pipe_context *pipe,
    struct pipe_resource *spt = &src_tex->b.b;
    unsigned dst_offset, src_offset;  /* in bytes */
 
+   /* Fallback for buffers. */
+   if (dst->target == PIPE_BUFFER && src->target == PIPE_BUFFER) {
+      util_resource_copy_region(pipe, dst, dst_level, dstx, dsty, dstz,
+                                src, src_level, src_box);
+      return;
+   }
+
    /* XXX cannot copy 3d regions at this time */
    assert(src_box->depth == 1);
    if (dst->target != PIPE_TEXTURE_CUBE &&
index 25204fd088d0be557221b87686a3ec9436b96809..9178dfa8f69c0daca3472dcbf7dc3c580614892b 100644 (file)
@@ -26,6 +26,7 @@
  **************************************************************************/
 
 
+#include "util/u_format.h"
 #include "util/u_inlines.h"
 #include "util/u_memory.h"
 #include "util/u_string.h"
@@ -333,6 +334,9 @@ brw_is_format_supported(struct pipe_screen *screen,
    const enum pipe_format *list;
    uint i;
 
+   if (!util_format_is_supported(format, tex_usage))
+      return FALSE;
+
    if (sample_count > 1)
       return FALSE;
 
diff --git a/src/gallium/drivers/llvmpipe/README b/src/gallium/drivers/llvmpipe/README
deleted file mode 100644 (file)
index 1fc7746..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-LLVMPIPE -- a fork of softpipe that employs LLVM for code generation.
-
-
-Requirements
-============
-
- - A x86 or amd64 processor.  64bit mode is preferred.
-   Support for sse2 is strongly encouraged.  Support for ssse3, and sse4.1 will
-   yield the most efficient code.  The less features the CPU has the more
-   likely is that you ran into underperforming, buggy, or incomplete code.  
-   
-   See /proc/cpuinfo to know what your CPU supports.
- - LLVM. Version 2.8 recommended. 2.6 or later required.
-   For Linux, on a recent Debian based distribution do:
-     aptitude install llvm-dev
-
-   For Windows download pre-built MSVC 9.0 or MinGW binaries from
-   http://people.freedesktop.org/~jrfonseca/llvm/ and set the LLVM environment
-   variable to the extracted path.
-
-   For MSVC there are two set of binaries: llvm-x.x-msvc32mt.7z and
-   llvm-x.x-msvc32mtd.7z .
-
-   You have to set the LLVM=/path/to/llvm-x.x-msvc32mtd env var when passing
-   debug=yes to scons, and LLVM=/path/to/llvm-x.x-msvc32mt when building with
-   debug=no. This is necessary as LLVM builds as static library so the chosen
-   MS CRT must match.
-
- - scons (optional)
-
-
-Building
-========
-
-To build everything on Linux invoke scons as:
-
-  scons build=debug libgl-xlib
-
-Alternatively, you can build it with GNU make, if you prefer, by invoking it as
-
-  make linux-llvm
-
-but the rest of these instructions assume that scons is used.
-
-For windows is everything the except except the winsys:
-
-  scons build=debug libgl-gdi
-
-Using
-=====
-
-On Linux, building will create a drop-in alternative for libGL.so into
-
-  build/foo/gallium/targets/libgl-xlib/libGL.so
-
-To use it set the LD_LIBRARY_PATH environment variable accordingly.
-
-For performance evaluation pass debug=no to scons, and use the corresponding
-lib directory without the "-debug" suffix.
-
-On Windows, building will create a drop-in alternative for opengl32.dll. To use
-it put it in the same directory as the application. It can also be used by
-replacing the native ICD driver, but it's quite an advanced usage, so if you
-need to ask, don't even try it.
-
-
-Profiling
-=========
-
-To profile llvmpipe you should pass the options
-
-  scons build=profile <same-as-before>
-
-This will ensure that frame pointers are used both in C and JIT functions, and
-that no tail call optimizations are done by gcc.
-
-
-To better profile JIT code you'll need to build LLVM with oprofile integration.
-
-  ./configure \
-      --prefix=$install_dir \
-      --enable-optimized \
-      --disable-profiling \
-      --enable-targets=host-only \
-      --with-oprofile
-
-  make -C "$build_dir"
-  make -C "$build_dir" install
-
-  find "$install_dir/lib" -iname '*.a' -print0 | xargs -0 strip --strip-debug
-
-The you should define
-
-  export LLVM=/path/to/llvm-2.6-profile
-
-and rebuild.
-
-
-Unit testing
-============
-
-Building will also create several unit tests in
-build/linux-???-debug/gallium/drivers/llvmpipe:
-
- - lp_test_blend: blending
- - lp_test_conv: SIMD vector conversion
- - lp_test_format: pixel unpacking/packing
-
-Some of this tests can output results and benchmarks to a tab-separated-file
-for posterior analysis, e.g.:
-
-  build/linux-x86_64-debug/gallium/drivers/llvmpipe/lp_test_blend -o blend.tsv
-
-
-Development Notes
-=================
-
-- When looking to this code by the first time start in lp_state_fs.c, and 
-  then skim through the lp_bld_* functions called in there, and the comments
-  at the top of the lp_bld_*.c functions.  
-
-- The driver-independent parts of the LLVM / Gallium code are found in
-  src/gallium/auxiliary/gallivm/.  The filenames and function prefixes
-  need to be renamed from "lp_bld_" to something else though.
-
-- We use LLVM-C bindings for now. They are not documented, but follow the C++
-  interfaces very closely, and appear to be complete enough for code
-  generation. See 
-  http://npcontemplation.blogspot.com/2008/06/secret-of-llvm-c-bindings.html
-  for a stand-alone example.  See the llvm-c/Core.h file for reference.
index 482a902dd23116e7c13c34b36fbbb66b952c6621..268f0fa034b78abcf0671295a483726820910b0c 100644 (file)
@@ -54,6 +54,7 @@ lp_jit_create_types(struct llvmpipe_context *lp)
       elem_types[LP_JIT_TEXTURE_WIDTH]  =
       elem_types[LP_JIT_TEXTURE_HEIGHT] =
       elem_types[LP_JIT_TEXTURE_DEPTH] =
+      elem_types[LP_JIT_TEXTURE_FIRST_LEVEL] =
       elem_types[LP_JIT_TEXTURE_LAST_LEVEL] =  LLVMInt32TypeInContext(lc);
       elem_types[LP_JIT_TEXTURE_ROW_STRIDE] =
       elem_types[LP_JIT_TEXTURE_IMG_STRIDE] =
@@ -81,6 +82,9 @@ lp_jit_create_types(struct llvmpipe_context *lp)
       LP_CHECK_MEMBER_OFFSET(struct lp_jit_texture, depth,
                              gallivm->target, texture_type,
                              LP_JIT_TEXTURE_DEPTH);
+      LP_CHECK_MEMBER_OFFSET(struct lp_jit_texture, first_level,
+                             gallivm->target, texture_type,
+                             LP_JIT_TEXTURE_FIRST_LEVEL);
       LP_CHECK_MEMBER_OFFSET(struct lp_jit_texture, last_level,
                              gallivm->target, texture_type,
                              LP_JIT_TEXTURE_LAST_LEVEL);
index a6763dce17abf5bcf155096360d1529f5d5267b8..04e8dd5267b4c92debcfea0c41be92ac0e1948c4 100644 (file)
@@ -50,6 +50,7 @@ struct lp_jit_texture
    uint32_t width;
    uint32_t height;
    uint32_t depth;
+   uint32_t first_level;
    uint32_t last_level;
    uint32_t row_stride[LP_MAX_TEXTURE_LEVELS];
    uint32_t img_stride[LP_MAX_TEXTURE_LEVELS];
@@ -66,6 +67,7 @@ enum {
    LP_JIT_TEXTURE_WIDTH = 0,
    LP_JIT_TEXTURE_HEIGHT,
    LP_JIT_TEXTURE_DEPTH,
+   LP_JIT_TEXTURE_FIRST_LEVEL,
    LP_JIT_TEXTURE_LAST_LEVEL,
    LP_JIT_TEXTURE_ROW_STRIDE,
    LP_JIT_TEXTURE_IMG_STRIDE,
index 521a52ad3ae907a2dec5ee00e7e29f0f3e2137ef..036a6e0c3796b702e1fee22817b316b0457d15fe 100644 (file)
@@ -166,6 +166,7 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
       return 0;
    case PIPE_CAP_TGSI_INSTANCEID:
    case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
+   case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
       return 1;
    default:
       return 0;
index 3813e0ed972fcf530ff15510d5789b6ebb289bfe..c82ab821c7eb81008170e30fa89f6f6d634e4d45 100644 (file)
@@ -653,6 +653,7 @@ lp_setup_set_fragment_sampler_views(struct lp_setup_context *setup,
          jit_tex->width = tex->width0;
          jit_tex->height = tex->height0;
          jit_tex->depth = tex->depth0;
+         jit_tex->first_level = view->u.tex.first_level;
          jit_tex->last_level = tex->last_level;
 
          /* We're referencing the texture's internal data, so save a
@@ -663,7 +664,7 @@ lp_setup_set_fragment_sampler_views(struct lp_setup_context *setup,
          if (!lp_tex->dt) {
             /* regular texture - setup array of mipmap level pointers */
             int j;
-            for (j = 0; j <= tex->last_level; j++) {
+            for (j = view->u.tex.first_level; j <= tex->last_level; j++) {
                jit_tex->data[j] =
                   llvmpipe_get_texture_image_all(lp_tex, j, LP_TEX_USAGE_READ,
                                                  LP_TEX_LAYOUT_LINEAR);
@@ -677,6 +678,7 @@ lp_setup_set_fragment_sampler_views(struct lp_setup_context *setup,
                   jit_tex->width = TILE_SIZE/8;
                   jit_tex->height = TILE_SIZE/8;
                   jit_tex->depth = 1;
+                  jit_tex->first_level = 0;
                   jit_tex->last_level = 0;
                   jit_tex->row_stride[j] = 0;
                   jit_tex->img_stride[j] = 0;
index 1dd866195d336e4d6956e854ed1f3e79b38af8a5..df9fb89cc8ec38eb983ae9b5f60172d5c580fce7 100644 (file)
@@ -269,7 +269,7 @@ llvmpipe_prepare_vertex_sampling(struct llvmpipe_context *lp,
          if (!lp_tex->dt) {
             /* regular texture - setup array of mipmap level pointers */
             int j;
-            for (j = 0; j <= tex->last_level; j++) {
+            for (j = view->u.tex.first_level; j <= tex->last_level; j++) {
                data[j] =
                   llvmpipe_get_texture_image_all(lp_tex, j, LP_TEX_USAGE_READ,
                                                  LP_TEX_LAYOUT_LINEAR);
@@ -293,7 +293,7 @@ llvmpipe_prepare_vertex_sampling(struct llvmpipe_context *lp,
          draw_set_mapped_texture(lp->draw,
                                  i,
                                  tex->width0, tex->height0, tex->depth0,
-                                 tex->last_level,
+                                 view->u.tex.first_level, tex->last_level,
                                  row_stride, img_stride, data);
       }
    }
index f49638acf08af1df224ca76dd272d067e135043c..1b5e9d055f5de631ea1cefe713214857acc08107 100644 (file)
@@ -67,6 +67,13 @@ lp_resource_copy(struct pipe_context *pipe,
    unsigned height = src_box->height;
    assert(src_box->depth == 1);
 
+   /* Fallback for buffers. */
+   if (dst->target == PIPE_BUFFER && src->target == PIPE_BUFFER) {
+      util_resource_copy_region(pipe, dst, dst_level, dstx, dsty, dstz,
+                                src, src_level, src_box);
+      return;
+   }
+
    llvmpipe_flush_resource(pipe,
                            dst, dst_level, dstz,
                            FALSE, /* read_only */
index ed4282937f88859aea7ffe416395e1c6a67a86ee..ccc139603ee043e14b0d22e878924b0cac0db4cd 100644 (file)
@@ -149,6 +149,7 @@ lp_llvm_texture_member(const struct lp_sampler_dynamic_state *base,
 LP_LLVM_TEXTURE_MEMBER(width,      LP_JIT_TEXTURE_WIDTH, TRUE)
 LP_LLVM_TEXTURE_MEMBER(height,     LP_JIT_TEXTURE_HEIGHT, TRUE)
 LP_LLVM_TEXTURE_MEMBER(depth,      LP_JIT_TEXTURE_DEPTH, TRUE)
+LP_LLVM_TEXTURE_MEMBER(first_level, LP_JIT_TEXTURE_FIRST_LEVEL, TRUE)
 LP_LLVM_TEXTURE_MEMBER(last_level, LP_JIT_TEXTURE_LAST_LEVEL, TRUE)
 LP_LLVM_TEXTURE_MEMBER(row_stride, LP_JIT_TEXTURE_ROW_STRIDE, FALSE)
 LP_LLVM_TEXTURE_MEMBER(img_stride, LP_JIT_TEXTURE_IMG_STRIDE, FALSE)
@@ -219,6 +220,7 @@ lp_llvm_sampler_soa_create(const struct lp_sampler_static_state *static_state,
    sampler->dynamic_state.base.width = lp_llvm_texture_width;
    sampler->dynamic_state.base.height = lp_llvm_texture_height;
    sampler->dynamic_state.base.depth = lp_llvm_texture_depth;
+   sampler->dynamic_state.base.first_level = lp_llvm_texture_first_level;
    sampler->dynamic_state.base.last_level = lp_llvm_texture_last_level;
    sampler->dynamic_state.base.row_stride = lp_llvm_texture_row_stride;
    sampler->dynamic_state.base.img_stride = lp_llvm_texture_img_stride;
index 496b7f5ec6dd827b43cab5c2af33783b4b5ff8be..18308b796f3402a518b30a4c2d7779e54b122a7c 100644 (file)
@@ -337,6 +337,7 @@ static int noop_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
        case PIPE_CAP_TEXTURE_SHADOW_MAP:
        case PIPE_CAP_TEXTURE_SWIZZLE:
        case PIPE_CAP_BLEND_EQUATION_SEPARATE:
+       case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
 
          return 1;
        case PIPE_CAP_DUAL_SOURCE_BLEND:
index 9bb3211728c2af36c2714e29bb77e91de665a59b..41a380ec2ec3722350de7a361949b77976e72f8d 100644 (file)
@@ -558,7 +558,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #define NV50_3D_UNK0F8C                                                0x00000f8c
 
-#define NV50_3D_UNK0F90                                                0x00000f90
+#define NV50_3D_COLOR_MASK_COMMON                              0x00000f90
 
 #define NV50_3D_UNK0F94                                                0x00000f94
 
@@ -1007,7 +1007,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define NV50_3D_TEX_CACHE_CTL_UNK1__MASK                       0x00000030
 #define NV50_3D_TEX_CACHE_CTL_UNK1__SHIFT                      4
 
-#define NV50_3D_UNK133C                                                0x0000133c
+#define NV50_3D_BLEND_SEPARATE_ALPHA                           0x0000133c
 
 #define NV50_3D_BLEND_EQUATION_RGB                             0x00001340
 #define NV50_3D_BLEND_EQUATION_RGB_FUNC_ADD                    0x00008006
@@ -1033,7 +1033,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #define NV50_3D_BLEND_FUNC_DST_ALPHA                           0x00001358
 
-#define NV50_3D_UNK135C                                                0x0000135c
+#define NV50_3D_BLEND_ENABLE_COMMON                            0x0000135c
 
 #define NV50_3D_BLEND_ENABLE(i0)                              (0x00001360 + 0x4*(i0))
 #define NV50_3D_BLEND_ENABLE__ESIZE                            0x00000004
@@ -1673,7 +1673,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define NV50_3D_MAP_SEMANTIC_0_BFC0_ID__SHIFT                  8
 #define NV50_3D_MAP_SEMANTIC_0_COLR_NR__MASK                   0x00ff0000
 #define NV50_3D_MAP_SEMANTIC_0_COLR_NR__SHIFT                  16
-#define NV50_3D_MAP_SEMANTIC_0_CLMP_EN                         0xff000000
+#define NV50_3D_MAP_SEMANTIC_0_CLMP_EN                         0x01000000
 
 #define NV50_3D_MAP_SEMANTIC_1                                 0x00001908
 #define NV50_3D_MAP_SEMANTIC_1_CLIP_START__MASK                        0x000000ff
@@ -1706,7 +1706,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define NV50_3D_CULL_FACE_BACK                                 0x00000405
 #define NV50_3D_CULL_FACE_FRONT_AND_BACK                       0x00000408
 
-#define NV50_3D_UNK1924                                                0x00001924
+#define NV50_3D_LINE_LAST_PIXEL                                        0x00001924
 
 #define NVA3_3D_FP_MULTISAMPLE                                 0x00001928
 #define NVA3_3D_FP_MULTISAMPLE_EXPORT_SAMPLE_MASK              0x00000001
index 930cee7c1e748e7ba9e51cdb08de699a94c13d21..632ca4daf742adaa557bcfabbb61ef574a791c67 100644 (file)
@@ -46,6 +46,17 @@ nv50_flush(struct pipe_context *pipe,
    FIRE_RING(screen->channel);
 }
 
+static void
+nv50_texture_barrier(struct pipe_context *pipe)
+{
+   struct nouveau_channel *chan = nv50_context(pipe)->screen->base.channel;
+
+   BEGIN_RING(chan, RING_3D(SERIALIZE), 1);
+   OUT_RING  (chan, 0);
+   BEGIN_RING(chan, RING_3D(TEX_CACHE_CTL), 1);
+   OUT_RING  (chan, 0x20);
+}
+
 void
 nv50_default_flush_notify(struct nouveau_channel *chan)
 {
@@ -125,6 +136,7 @@ nv50_create(struct pipe_screen *pscreen, void *priv)
    pipe->clear = nv50_clear;
 
    pipe->flush = nv50_flush;
+   pipe->texture_barrier = nv50_texture_barrier;
 
    if (!screen->cur_ctx)
       screen->cur_ctx = nv50;
index 46e6c2250af721dc2215300e511f1f90154cee38..3f031994f0a29f130ad08c20deb1d7d17b833f3e 100644 (file)
@@ -1,7 +1,6 @@
 #ifndef __NV50_CONTEXT_H__
 #define __NV50_CONTEXT_H__
 
-#include <stdio.h>
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
 #include "pipe/p_state.h"
@@ -13,6 +12,7 @@
 
 #include "draw/draw_vertex.h"
 
+#include "nv50_debug.h"
 #include "nv50_winsys.h"
 #include "nv50_stateobj.h"
 #include "nv50_screen.h"
 #include "nv50_3d.xml.h"
 #include "nv50_2d.xml.h"
 
-#define NOUVEAU_ERR(fmt, args...) \
-   fprintf(stderr, "%s:%d -  "fmt, __FUNCTION__, __LINE__, ##args);
-
-#ifdef NOUVEAU_DEBUG
-# define NOUVEAU_DBG(args...) printf(args);
-#else
-# define NOUVEAU_DBG(args...)
-#endif
-
 #define NV50_NEW_BLEND        (1 << 0)
 #define NV50_NEW_RASTERIZER   (1 << 1)
 #define NV50_NEW_ZSA          (1 << 2)
@@ -80,6 +71,8 @@ struct nv50_context {
       uint32_t instance_elts; /* bitmask of per-instance elements */
       uint32_t instance_base;
       uint32_t interpolant_ctrl;
+      uint32_t semantic_color;
+      uint32_t semantic_psize;
       int32_t index_bias;
       boolean prim_restart;
       boolean point_sprite;
@@ -183,7 +176,7 @@ void nv50_fragprog_validate(struct nv50_context *);
 void nv50_fp_linkage_validate(struct nv50_context *);
 void nv50_gp_linkage_validate(struct nv50_context *);
 void nv50_constbufs_validate(struct nv50_context *);
-void nv50_sprite_coords_validate(struct nv50_context *);
+void nv50_validate_derived_rs(struct nv50_context *);
 
 /* nv50_state.c */
 extern void nv50_init_state_functions(struct nv50_context *);
diff --git a/src/gallium/drivers/nv50/nv50_debug.h b/src/gallium/drivers/nv50/nv50_debug.h
new file mode 100644 (file)
index 0000000..f3dee62
--- /dev/null
@@ -0,0 +1,25 @@
+
+#ifndef __NV50_DEBUG_H__
+#define __NV50_DEBUG_H__
+
+#include <stdio.h>
+
+#include "util/u_debug.h"
+
+#define NV50_DEBUG_MISC       0x0001
+#define NV50_DEBUG_SHADER     0x0100
+#define NV50_DEBUG_PROG_IR    0x0200
+#define NV50_DEBUG_PROG_RA    0x0400
+#define NV50_DEBUG_PROG_CFLOW 0x0800
+#define NV50_DEBUG_PROG_ALL   0x1f00
+
+#define NV50_DEBUG 0
+
+#define NOUVEAU_ERR(fmt, args...)                                 \
+   fprintf(stderr, "%s:%d - "fmt, __FUNCTION__, __LINE__, ##args)
+
+#define NV50_DBGMSG(ch, args...)           \
+   if ((NV50_DEBUG) & (NV50_DEBUG_##ch))        \
+      debug_printf(args)
+
+#endif /* __NV50_DEBUG_H__ */
index 7946117cf306e0e965a4e98a804d33b8cd4845f2..c65189d06710897016c72975a5532223f45d429c 100644 (file)
@@ -93,6 +93,10 @@ const struct nv50_format nv50_format_table[PIPE_FORMAT_COUNT] =
     B_(C2, C1, C0, C3, UNORM, UNORM, UNORM, UNORM, 4_4_4_4, 1),
     SAMPLER_VIEW },
 
+   [PIPE_FORMAT_B4G4R4X4_UNORM] = { 0,
+    B_(C2, C1, C0, ONE_FLOAT, UNORM, UNORM, UNORM, UNORM, 4_4_4_4, 1),
+    SAMPLER_VIEW },
+
    [PIPE_FORMAT_R10G10B10A2_UNORM] = { NV50_SURFACE_FORMAT_A2B10G10R10_UNORM,
     A_(C0, C1, C2, C3, UNORM, UNORM, UNORM, UNORM, 2_10_10_10, 0),
     SAMPLER_VIEW | RENDER_TARGET | VERTEX_BUFFER | SCANOUT },
@@ -138,14 +142,62 @@ const struct nv50_format nv50_format_table[PIPE_FORMAT_COUNT] =
     A_(C0, C0, C0, ONE_FLOAT, UNORM, UNORM, UNORM, UNORM, 8, 0),
     SAMPLER_VIEW | RENDER_TARGET },
 
-   [PIPE_FORMAT_I8_UNORM] = { NV50_SURFACE_FORMAT_R8_UNORM,
-    A_(C0, C0, C0, C0, UNORM, UNORM, UNORM, UNORM, 8, 0),
+   [PIPE_FORMAT_L16_SNORM] = { NV50_SURFACE_FORMAT_R16_SNORM,
+    B_(C0, C0, C0, ONE_FLOAT, SNORM, SNORM, SNORM, SNORM, 16, 0),
+    SAMPLER_VIEW | RENDER_TARGET },
+
+   [PIPE_FORMAT_L16_FLOAT] = { NV50_SURFACE_FORMAT_R16_FLOAT,
+    B_(C0, C0, C0, ONE_FLOAT, FLOAT, FLOAT, FLOAT, FLOAT, 16, 0),
     SAMPLER_VIEW | RENDER_TARGET },
 
+   [PIPE_FORMAT_L32_FLOAT] = { NV50_SURFACE_FORMAT_R32_FLOAT,
+    B_(C0, C0, C0, ONE_FLOAT, FLOAT, FLOAT, FLOAT, FLOAT, 32, 0),
+    SAMPLER_VIEW | RENDER_TARGET },
+
+   [PIPE_FORMAT_I8_UNORM] = { 0,
+    A_(C0, C0, C0, C0, UNORM, UNORM, UNORM, UNORM, 8, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_I16_UNORM] = { NV50_SURFACE_FORMAT_R16_UNORM,
+    A_(C0, C0, C0, C0, UNORM, UNORM, UNORM, UNORM, 16, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_I16_SNORM] = { NV50_SURFACE_FORMAT_R16_SNORM,
+    B_(C0, C0, C0, C0, SNORM, SNORM, SNORM, SNORM, 16, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_I16_FLOAT] = { NV50_SURFACE_FORMAT_R16_FLOAT,
+    B_(C0, C0, C0, C0, FLOAT, FLOAT, FLOAT, FLOAT, 16, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_I32_FLOAT] = { NV50_SURFACE_FORMAT_R32_FLOAT,
+    B_(C0, C0, C0, C0, FLOAT, FLOAT, FLOAT, FLOAT, 32, 0),
+    SAMPLER_VIEW },
+
    [PIPE_FORMAT_A8_UNORM] = { NV50_SURFACE_FORMAT_A8_UNORM,
     A_(ZERO, ZERO, ZERO, C0, UNORM, UNORM, UNORM, UNORM, 8, 0),
     SAMPLER_VIEW | RENDER_TARGET },
 
+   [PIPE_FORMAT_A8_SNORM] = { 0,
+    A_(ZERO, ZERO, ZERO, C0, SNORM, SNORM, SNORM, SNORM, 8, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_A16_UNORM] = { 0,
+    A_(ZERO, ZERO, ZERO, C0, UNORM, UNORM, UNORM, UNORM, 16, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_A16_SNORM] = { 0,
+    A_(ZERO, ZERO, ZERO, C0, SNORM, SNORM, SNORM, SNORM, 16, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_A16_FLOAT] = { 0,
+    B_(ZERO, ZERO, ZERO, C0, FLOAT, FLOAT, FLOAT, FLOAT, 16, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_A32_FLOAT] = { 0,
+    B_(ZERO, ZERO, ZERO, C0, FLOAT, FLOAT, FLOAT, FLOAT, 32, 0),
+    SAMPLER_VIEW },
+
    [PIPE_FORMAT_L8A8_UNORM] = { 0,
     A_(C0, C0, C0, C1, UNORM, UNORM, UNORM, UNORM, 8_8, 0),
     SAMPLER_VIEW },
@@ -154,6 +206,26 @@ const struct nv50_format nv50_format_table[PIPE_FORMAT_COUNT] =
     A_(C0, C0, C0, C1, UNORM, UNORM, UNORM, UNORM, 8_8, 0),
     SAMPLER_VIEW },
 
+   [PIPE_FORMAT_L16A16_UNORM] = { 0,
+    A_(C0, C0, C0, C1, UNORM, UNORM, UNORM, UNORM, 16_16, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_L16A16_SNORM] = { 0,
+    A_(C0, C0, C0, C1, SNORM, SNORM, SNORM, SNORM, 16_16, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_L16A16_FLOAT] = { 0,
+    B_(C0, C0, C0, C1, FLOAT, FLOAT, FLOAT, FLOAT, 16_16, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_L32A32_FLOAT] = { 0,
+    B_(C0, C0, C0, C1, FLOAT, FLOAT, FLOAT, FLOAT, 32_32, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_L4A4_UNORM] = { 0,
+    B_(C0, C0, C0, C1, UNORM, UNORM, UNORM, UNORM, 4_4, 0),
+    SAMPLER_VIEW },
+
    /* DXT, RGTC */
 
    [PIPE_FORMAT_DXT1_RGB] = { 0,
@@ -172,6 +244,22 @@ const struct nv50_format nv50_format_table[PIPE_FORMAT_COUNT] =
     B_(C0, C1, C2, C3, UNORM, UNORM, UNORM, UNORM, DXT5, 0),
     SAMPLER_VIEW },
 
+   [PIPE_FORMAT_DXT1_SRGB] = { 0,
+    B_(C0, C1, C2, ONE_FLOAT, UNORM, UNORM, UNORM, UNORM, DXT1, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_DXT1_SRGBA] = { 0,
+    B_(C0, C1, C2, C3, UNORM, UNORM, UNORM, UNORM, DXT1, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_DXT3_SRGBA] = { 0,
+    B_(C0, C1, C2, C3, UNORM, UNORM, UNORM, UNORM, DXT3, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_DXT5_SRGBA] = { 0,
+    B_(C0, C1, C2, C3, UNORM, UNORM, UNORM, UNORM, DXT5, 0),
+    SAMPLER_VIEW },
+
    [PIPE_FORMAT_RGTC1_UNORM] = { 0,
     B_(C0, ZERO, ZERO, ONE_FLOAT, UNORM, UNORM, UNORM, UNORM, RGTC1, 0),
     SAMPLER_VIEW },
@@ -237,7 +325,7 @@ const struct nv50_format nv50_format_table[PIPE_FORMAT_COUNT] =
    /* SNORM 32 */
 
    [PIPE_FORMAT_R32G32B32A32_SNORM] = { 0,
-    A_(C0, C1, C2, C3, FLOAT, FLOAT, FLOAT, FLOAT, 32_32_32_32, 0),
+    A_(C0, C1, C2, C3, SNORM, SNORM, SNORM, SNORM, 32_32_32_32, 0),
     VERTEX_BUFFER | SAMPLER_VIEW },
 
    [PIPE_FORMAT_R32G32B32_SNORM] = { 0,
@@ -255,7 +343,7 @@ const struct nv50_format nv50_format_table[PIPE_FORMAT_COUNT] =
    /* UNORM 32 */
 
    [PIPE_FORMAT_R32G32B32A32_UNORM] = { 0,
-    A_(C0, C1, C2, C3, FLOAT, FLOAT, FLOAT, FLOAT, 32_32_32_32, 0),
+    A_(C0, C1, C2, C3, UNORM, UNORM, UNORM, UNORM, 32_32_32_32, 0),
     VERTEX_BUFFER | SAMPLER_VIEW },
 
    [PIPE_FORMAT_R32G32B32_UNORM] = { 0,
@@ -281,7 +369,7 @@ const struct nv50_format nv50_format_table[PIPE_FORMAT_COUNT] =
     VERTEX_BUFFER | SAMPLER_VIEW },
 
    [PIPE_FORMAT_R16G16_SNORM] = { NV50_SURFACE_FORMAT_R16G16_SNORM,
-    A_(C0, C1, C2, C3, SNORM, SNORM, SNORM, SNORM, 16_16, 0),
+    A_(C0, C1, ZERO, ONE_FLOAT, SNORM, SNORM, SNORM, SNORM, 16_16, 0),
     VERTEX_BUFFER | SAMPLER_VIEW | RENDER_TARGET },
 
    [PIPE_FORMAT_R16_SNORM] = { NV50_SURFACE_FORMAT_R16_SNORM,
@@ -299,7 +387,7 @@ const struct nv50_format nv50_format_table[PIPE_FORMAT_COUNT] =
     VERTEX_BUFFER | SAMPLER_VIEW },
 
    [PIPE_FORMAT_R16G16_UNORM] = { NV50_SURFACE_FORMAT_R16G16_UNORM,
-    A_(C0, C1, C2, C3, UNORM, UNORM, UNORM, UNORM, 16_16, 0),
+    A_(C0, C1, ZERO, ONE_FLOAT, UNORM, UNORM, UNORM, UNORM, 16_16, 0),
     VERTEX_BUFFER | SAMPLER_VIEW | RENDER_TARGET },
 
    [PIPE_FORMAT_R16_UNORM] = { NV50_SURFACE_FORMAT_R16_UNORM,
@@ -457,4 +545,30 @@ const struct nv50_format nv50_format_table[PIPE_FORMAT_COUNT] =
    [PIPE_FORMAT_R8_USCALED] = { 0,
     A_(C0, ZERO, ZERO, ONE_FLOAT, USCALED, USCALED, USCALED, USCALED, 8, 0),
     VERTEX_BUFFER },
+
+   /* OTHER FORMATS */
+
+   [PIPE_FORMAT_R8G8_B8G8_UNORM] = { 0,
+    B_(C0, C1, C2, ONE_FLOAT, UNORM, UNORM, UNORM, UNORM, C1_C2_C1_C0, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_G8R8_G8B8_UNORM] = { 0,
+    B_(C0, C1, C2, ONE_FLOAT, UNORM, UNORM, UNORM, UNORM, C2_C1_C0_C1, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_R8SG8SB8UX8U_NORM] = { 0,
+    B_(C0, C1, C2, ONE_FLOAT, SNORM, SNORM, UNORM, UNORM, 8_8_8_8, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_R5SG5SB6U_NORM] = { 0,
+    B_(C0, C1, C2, ONE_FLOAT, SNORM, SNORM, UNORM, UNORM, 6_5_5, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_R1_UNORM] = { 0,
+    B_(C0, ZERO, ZERO, ONE_FLOAT, UNORM, UNORM, UNORM, UNORM, BITMAP_8X8, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_A8B8G8R8_UNORM] = { 0,
+    B_(C3, C2, C1, C0, UNORM, UNORM, UNORM, UNORM, 8_8_8_8, 0),
+    SAMPLER_VIEW },
 };
index 82f1b84652760bd0a36e789f474bcd3a0934e9d6..7900bf811dfe85d3259e8eb4acf7186aacee114f 100644 (file)
@@ -20,8 +20,6 @@
  * SOFTWARE.
  */
 
-/* #define NV50PC_DEBUG */
-
 #include "nv50_pc.h"
 #include "nv50_program.h"
 
@@ -180,6 +178,7 @@ nv50_op_can_write_flags(uint opcode)
    switch (opcode) { /* obvious ones like KIL, CALL, etc. not included */
    case NV_OP_PHI:
    case NV_OP_MOV:
+   case NV_OP_SELECT:
    case NV_OP_LINTERP:
    case NV_OP_PINTERP:
    case NV_OP_LDA:
@@ -367,7 +366,7 @@ nv_print_program(struct nv_pc *pc)
          nv_print_function(pc->root[i]);
 }
 
-#ifdef NV50PC_DEBUG
+#if NV50_DEBUG & NV50_DEBUG_PROG_CFLOW
 static void
 nv_do_print_cfgraph(struct nv_pc *pc, FILE *f, struct nv_basic_block *b)
 {
@@ -425,7 +424,7 @@ nv_print_cfgraph(struct nv_pc *pc, const char *filepath, int subr)
 
    fclose(f);
 }
-#endif
+#endif /* NV50_DEBUG_PROG_CFLOW */
 
 static INLINE void
 nvcg_show_bincode(struct nv_pc *pc)
@@ -446,7 +445,7 @@ nv50_emit_program(struct nv_pc *pc)
    uint32_t *code = pc->emit;
    int n;
 
-   NV50_DBGMSG("emitting program: size = %u\n", pc->bin_size);
+   NV50_DBGMSG(SHADER, "emitting program: size = %u\n", pc->bin_size);
 
    for (n = 0; n < pc->num_blocks; ++n) {
       struct nv_instruction *i;
@@ -472,7 +471,7 @@ nv50_emit_program(struct nv_pc *pc)
    pc->emit = code;
    code[pc->bin_size / 4 - 1] |= 1;
 
-#ifdef NV50PC_DEBUG
+#if NV50_DEBUG & NV50_DEBUG_SHADER
    nvcg_show_bincode(pc);
 #endif
 
@@ -500,7 +499,7 @@ nv50_generate_code(struct nv50_translation_info *ti)
    ret = nv50_tgsi_to_nc(pc, ti);
    if (ret)
       goto out;
-#ifdef NV50PC_DEBUG
+#if NV50_DEBUG & NV50_DEBUG_PROG_IR
    nv_print_program(pc);
 #endif
 
@@ -510,7 +509,7 @@ nv50_generate_code(struct nv50_translation_info *ti)
    ret = nv_pc_exec_pass0(pc);
    if (ret)
       goto out;
-#ifdef NV50PC_DEBUG
+#if NV50_DEBUG & NV50_DEBUG_PROG_IR
    nv_print_program(pc);
 #endif
 
@@ -518,7 +517,7 @@ nv50_generate_code(struct nv50_translation_info *ti)
    ret = nv_pc_exec_pass1(pc);
    if (ret)
       goto out;
-#ifdef NV50PC_DEBUG
+#if NV50_DEBUG & NV50_DEBUG_PROG_CFLOW
    nv_print_program(pc);
    nv_print_cfgraph(pc, "nv50_shader_cfgraph.dot", 0);
 #endif
@@ -552,7 +551,7 @@ nv50_generate_code(struct nv50_translation_info *ti)
 
    ti->p->uses_lmem = ti->store_to_memory;
 
-   NV50_DBGMSG("SHADER TRANSLATION - %s\n", ret ? "failure" : "success");
+   NV50_DBGMSG(SHADER, "SHADER TRANSLATION - %s\n", ret ? "failed" : "success");
 
 out:
    nv_pc_free_refs(pc);
@@ -624,6 +623,9 @@ nvbb_insert_tail(struct nv_basic_block *b, struct nv_instruction *i)
 
    i->bb = b;
    b->num_instructions++;
+
+   if (i->prev && i->prev->is_terminator)
+      nv_nvi_permute(i->prev, i);
 }
 
 void
@@ -669,7 +671,7 @@ nv_nvi_delete(struct nv_instruction *nvi)
 
    if (nvi == b->phi) {
       if (nvi->opcode != NV_OP_PHI)
-         NV50_DBGMSG("NOTE: b->phi points to non-PHI instruction\n");
+         NV50_DBGMSG(PROG_IR, "NOTE: b->phi points to non-PHI instruction\n");
 
       assert(!nvi->prev);
       if (!nvi->next || nvi->next->opcode != NV_OP_PHI)
index e6f3815bafea7a152d631c416473f88a3907f217..5bb0e1296bb2a0dfd409b0b5b3c2982f73491892 100644 (file)
 #ifndef __NV50_COMPILER_H__
 #define __NV50_COMPILER_H__
 
-#define NV50PC_DEBUG
-
-#ifdef NV50PC_DEBUG
-# define NV50_DBGMSG(args...) debug_printf(args)
-#else
-# define NV50_DBGMSG(args...)
-#endif
+#include "nv50_debug.h"
 
 #include "pipe/p_defines.h"
 #include "util/u_inlines.h"
@@ -228,6 +222,8 @@ struct nv_ref {
    ubyte flags; /* not used yet */
 };
 
+#define NV_REF_FLAG_REGALLOC_PRIV (1 << 0)
+
 struct nv_basic_block;
 
 struct nv_instruction {
@@ -263,6 +259,15 @@ struct nv_instruction {
    ubyte quadop;
 };
 
+static INLINE int
+nvi_vector_size(struct nv_instruction *nvi)
+{
+   int i;
+   assert(nvi);
+   for (i = 0; i < 4 && nvi->def[i]; ++i);
+   return i;
+}
+
 #define CFG_EDGE_FORWARD     0
 #define CFG_EDGE_BACK        1
 #define CFG_EDGE_LOOP_ENTER  2
index 281ccf7ac611585e76ce54f328e0aac56fb971ca..d72b23c137a74cd61b32ea0f5acd0266c89c07ee 100644 (file)
@@ -20,8 +20,6 @@
  * SOFTWARE.
  */
 
-/* #define NV50PC_DEBUG */
-
 #include "nv50_pc.h"
 
 #define DESCEND_ARBITRARY(j, f)                                 \
@@ -116,7 +114,7 @@ nvi_isnop(struct nv_instruction *nvi)
       return FALSE;
 
    if (nvi->src[0]->value->join->reg.id < 0) {
-      NV50_DBGMSG("nvi_isnop: orphaned value detected\n");
+      NV50_DBGMSG(PROG_IR, "nvi_isnop: orphaned value detected\n");
       return TRUE;
    }
 
@@ -201,7 +199,7 @@ nv_pc_pass_pre_emission(void *priv, struct nv_basic_block *b)
    }
 
    if (!b->entry) {
-      NV50_DBGMSG("block %p is now empty\n", b);
+      NV50_DBGMSG(PROG_IR, "block %p is now empty\n", b);
    } else
    if (!b->exit->is_long) {
       assert(n32);
@@ -240,7 +238,7 @@ nv_pc_exec_pass2(struct nv_pc *pc)
 {
    int i, ret;
 
-   NV50_DBGMSG("preparing %u blocks for emission\n", pc->num_blocks);
+   NV50_DBGMSG(PROG_IR, "preparing %u blocks for emission\n", pc->num_blocks);
 
    pc->num_blocks = 0; /* will reorder bb_list */
 
@@ -966,7 +964,8 @@ nv_pass_flatten(struct nv_pass *ctx, struct nv_basic_block *b)
 
    if (bb_is_if_else_endif(b)) {
 
-      NV50_DBGMSG("pass_flatten: IF/ELSE/ENDIF construct at BB:%i\n", b->id);
+      NV50_DBGMSG(PROG_IR,
+                  "pass_flatten: IF/ELSE/ENDIF construct at BB:%i\n", b->id);
 
       for (n0 = 0, nvi = b->out[0]->entry; nvi; nvi = nvi->next, ++n0)
          if (!nv50_nvi_can_predicate(nvi))
@@ -975,7 +974,7 @@ nv_pass_flatten(struct nv_pass *ctx, struct nv_basic_block *b)
          for (n1 = 0, nvi = b->out[1]->entry; nvi; nvi = nvi->next, ++n1)
             if (!nv50_nvi_can_predicate(nvi))
                break;
-#ifdef NV50PC_DEBUG
+#if NV50_DEBUG & NV50_DEBUG_PROG_IR
          if (nvi) {
             debug_printf("cannot predicate: "); nv_print_instruction(nvi);
          }
index 39ae36681c0baa653c11a0201e6f9000d21573fd..e79fd594cea7e956b6e537db8be769fea240a300 100644 (file)
  * SOFTWARE.
  */
 
-/* #define NV50PC_DEBUG */
-
-/* #define NV50_RA_DEBUG_LIVEI */
-/* #define NV50_RA_DEBUG_LIVE_SETS */
-/* #define NV50_RA_DEBUG_JOIN */
+#if NV50_DEBUG & NV50_DEBUG_PROG_RA
+# define NV50_RA_DEBUG_LIVEI
+# define NV50_RA_DEBUG_LIVE_SETS
+# define NV50_RA_DEBUG_JOIN
+#endif
 
 #include "nv50_context.h"
 #include "nv50_pc.h"
 #include "util/u_simple_list.h"
 
 #define NUM_REGISTER_FILES 4
+#define MAX_REGISTER_COUNT 256
 
 struct register_set {
    struct nv_pc *pc;
 
    uint32_t last[NUM_REGISTER_FILES];
-   uint32_t bits[NUM_REGISTER_FILES][8];
+   uint32_t bits[NUM_REGISTER_FILES][(MAX_REGISTER_COUNT + 31) / 32];
 };
 
+/* using OR because a set bit means occupied/unavailable, aliasing is allowed */
+static void
+intersect_register_sets(struct register_set *dst,
+                        struct register_set *src1, struct register_set *src2)
+{
+   int i, j;
+
+   for (i = 0; i < NUM_REGISTER_FILES; ++i) {
+      for (j = 0; j < (MAX_REGISTER_COUNT + 31) / 32; ++j)
+         dst->bits[i][j] = src1->bits[i][j] | src2->bits[i][j];
+   }
+}
+
+static void
+mask_register_set(struct register_set *set, uint32_t mask, uint32_t umask)
+{
+   int i, j;
+
+   for (i = 0; i < NUM_REGISTER_FILES; ++i) {
+      for (j = 0; j < (MAX_REGISTER_COUNT + 31) / 32; ++j)
+         set->bits[i][j] = (set->bits[i][j] | mask) & umask;
+   }
+}
+
 struct nv_pc_pass {
    struct nv_pc *pc;
 
@@ -61,11 +86,15 @@ ranges_coalesce(struct nv_range *range)
    }
 }
 
+/* @return: TRUE if @new_range can be freed (i.e. was not reused) */
 static boolean
 add_range_ex(struct nv_value *val, int bgn, int end, struct nv_range *new_range)
 {
    struct nv_range *range, **nextp = &val->livei;
 
+   if (bgn == end) /* [a, a) is invalid / empty */
+      return TRUE;
+
    for (range = val->livei; range; range = range->next) {
       if (end < range->bgn)
          break; /* insert before */
@@ -251,6 +280,8 @@ reg_occupy(struct register_set *set, struct nv_value *val)
    id <<= s;
    m = (1 << (1 << s)) - 1;
 
+   assert(s >= 0); /* XXX: remove me */
+
    set->bits[f][id / 32] |= m << (id % 32);
 
    if (set->pc->max_reg[f] < id)
@@ -286,15 +317,12 @@ join_allowed(struct nv_pc_pass *ctx, struct nv_value *a, struct nv_value *b)
    if (a->join->reg.id == b->join->reg.id)
       return TRUE;
 
-#if 1
    /* either a or b or both have been assigned */
 
    if (a->join->reg.id >= 0 && b->join->reg.id >= 0)
       return FALSE;
    else
    if (b->join->reg.id >= 0) {
-      if (a->join->reg.id >= 0)
-         return FALSE;
       val = a;
       a = b;
       b = val;
@@ -309,8 +337,6 @@ join_allowed(struct nv_pc_pass *ctx, struct nv_value *a, struct nv_value *b)
          return FALSE;
    }
    return TRUE;
-#endif
-   return FALSE;
 }
 
 static INLINE void
@@ -336,14 +362,14 @@ do_join_values(struct nv_pc_pass *ctx, struct nv_value *a, struct nv_value *b)
    assert(b->join == a->join);
 }
 
-static INLINE void
+static INLINE boolean
 try_join_values(struct nv_pc_pass *ctx, struct nv_value *a, struct nv_value *b)
 {
    if (!join_allowed(ctx, a, b)) {
 #ifdef NV50_RA_DEBUG_JOIN
       debug_printf("cannot join %i to %i: not allowed\n", b->n, a->n);
 #endif
-      return;
+      return FALSE;
    }
    if (livei_have_overlap(a->join, b->join)) {
 #ifdef NV50_RA_DEBUG_JOIN
@@ -351,10 +377,27 @@ try_join_values(struct nv_pc_pass *ctx, struct nv_value *a, struct nv_value *b)
       livei_print(a);
       livei_print(b);
 #endif
-      return;
+      return FALSE;
    }
 
    do_join_values(ctx, a, b);
+
+   return TRUE;
+}
+
+static void
+join_values_nofail(struct nv_pc_pass *ctx,
+                   struct nv_value *a, struct nv_value *b, boolean type_only)
+{
+   if (type_only) {
+      assert(join_allowed(ctx, a, b));
+      do_join_values(ctx, a, b);
+   } else {
+      boolean ok = try_join_values(ctx, a, b);
+      if (!ok) {
+         NOUVEAU_ERR("failed to coalesce values\n");
+      }
+   }
 }
 
 static INLINE boolean
@@ -369,20 +412,32 @@ need_new_else_block(struct nv_basic_block *b, struct nv_basic_block *p)
    return (b->num_in > 1) && (n == 2);
 }
 
+/* Look for the @phi's operand whose definition reaches @b. */
 static int
 phi_opnd_for_bb(struct nv_instruction *phi, struct nv_basic_block *b,
                 struct nv_basic_block *tb)
 {
+   struct nv_ref *srci, *srcj;
    int i, j;
 
-   for (j = -1, i = 0; i < 4 && phi->src[i]; ++i) {
-      if (!nvbb_reachable_by(b, phi->src[i]->value->insn->bb, tb))
+   for (j = -1, i = 0; i < 6 && phi->src[i]; ++i) {
+      srci = phi->src[i];
+      /* if already replaced, check with original source first */
+      if (srci->flags & NV_REF_FLAG_REGALLOC_PRIV)
+         srci = srci->value->insn->src[0];
+      if (!nvbb_reachable_by(b, srci->value->insn->bb, NULL))
          continue;
       /* NOTE: back-edges are ignored by the reachable-by check */
-      if (j < 0 || !nvbb_reachable_by(phi->src[j]->value->insn->bb,
-                                      phi->src[i]->value->insn->bb, tb))
+      if (j < 0 || !nvbb_reachable_by(srcj->value->insn->bb,
+                                      srci->value->insn->bb, NULL)) {
          j = i;
+         srcj = srci;
+      }
    }
+   if (j >= 0 && nvbb_reachable_by(b, phi->def[0]->insn->bb, NULL))
+      if (!nvbb_reachable_by(srcj->value->insn->bb,
+                             phi->def[0]->insn->bb, NULL))
+         j = -1;
    return j;
 }
 
@@ -429,16 +484,21 @@ pass_generate_phi_movs(struct nv_pc_pass *ctx, struct nv_basic_block *b)
       ctx->pc->current_block = pn;
 
       for (i = b->phi; i && i->opcode == NV_OP_PHI; i = i->next) {
-         if ((j = phi_opnd_for_bb(i, p, b)) < 0)
-            continue;
-         val = i->src[j]->value;
-
-         if (i->src[j]->flags) {
-            val = val->insn->src[0]->value;
-            while (j < 4 && i->src[j])
-               ++j;
-            assert(j < 4);
+         j = phi_opnd_for_bb(i, p, b);
+
+         if (j < 0) {
+            val = i->def[0];
+         } else {
+            val = i->src[j]->value;
+            if (i->src[j]->flags & NV_REF_FLAG_REGALLOC_PRIV) {
+               j = -1;
+               /* use original value, we already encountered & replaced it */
+               val = val->insn->src[0]->value;
+            }
          }
+         if (j < 0) /* need an additional source ? */
+            for (j = 0; j < 5 && i->src[j] && i->src[j]->value != val; ++j);
+         assert(j < 5);
 
          ni = new_instruction(ctx->pc, NV_OP_MOV);
 
@@ -452,11 +512,13 @@ pass_generate_phi_movs(struct nv_pc_pass *ctx, struct nv_basic_block *b)
 
          nv_reference(ctx->pc, &i->src[j], ni->def[0]);
 
-         i->src[j]->flags = 1;
+         i->src[j]->flags |= NV_REF_FLAG_REGALLOC_PRIV;
       }
 
       if (pn != p && pn->exit) {
-         ctx->pc->current_block = b->in[n ? 0 : 1];
+         assert(!b->in[!n]->exit || b->in[!n]->exit->is_terminator);
+         /* insert terminator (branch to ENDIF) in new else block */
+         ctx->pc->current_block = pn;
          ni = new_instruction(ctx->pc, NV_OP_BRA);
          ni->target = b;
          ni->is_terminator = 1;
@@ -470,45 +532,50 @@ pass_generate_phi_movs(struct nv_pc_pass *ctx, struct nv_basic_block *b)
    return 0;
 }
 
+#define JOIN_MASK_PHI    (1 << 0)
+#define JOIN_MASK_SELECT (1 << 1)
+#define JOIN_MASK_MOV    (1 << 2)
+#define JOIN_MASK_TEX    (1 << 3)
+
 static int
-pass_join_values(struct nv_pc_pass *ctx, int iter)
+pass_join_values(struct nv_pc_pass *ctx, unsigned mask)
 {
    int c, n;
 
    for (n = 0; n < ctx->num_insns; ++n) {
-      struct nv_instruction *i = ctx->insns[n];
+      struct nv_instruction *nvi, *i = ctx->insns[n];
 
       switch (i->opcode) {
       case NV_OP_PHI:
-         if (iter != 2)
+         if (!(mask & JOIN_MASK_PHI))
             break;
-         for (c = 0; c < 4 && i->src[c]; ++c)
-            try_join_values(ctx, i->def[0], i->src[c]->value);
+         for (c = 0; c < 5 && i->src[c]; ++c)
+            join_values_nofail(ctx, i->def[0], i->src[c]->value, FALSE);
          break;
       case NV_OP_MOV:
-         if ((iter == 2) && i->src[0]->value->insn &&
-             !nv_is_vector_op(i->src[0]->value->join->insn->opcode))
+         if (!(mask & JOIN_MASK_MOV))
+            break;
+         nvi = i->src[0]->value->join->insn;
+         if (nvi && !nv_is_vector_op(nvi->opcode))
             try_join_values(ctx, i->def[0], i->src[0]->value);
          break;
       case NV_OP_SELECT:
-         if (iter != 1)
+         if (!(mask & JOIN_MASK_SELECT))
             break;
-         for (c = 0; c < 4 && i->src[c]; ++c) {
-            assert(join_allowed(ctx, i->def[0], i->src[c]->value));
-            do_join_values(ctx, i->def[0], i->src[c]->value);
-         }
+         for (c = 0; c < 5 && i->src[c]; ++c)
+            join_values_nofail(ctx, i->def[0], i->src[c]->value, TRUE);
          break;
       case NV_OP_TEX:
       case NV_OP_TXB:
       case NV_OP_TXL:
       case NV_OP_TXQ:
-         if (iter)
+         if (!(mask & JOIN_MASK_TEX))
             break;
-         for (c = 0; c < 4; ++c) {
-            if (!i->src[c])
-               break;
-            do_join_values(ctx, i->def[c], i->src[c]->value);
-         }
+         /* This should work without conflicts because we always generate
+          * extra MOVs for the sources of a TEX.
+          */
+         for (c = 0; c < 4 && i->src[c]; ++c)
+            join_values_nofail(ctx, i->def[c], i->src[c]->value, TRUE);
          break;
       default:
          break;
@@ -643,15 +710,15 @@ static void collect_live_values(struct nv_basic_block *b, const int n)
 {
    int i;
 
-   if (b->out[0]) {
-      if (b->out[1]) { /* what to do about back-edges ? */
+   if (b->out[0] && b->out_kind[0] != CFG_EDGE_FAKE) {
+      if (b->out[1] && b->out_kind[1] != CFG_EDGE_FAKE) {
          for (i = 0; i < n; ++i)
             b->live_set[i] = b->out[0]->live_set[i] | b->out[1]->live_set[i];
       } else {
          memcpy(b->live_set, b->out[0]->live_set, n * sizeof(uint32_t));
       }
    } else
-   if (b->out[1]) {
+   if (b->out[1] && b->out_kind[1] != CFG_EDGE_FAKE) {
       memcpy(b->live_set, b->out[1]->live_set, n * sizeof(uint32_t));
    } else {
       memset(b->live_set, 0, n * sizeof(uint32_t));
@@ -770,8 +837,8 @@ insert_ordered_tail(struct nv_value *list, struct nv_value *nval)
    struct nv_value *elem;
 
    for (elem = list->prev;
-       elem != list && elem->livei->bgn > nval->livei->bgn;
-       elem = elem->prev);
+        elem != list && elem->livei->bgn > nval->livei->bgn;
+        elem = elem->prev);
    /* now elem begins before or at the same time as val */
 
    nval->prev = elem;
@@ -780,44 +847,49 @@ insert_ordered_tail(struct nv_value *list, struct nv_value *nval)
    elem->next = nval;
 }
 
-static int
-pass_linear_scan(struct nv_pc_pass *ctx, int iter)
+static void
+collect_register_values(struct nv_pc_pass *ctx, struct nv_value *head,
+                        boolean assigned_only)
 {
-   struct nv_instruction *i;
-   struct register_set f, free;
+   struct nv_value *val;
    int k, n;
-   struct nv_value *cur, *val, *tmp[2];
-   struct nv_value active, inactive, handled, unhandled;
 
-   make_empty_list(&active);
-   make_empty_list(&inactive);
-   make_empty_list(&handled);
-   make_empty_list(&unhandled);
+   make_empty_list(head);
 
-   nv50_ctor_register_set(ctx->pc, &free);
-
-   /* joined values should have range = NULL and thus not be added;
-    * also, fixed memory values won't be added because they're not
-    * def'd, just used
-    */
    for (n = 0; n < ctx->num_insns; ++n) {
-      i = ctx->insns[n];
+      struct nv_instruction *i = ctx->insns[n];
 
+      /* for joined values, only the representative will have livei != NULL */
       for (k = 0; k < 4; ++k) {
          if (i->def[k] && i->def[k]->livei)
-            insert_ordered_tail(&unhandled, i->def[k]);
-         else
-         if (0 && i->def[k])
-            debug_printf("skipping def'd value %i: no livei\n", i->def[k]->n);
+            if (!assigned_only || i->def[k]->reg.id >= 0)
+               insert_ordered_tail(head, i->def[k]);
       }
       if (i->flags_def && i->flags_def->livei)
-         insert_ordered_tail(&unhandled, i->flags_def);
+         if (!assigned_only || i->flags_def->reg.id >= 0)
+            insert_ordered_tail(head, i->flags_def);
    }
 
-   for (val = unhandled.next; val != unhandled.prev; val = val->next) {
+   for (val = head->next; val != head->prev; val = val->next) {
       assert(val->join == val);
       assert(val->livei->bgn <= val->next->livei->bgn);
    }
+}
+
+static int
+pass_linear_scan(struct nv_pc_pass *ctx, int iter)
+{
+   struct register_set f, free;
+   struct nv_value *cur, *val, *tmp[2];
+   struct nv_value active, inactive, handled, unhandled;
+
+   make_empty_list(&active);
+   make_empty_list(&inactive);
+   make_empty_list(&handled);
+
+   nv50_ctor_register_set(ctx->pc, &free);
+
+   collect_register_values(ctx, &unhandled, FALSE);
 
    foreach_s(cur, tmp[0], &unhandled) {
       remove_from_list(cur);
@@ -854,13 +926,7 @@ pass_linear_scan(struct nv_pc_pass *ctx, int iter)
             reg_occupy(&f, val);
 
       if (cur->reg.id < 0) {
-         boolean mem = FALSE;
-
-         if (nv_is_vector_op(cur->insn->opcode))
-            mem = !reg_assign(&f, &cur->insn->def[0], 4);
-         else
-         if (iter)
-            mem = !reg_assign(&f, &cur, 1);
+         boolean mem = !reg_assign(&f, &cur, 1);
 
          if (mem) {
             NOUVEAU_ERR("out of registers\n");
@@ -874,13 +940,80 @@ pass_linear_scan(struct nv_pc_pass *ctx, int iter)
    return 0;
 }
 
+/* Allocate values defined by instructions such as TEX, which have to be
+ * assigned to consecutive registers.
+ * Linear scan doesn't really work here since the values can have different
+ * live intervals.
+ */
+static int
+pass_allocate_constrained_values(struct nv_pc_pass *ctx)
+{
+   struct nv_value regvals, *val;
+   struct nv_instruction *i;
+   struct nv_value *defs[4];
+   struct register_set regs[4];
+   int n, vsize, c;
+   uint32_t mask;
+   boolean mem;
+
+   collect_register_values(ctx, &regvals, TRUE);
+
+   for (n = 0; n < ctx->num_insns; ++n) {
+      i = ctx->insns[n];
+      vsize = nvi_vector_size(i);
+      if (!(vsize > 1))
+         continue;
+      assert(vsize <= 4);
+      for (c = 0; c < vsize; ++c)
+         defs[c] = i->def[c]->join;
+
+      if (defs[0]->reg.id >= 0) {
+         for (c = 1; c < vsize; ++c)
+            assert(defs[c]->reg.id >= 0);
+         continue;
+      }
+
+      /* Compute registers available for this "vector" of consecutive registers.
+       * Each value (component) has its own independent live interval.
+       */
+      for (c = 0; c < vsize; ++c) {
+         nv50_ctor_register_set(ctx->pc, &regs[c]);
+
+         foreach(val, &regvals) {
+            if (val->reg.id >= 0 && livei_have_overlap(val, defs[c]))
+               reg_occupy(&regs[c], val);
+         }
+         /* Only 32 bit GPRs will be allocated here, but register set
+          * granularity for GPRs is 16 bit.
+          */
+         mask = 0x03030303;
+         if (vsize == 2) /* granularity is 2 and not 4 */
+            mask |= 0x03030303 << 4;
+         mask_register_set(&regs[c], 0, mask << (c * 2));
+
+         if (defs[c]->livei)
+            insert_ordered_tail(&regvals, defs[c]);
+      }
+      for (c = 1; c < vsize; ++c)
+         intersect_register_sets(&regs[0], &regs[0], &regs[c]);
+
+      mem = !reg_assign(&regs[0], &defs[0], vsize);
+
+      if (mem) {
+         NOUVEAU_ERR("out of registers\n");
+         abort();
+      }
+   }
+   return 0;
+}
+
 static int
 nv_pc_pass1(struct nv_pc *pc, struct nv_basic_block *root)
 {
    struct nv_pc_pass *ctx;
    int i, ret;
 
-   NV50_DBGMSG("REGISTER ALLOCATION - entering\n");
+   NV50_DBGMSG(PROG_RA, "REGISTER ALLOCATION - entering\n");
 
    ctx = CALLOC_STRUCT(nv_pc_pass);
    if (!ctx)
@@ -923,16 +1056,16 @@ nv_pc_pass1(struct nv_pc *pc, struct nv_basic_block *root)
       livei_print(&pc->values[i]);
 #endif
 
-   ret = pass_join_values(ctx, 0);
+   ret = pass_join_values(ctx, JOIN_MASK_PHI);
    if (ret)
       goto out;
-   ret = pass_linear_scan(ctx, 0);
+   ret = pass_join_values(ctx, JOIN_MASK_SELECT | JOIN_MASK_TEX);
    if (ret)
       goto out;
-   ret = pass_join_values(ctx, 1);
+   ret = pass_join_values(ctx, JOIN_MASK_MOV);
    if (ret)
       goto out;
-   ret = pass_join_values(ctx, 2);
+   ret = pass_allocate_constrained_values(ctx);
    if (ret)
       goto out;
    ret = pass_linear_scan(ctx, 1);
@@ -942,7 +1075,7 @@ nv_pc_pass1(struct nv_pc *pc, struct nv_basic_block *root)
    for (i = 0; i < pc->num_values; ++i)
       livei_release(&pc->values[i]);
 
-   NV50_DBGMSG("REGISTER ALLOCATION - leaving\n");
+   NV50_DBGMSG(PROG_RA, "REGISTER ALLOCATION - leaving\n");
 
 out:
    FREE(ctx->insns);
index a63f9d8a6d5c5acfdb9ea7bfa3884ff41ea6495e..41d3e14dc0f4134d142a5a0428e87bbeca5fa068 100644 (file)
@@ -20,8 +20,6 @@
  * SOFTWARE.
  */
 
-/* #define NV50_PROGRAM_DEBUG */
-
 #include "nv50_program.h"
 #include "nv50_pc.h"
 #include "nv50_context.h"
@@ -486,7 +484,7 @@ nv50_fragprog_prepare(struct nv50_translation_info *ti)
       ++nintp;
    }
 
-   p->fp.colors = (1 << 24) | 4; /* CLAMP, FFC0_ID = 4 */
+   p->fp.colors = 4 << NV50_3D_MAP_SEMANTIC_0_FFC0_ID__SHIFT; /* after HPOS */
 
    for (i = 0; i < p->in_nr; ++i) {
       int j = p->in[i].id;
@@ -564,7 +562,7 @@ nv50_prog_scan(struct nv50_translation_info *ti)
 
    tgsi_scan_shader(p->pipe.tokens, &ti->scan);
 
-#ifdef NV50_PROGRAM_DEBUG
+#if NV50_DEBUG & NV50_DEBUG_SHADER
    tgsi_dump(p->pipe.tokens, 0);
 #endif
 
index 7690c80eef0d62568e7d81bb30de470d538ecb5d..641ad7e2780e41d0476010a8aeee3df2a1bc6f3b 100644 (file)
@@ -20,6 +20,7 @@
  * SOFTWARE.
  */
 
+#include "util/u_format.h"
 #include "util/u_format_s3tc.h"
 #include "pipe/p_screen.h"
 
@@ -45,17 +46,8 @@ nv50_screen_is_format_supported(struct pipe_screen *pscreen,
    if (sample_count > 1)
       return FALSE;
 
-   if (!util_format_s3tc_enabled) {
-      switch (format) {
-      case PIPE_FORMAT_DXT1_RGB:
-      case PIPE_FORMAT_DXT1_RGBA:
-      case PIPE_FORMAT_DXT3_RGBA:
-      case PIPE_FORMAT_DXT5_RGBA:
-         return FALSE;
-      default:
-         break;
-      }
-   }
+   if (!util_format_is_supported(format, bindings))
+      return FALSE;
 
    switch (format) {
    case PIPE_FORMAT_Z16_UNORM:
@@ -108,6 +100,8 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
       return 1;
    case PIPE_CAP_MAX_RENDER_TARGETS:
       return 8;
+   case PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL:
+      return 1;
    case PIPE_CAP_TIMER_QUERY:
    case PIPE_CAP_OCCLUSION_QUERY:
       return 1;
@@ -129,6 +123,7 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
    case PIPE_CAP_PRIMITIVE_RESTART:
    case PIPE_CAP_TGSI_INSTANCEID:
    case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
+   case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
       return 1;
    default:
       NOUVEAU_ERR("unknown PIPE_CAP %d\n", param);
@@ -417,6 +412,10 @@ nv50_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
    OUT_RING  (chan, NV50_3D_MULTISAMPLE_MODE_MS1);
    BEGIN_RING(chan, RING_3D(MULTISAMPLE_CTRL), 1);
    OUT_RING  (chan, 0);
+   BEGIN_RING(chan, RING_3D(LINE_LAST_PIXEL), 1);
+   OUT_RING  (chan, 0);
+   BEGIN_RING(chan, RING_3D(BLEND_SEPARATE_ALPHA), 1);
+   OUT_RING  (chan, 1);
 
    BEGIN_RING(chan, RING_3D(SCREEN_Y_CONTROL), 1);
    OUT_RING  (chan, 0);
index bea9c095bb3bbb0b6ace6033f9d6f30c7758cf40..82c346cb5eab340e86ad9d3bc70354fd2e8e1086 100644 (file)
@@ -226,7 +226,7 @@ nv50_gmtyprog_validate(struct nv50_context *nv50)
    OUT_RING  (chan, gp->code_base);
 }
 
-void
+static void
 nv50_sprite_coords_validate(struct nv50_context *nv50)
 {
    struct nouveau_channel *chan = nv50->screen->base.channel;
@@ -282,6 +282,39 @@ nv50_sprite_coords_validate(struct nv50_context *nv50)
    OUT_RINGp (chan, pntc, 8);
 }
 
+/* Validate state derived from shaders and the rasterizer cso. */
+void
+nv50_validate_derived_rs(struct nv50_context *nv50)
+{
+   struct nouveau_channel *chan = nv50->screen->base.channel;
+   uint32_t color, psize;
+
+   nv50_sprite_coords_validate(nv50);
+
+   if (nv50->dirty & NV50_NEW_FRAGPROG)
+      return;
+   psize = nv50->state.semantic_psize & ~NV50_3D_MAP_SEMANTIC_3_PTSZ_EN__MASK;
+   color = nv50->state.semantic_color & ~NV50_3D_MAP_SEMANTIC_0_CLMP_EN;
+
+   if (nv50->rast->pipe.clamp_vertex_color)
+      color |= NV50_3D_MAP_SEMANTIC_0_CLMP_EN;
+
+   if (color != nv50->state.semantic_color) {
+      nv50->state.semantic_color = color;
+      BEGIN_RING(chan, RING_3D(MAP_SEMANTIC_0), 1);
+      OUT_RING  (chan, color);
+   }
+
+   if (nv50->rast->pipe.point_size_per_vertex)
+      psize |= NV50_3D_MAP_SEMANTIC_3_PTSZ_EN__MASK;
+
+   if (psize != nv50->state.semantic_psize) {
+      nv50->state.semantic_psize = psize;
+      BEGIN_RING(chan, RING_3D(MAP_SEMANTIC_3), 1);
+      OUT_RING  (chan, psize);
+   }
+}
+
 static int
 nv50_vec4_map(uint8_t *map, int mid, uint32_t lin[4],
               struct nv50_varying *in, struct nv50_varying *out)
@@ -372,6 +405,9 @@ nv50_fp_linkage_validate(struct nv50_context *nv50)
       map[m++] = vp->vp.psiz;
    }
 
+   if (nv50->rast->pipe.clamp_vertex_color)
+      colors |= NV50_3D_MAP_SEMANTIC_0_CLMP_EN;
+
    n = (m + 3) / 4;
    assert(m <= 64);
 
@@ -404,6 +440,9 @@ nv50_fp_linkage_validate(struct nv50_context *nv50)
 
    nv50->state.interpolant_ctrl = interp;
 
+   nv50->state.semantic_color = colors;
+   nv50->state.semantic_psize = psiz;
+
    BEGIN_RING(chan, RING_3D(NOPERSPECTIVE_BITMAP(0)), 4);
    OUT_RINGp (chan, lin, 4);
 
index db2571596989ebd44a3d5dc21797298dfc920281..799f49619d27b3f50bb338c89d4ee70594c80822 100644 (file)
@@ -97,8 +97,14 @@ nv50_blend_state_create(struct pipe_context *pipe,
 
    so->pipe = *cso;
 
-   SB_BEGIN_3D(so, BLEND_ENABLE(0), 8);
+   SB_BEGIN_3D(so, COLOR_MASK_COMMON, 1);
+   SB_DATA    (so, !cso->independent_blend_enable);
+
+   SB_BEGIN_3D(so, BLEND_ENABLE_COMMON, 1);
+   SB_DATA    (so, !cso->independent_blend_enable);
+
    if (cso->independent_blend_enable) {
+      SB_BEGIN_3D(so, BLEND_ENABLE(0), 8);
       for (i = 0; i < 8; ++i) {
          SB_DATA(so, cso->rt[i].blend_enable);
          if (cso->rt[i].blend_enable)
@@ -121,8 +127,8 @@ nv50_blend_state_create(struct pipe_context *pipe,
          }
       }
    } else {
-      for (i = 0; i < 8; ++i)
-         SB_DATA(so, cso->rt[0].blend_enable);
+      SB_BEGIN_3D(so, BLEND_ENABLE(0), 1);
+      SB_DATA    (so, cso->rt[0].blend_enable);
    }
 
    if (emit_common_func) {
@@ -145,17 +151,16 @@ nv50_blend_state_create(struct pipe_context *pipe,
       SB_DATA    (so, 0);
    }
 
-   SB_BEGIN_3D(so, COLOR_MASK(0), 8);
    if (cso->independent_blend_enable) {
+      SB_BEGIN_3D(so, COLOR_MASK(0), 8);
       for (i = 0; i < 8; ++i)
          SB_DATA(so, nv50_colormask(cso->rt[i].colormask));
    } else {
-      uint32_t cmask = nv50_colormask(cso->rt[0].colormask);
-      for (i = 0; i < 8; ++i)
-         SB_DATA(so, cmask);
+      SB_BEGIN_3D(so, COLOR_MASK(0), 1);
+      SB_DATA    (so, nv50_colormask(cso->rt[0].colormask));
    }
 
-   assert(so->size < (sizeof(so->state) / sizeof(so->state[0])));
+   assert(so->size <= (sizeof(so->state) / sizeof(so->state[0])));
    return so;
 }
 
@@ -174,6 +179,7 @@ nv50_blend_state_delete(struct pipe_context *pipe, void *hwcso)
    FREE(hwcso);
 }
 
+/* NOTE: ignoring line_last_pixel, using FALSE (set on screen init) */
 static void *
 nv50_rasterizer_state_create(struct pipe_context *pipe,
                              const struct pipe_rasterizer_state *cso)
@@ -198,6 +204,9 @@ nv50_rasterizer_state_create(struct pipe_context *pipe,
    SB_BEGIN_3D(so, VERTEX_TWO_SIDE_ENABLE, 1);
    SB_DATA    (so, cso->light_twoside);
 
+   SB_BEGIN_3D(so, FRAG_COLOR_CLAMP_EN, 1);
+   SB_DATA    (so, cso->clamp_fragment_color ? 0x11111111 : 0x00000000);
+
    SB_BEGIN_3D(so, LINE_WIDTH, 1);
    SB_DATA    (so, fui(cso->line_width));
    SB_BEGIN_3D(so, LINE_SMOOTH_ENABLE, 1);
@@ -258,7 +267,7 @@ nv50_rasterizer_state_create(struct pipe_context *pipe,
       SB_DATA    (so, fui(cso->offset_units * 2.0f));
    }
 
-   assert(so->size < (sizeof(so->state) / sizeof(so->state[0])));
+   assert(so->size <= (sizeof(so->state) / sizeof(so->state[0])));
    return (void *)so;
 }
 
@@ -337,7 +346,7 @@ nv50_zsa_state_create(struct pipe_context *pipe,
       SB_DATA    (so, 0);
    }
 
-   assert(so->size < (sizeof(so->state) / sizeof(so->state[0])));
+   assert(so->size <= (sizeof(so->state) / sizeof(so->state[0])));
    return (void *)so;
 }
 
index f3d45eb95e03ebd48260304b0f185785d240614f..cdf1a982fcc32df3a0079bd1c0c5b42eba2c9920 100644 (file)
@@ -309,7 +309,7 @@ static struct state_validate {
     { nv50_fp_linkage_validate,    NV50_NEW_FRAGPROG | NV50_NEW_VERTPROG |
                                    NV50_NEW_GMTYPROG },
     { nv50_gp_linkage_validate,    NV50_NEW_GMTYPROG | NV50_NEW_VERTPROG },
-    { nv50_sprite_coords_validate, NV50_NEW_FRAGPROG | NV50_NEW_RASTERIZER |
+    { nv50_validate_derived_rs,    NV50_NEW_FRAGPROG | NV50_NEW_RASTERIZER |
                                    NV50_NEW_VERTPROG | NV50_NEW_GMTYPROG },
     { nv50_constbufs_validate,     NV50_NEW_CONSTBUF },
     { nv50_validate_textures,      NV50_NEW_TEXTURES },
index 515e3e78d42c9ef0c55c04646abb7aea10bfea3f..4c98c7e46fc30375605d98880220ba8f580fa171 100644 (file)
 struct nv50_blend_stateobj {
    struct pipe_blend_state pipe;
    int size;
-   uint32_t state[78];
+   uint32_t state[82]; // TODO: allocate less if !independent_blend_enable
 };
 
 struct nv50_rasterizer_stateobj {
    struct pipe_rasterizer_state pipe;
    int size;
-   uint32_t state[40];
+   uint32_t state[42];
 };
 
 struct nv50_zsa_stateobj {
index dc9e2880f0fd80eaf92c672b50dc896c2c5f6408..3d7e880ccce2c00664f3d1b33be3eb7351981abe 100644 (file)
@@ -27,6 +27,7 @@
 #include "util/u_inlines.h"
 #include "util/u_pack_color.h"
 #include "util/u_format.h"
+#include "util/u_surface.h"
 
 #include "nv50_context.h"
 #include "nv50_resource.h"
@@ -198,6 +199,13 @@ nv50_resource_copy_region(struct pipe_context *pipe,
    int ret;
    unsigned dst_layer = dstz, src_layer = src_box->z;
 
+   /* Fallback for buffers. */
+   if (dst->target == PIPE_BUFFER && src->target == PIPE_BUFFER) {
+      util_resource_copy_region(pipe, dst, dst_level, dstx, dsty, dstz,
+                                src, src_level, src_box);
+      return;
+   }
+
    assert((src->format == dst->format) ||
           (nv50_2d_format_faithful(src->format) &&
            nv50_2d_format_faithful(dst->format)));
index 1449cb04c69cf62ecd6c1d77573aae053d145d9e..25dcaaea14f6e1362397aac15aedba17285b6dbe 100644 (file)
@@ -20,8 +20,6 @@
  * SOFTWARE.
  */
 
-/* #define NV50_TGSI2NC_DEBUG */
-
 #include <unistd.h>
 
 #include "nv50_context.h"
@@ -213,7 +211,7 @@ static INLINE void
 bld_warn_uninitialized(struct bld_context *bld, int kind,
                        struct bld_value_stack *stk, struct nv_basic_block *b)
 {
-#ifdef NV50_TGSI2NC_DEBUG
+#if NV50_DEBUG & NV50_DEBUG_PROG_IR
    long i = (stk - &bld->tvs[0][0]) / 4;
    long c = (stk - &bld->tvs[0][0]) & 3;
 
@@ -273,6 +271,12 @@ fetch_by_bb(struct bld_value_stack *stack,
          fetch_by_bb(stack, vals, n, b->in[i]);
 }
 
+static INLINE boolean
+nvbb_is_terminated(struct nv_basic_block *bb)
+{
+   return bb->exit && bb->exit->is_terminator;
+}
+
 static INLINE struct nv_value *
 bld_load_imm_u32(struct bld_context *bld, uint32_t u);
 
@@ -1556,7 +1560,7 @@ bld_instruction(struct bld_context *bld,
    int c;
    uint opcode = translate_opcode(insn->Instruction.Opcode);
 
-#ifdef NV50_TGSI2NC_DEBUG
+#if NV50_DEBUG & NV50_DEBUG_PROG_IR
    debug_printf("bld_instruction:"); tgsi_dump_instruction(insn, 1);
 #endif
        
@@ -1727,8 +1731,7 @@ bld_instruction(struct bld_context *bld,
    {
       struct nv_basic_block *b = new_basic_block(bld->pc);
 
-      if (bld->pc->current_block->exit &&
-          !bld->pc->current_block->exit->is_terminator)
+      if (!nvbb_is_terminated(bld->pc->current_block))
          bld_flow(bld, NV_OP_BRA, NV_CC_TR, NULL, b, FALSE);
 
       --bld->cond_lvl;
@@ -1800,7 +1803,8 @@ bld_instruction(struct bld_context *bld,
    {
       struct nv_basic_block *bb = bld->loop_bb[bld->loop_lvl - 1];
 
-      bld_flow(bld, NV_OP_BRA, NV_CC_TR, NULL, bb, FALSE);
+      if (!nvbb_is_terminated(bld->pc->current_block))
+         bld_flow(bld, NV_OP_BRA, NV_CC_TR, NULL, bb, FALSE);
 
       nvbb_attach_block(bld->pc->current_block, bb, CFG_EDGE_BACK);
 
index 94fa081ad7eb70533afebe2b79719d92c08573c0..2ca0bc23836d64a54a95f1eb05c2c04caea6f5e5 100644 (file)
@@ -82,6 +82,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #define NVC0_3D_SERIALIZE                                      0x00000110
 
+#define NVC0_3D_LINE_WIDTH_SEPARATE                            0x0000020c
+
 #define NVC0_3D_EARLY_FRAGMENT_TESTS                           0x00000210
 
 #define NVC0_3D_MEM_BARRIER                                    0x0000021c
@@ -342,10 +344,14 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #define NVC0_3D_VERTEX_RUNOUT_ADDRESS_LOW                      0x00000f88
 
+#define NVC0_3D_COLOR_MASK_COMMON                              0x00000f90
+
 #define NVC0_3D_DEPTH_BOUNDS(i0)                              (0x00000f9c + 0x4*(i0))
 #define NVC0_3D_DEPTH_BOUNDS__ESIZE                            0x00000004
 #define NVC0_3D_DEPTH_BOUNDS__LEN                              0x00000002
 
+#define NVC0_3D_RT_SEPARATE_FRAG_DATA                          0x00000fac
+
 #define NVC0_3D_MSAA_MASK(i0)                                 (0x00000fbc + 0x4*(i0))
 #define NVC0_3D_MSAA_MASK__ESIZE                               0x00000004
 #define NVC0_3D_MSAA_MASK__LEN                                 0x00000004
@@ -561,6 +567,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define NVC0_3D_TEX_CACHE_CTL_UNK1__MASK                       0x00000030
 #define NVC0_3D_TEX_CACHE_CTL_UNK1__SHIFT                      4
 
+#define NVC0_3D_BLEND_SEPARATE_ALPHA                           0x0000133c
+
 #define NVC0_3D_BLEND_EQUATION_RGB                             0x00001340
 #define NVC0_3D_BLEND_EQUATION_RGB_FUNC_ADD                    0x00008006
 #define NVC0_3D_BLEND_EQUATION_RGB_MIN                         0x00008007
@@ -583,6 +591,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #define NVC0_3D_BLEND_FUNC_DST_ALPHA                           0x00001358
 
+#define NVC0_3D_BLEND_ENABLE_COMMON                            0x0000135c
+
 #define NVC0_3D_BLEND_ENABLE(i0)                              (0x00001360 + 0x4*(i0))
 #define NVC0_3D_BLEND_ENABLE__ESIZE                            0x00000004
 #define NVC0_3D_BLEND_ENABLE__LEN                              0x00000008
@@ -651,7 +661,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define NVC0_3D_SCREEN_Y_CONTROL_Y_NEGATE                      0x00000001
 #define NVC0_3D_SCREEN_Y_CONTROL_TRIANGLE_RAST_FLIP            0x00000010
 
-#define NVC0_3D_LINE_WIDTH                                     0x000013b0
+#define NVC0_3D_LINE_WIDTH_SMOOTH                              0x000013b0
+
+#define NVC0_3D_LINE_WIDTH_ALIASED                             0x000013b4
 
 #define NVC0_3D_GP_VERTEX_OUTPUT_COUNT                         0x00001420
 #define NVC0_3D_GP_VERTEX_OUTPUT_COUNT__MIN                    0x00000001
@@ -977,6 +989,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define NVC0_3D_CULL_FACE_BACK                                 0x00000405
 #define NVC0_3D_CULL_FACE_FRONT_AND_BACK                       0x00000408
 
+#define NVC0_3D_LINE_LAST_PIXEL                                        0x00001924
+
 #define NVC0_3D_VIEWPORT_TRANSFORM_EN                          0x0000192c
 
 #define NVC0_3D_VIEW_VOLUME_CLIP_CTRL                          0x0000193c
@@ -1220,8 +1234,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define NVC0_3D_TFB_VARYING_LOCS__ESIZE                                0x00000004
 #define NVC0_3D_TFB_VARYING_LOCS__LEN                          0x00000020
 
-#define NVC0_3D_COLOR_MASK_BROADCAST                           0x00003808
-
 #define NVC0_3D_VERTEX_ARRAY_SELECT                            0x00003820
 
 #define NVC0_3D_BLEND_ENABLES                                  0x00003858
index 5d2168e600b4912b5f3ef67c65b58de3c68574dd..2f2a3da7c44f7f011238fe0b43364cdf86090569 100644 (file)
@@ -46,6 +46,15 @@ nvc0_flush(struct pipe_context *pipe,
    FIRE_RING(screen->channel);
 }
 
+static void
+nvc0_texture_barrier(struct pipe_context *pipe)
+{
+   struct nouveau_channel *chan = nvc0_context(pipe)->screen->base.channel;
+
+   IMMED_RING(chan, RING_3D(SERIALIZE), 0);
+   IMMED_RING(chan, RING_3D(TEX_CACHE_CTL), 0);
+}
+
 static void
 nvc0_context_unreference_resources(struct nvc0_context *nvc0)
 {
@@ -128,6 +137,7 @@ nvc0_create(struct pipe_screen *pscreen, void *priv)
    pipe->clear = nvc0_clear;
 
    pipe->flush = nvc0_flush;
+   pipe->texture_barrier = nvc0_texture_barrier;
 
    if (!screen->cur_ctx)
       screen->cur_ctx = nvc0;
index 102997e4fcbddf26bfe89d09b6463704b206ecd2..f97141dd46e0ad1c14cd52e86e4d5bcb3fae1a26 100644 (file)
@@ -1,7 +1,6 @@
 #ifndef __NVC0_CONTEXT_H__
 #define __NVC0_CONTEXT_H__
 
-#include <stdio.h>
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
 #include "pipe/p_state.h"
@@ -13,6 +12,7 @@
 
 #include "draw/draw_vertex.h"
 
+#include "nv50/nv50_debug.h"
 #include "nvc0_winsys.h"
 #include "nvc0_stateobj.h"
 #include "nvc0_screen.h"
 #include "nvc0_2d.xml.h"
 #include "nvc0_m2mf.xml.h"
 
-#define NOUVEAU_ERR(fmt, args...) \
-   fprintf(stderr, "%s:%d -  "fmt, __FUNCTION__, __LINE__, ##args);
-
-#ifdef NOUVEAU_DEBUG
-# define NOUVEAU_DBG(args...) printf(args);
-#else
-# define NOUVEAU_DBG(args...)
-#endif
-
 #define NVC0_NEW_BLEND        (1 << 0)
 #define NVC0_NEW_RASTERIZER   (1 << 1)
 #define NVC0_NEW_ZSA          (1 << 2)
index 454c744063121505b144d88f4ec1bd9541398229..678e9b563eed126de767ae22714c60bbbf3bde70 100644 (file)
@@ -145,24 +145,64 @@ const struct nvc0_format nvc0_format_table[PIPE_FORMAT_COUNT] =
 
    [PIPE_FORMAT_L8_SRGB] = { NV50_SURFACE_FORMAT_R8_UNORM,
     A_(C0, C0, C0, ONE_FLOAT, UNORM, UNORM, UNORM, UNORM, 8, 0),
-    SAMPLER_VIEW },
+    SAMPLER_VIEW | RENDER_TARGET },
 
-   [PIPE_FORMAT_I8_UNORM] = { NV50_SURFACE_FORMAT_R8_UNORM,
-    A_(C0, C0, C0, C0, UNORM, UNORM, UNORM, UNORM, 8, 0),
+   [PIPE_FORMAT_L16_SNORM] = { NV50_SURFACE_FORMAT_R16_SNORM,
+    B_(C0, C0, C0, ONE_FLOAT, SNORM, SNORM, SNORM, SNORM, 16, 0),
     SAMPLER_VIEW | RENDER_TARGET },
 
-   [PIPE_FORMAT_I16_UNORM] = { NV50_SURFACE_FORMAT_R16_UNORM,
-    A_(C0, C0, C0, C0, UNORM, UNORM, UNORM, UNORM, 16, 0),
+   [PIPE_FORMAT_L16_FLOAT] = { NV50_SURFACE_FORMAT_R16_FLOAT,
+    B_(C0, C0, C0, ONE_FLOAT, FLOAT, FLOAT, FLOAT, FLOAT, 16, 0),
     SAMPLER_VIEW | RENDER_TARGET },
 
+   [PIPE_FORMAT_L32_FLOAT] = { NV50_SURFACE_FORMAT_R32_FLOAT,
+    B_(C0, C0, C0, ONE_FLOAT, FLOAT, FLOAT, FLOAT, FLOAT, 32, 0),
+    SAMPLER_VIEW | RENDER_TARGET },
+
+   [PIPE_FORMAT_I8_UNORM] = { 0,
+    A_(C0, C0, C0, C0, UNORM, UNORM, UNORM, UNORM, 8, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_I16_UNORM] = { 0,
+    A_(C0, C0, C0, C0, UNORM, UNORM, UNORM, UNORM, 16, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_I16_SNORM] = { 0,
+    B_(C0, C0, C0, C0, SNORM, SNORM, SNORM, SNORM, 16, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_I16_FLOAT] = { 0,
+    B_(C0, C0, C0, C0, FLOAT, FLOAT, FLOAT, FLOAT, 16, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_I32_FLOAT] = { 0,
+    B_(C0, C0, C0, C0, FLOAT, FLOAT, FLOAT, FLOAT, 32, 0),
+    SAMPLER_VIEW },
+
    [PIPE_FORMAT_A8_UNORM] = { NV50_SURFACE_FORMAT_A8_UNORM,
     A_(ZERO, ZERO, ZERO, C0, UNORM, UNORM, UNORM, UNORM, 8, 0),
     SAMPLER_VIEW | RENDER_TARGET },
 
+   [PIPE_FORMAT_A8_SNORM] = { 0,
+    A_(ZERO, ZERO, ZERO, C0, SNORM, SNORM, SNORM, SNORM, 8, 0),
+    SAMPLER_VIEW },
+
    [PIPE_FORMAT_A16_UNORM] = { 0,
     A_(ZERO, ZERO, ZERO, C0, UNORM, UNORM, UNORM, UNORM, 16, 0),
     SAMPLER_VIEW },
 
+   [PIPE_FORMAT_A16_SNORM] = { 0,
+    A_(ZERO, ZERO, ZERO, C0, SNORM, SNORM, SNORM, SNORM, 16, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_A16_FLOAT] = { 0,
+    B_(ZERO, ZERO, ZERO, C0, FLOAT, FLOAT, FLOAT, FLOAT, 16, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_A32_FLOAT] = { 0,
+    B_(ZERO, ZERO, ZERO, C0, FLOAT, FLOAT, FLOAT, FLOAT, 32, 0),
+    SAMPLER_VIEW },
+
    [PIPE_FORMAT_L8A8_UNORM] = { 0,
     A_(C0, C0, C0, C1, UNORM, UNORM, UNORM, UNORM, 8_8, 0),
     SAMPLER_VIEW },
@@ -175,6 +215,18 @@ const struct nvc0_format nvc0_format_table[PIPE_FORMAT_COUNT] =
     A_(C0, C0, C0, C1, UNORM, UNORM, UNORM, UNORM, 16_16, 0),
     SAMPLER_VIEW },
 
+   [PIPE_FORMAT_L16A16_SNORM] = { 0,
+    A_(C0, C0, C0, C1, SNORM, SNORM, SNORM, SNORM, 16_16, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_L16A16_FLOAT] = { 0,
+    B_(C0, C0, C0, C1, FLOAT, FLOAT, FLOAT, FLOAT, 16_16, 0),
+    SAMPLER_VIEW },
+
+   [PIPE_FORMAT_L32A32_FLOAT] = { 0,
+    B_(C0, C0, C0, C1, FLOAT, FLOAT, FLOAT, FLOAT, 32_32, 0),
+    SAMPLER_VIEW },
+
    [PIPE_FORMAT_L4A4_UNORM] = { 0,
     B_(C0, C0, C0, C1, UNORM, UNORM, UNORM, UNORM, 4_4, 0),
     SAMPLER_VIEW },
@@ -322,7 +374,7 @@ const struct nvc0_format nvc0_format_table[PIPE_FORMAT_COUNT] =
     VERTEX_BUFFER | SAMPLER_VIEW },
 
    [PIPE_FORMAT_R16G16_SNORM] = { NV50_SURFACE_FORMAT_R16G16_SNORM,
-    A_(C0, C1, C2, C3, SNORM, SNORM, SNORM, SNORM, 16_16, 0),
+    A_(C0, C1, ZERO, ONE_FLOAT, SNORM, SNORM, SNORM, SNORM, 16_16, 0),
     VERTEX_BUFFER | SAMPLER_VIEW | RENDER_TARGET },
 
    [PIPE_FORMAT_R16_SNORM] = { NV50_SURFACE_FORMAT_R16_SNORM,
@@ -340,7 +392,7 @@ const struct nvc0_format nvc0_format_table[PIPE_FORMAT_COUNT] =
     VERTEX_BUFFER | SAMPLER_VIEW },
 
    [PIPE_FORMAT_R16G16_UNORM] = { NV50_SURFACE_FORMAT_R16G16_UNORM,
-    A_(C0, C1, C2, C3, UNORM, UNORM, UNORM, UNORM, 16_16, 0),
+    A_(C0, C1, ZERO, ONE_FLOAT, UNORM, UNORM, UNORM, UNORM, 16_16, 0),
     VERTEX_BUFFER | SAMPLER_VIEW | RENDER_TARGET },
 
    [PIPE_FORMAT_R16_UNORM] = { NV50_SURFACE_FORMAT_R16_UNORM,
@@ -520,4 +572,8 @@ const struct nvc0_format nvc0_format_table[PIPE_FORMAT_COUNT] =
    [PIPE_FORMAT_R1_UNORM] = { 0,
     B_(C0, ZERO, ZERO, ONE_FLOAT, UNORM, UNORM, UNORM, UNORM, BITMAP_8X8, 0),
     SAMPLER_VIEW },
+
+   [PIPE_FORMAT_A8B8G8R8_UNORM] = { 0,
+    B_(C3, C2, C1, C0, UNORM, UNORM, UNORM, UNORM, 8_8_8_8, 0),
+    SAMPLER_VIEW },
 };
index b7d0d3eafa4954dc6018c33b1f0dae3d380a1199..a0a875fe6274d5610677a51df0431bfd8b2f52e2 100644 (file)
@@ -68,19 +68,6 @@ static const uint32_t nvc0_9097_vertex_array_select[] =
    0x00001841, /* 0x0b: send $r3 */
 };
 
-static const uint32_t nvc0_9097_color_mask_brdc[] =
-{
-   0x05a00021, /* maddr [NVC0_3D_COLOR_MASK(0), increment = 4] */
-   0x00000841, /* send $r1 */
-   0x00000841, /* send $r1 */
-   0x00000841, /* send $r1 */
-   0x00000841, /* send $r1 */
-   0x00000841, /* send $r1 */
-   0x00000841, /* send $r1 */
-   0x000008c1, /* exit send $r1 */
-   0x00000841, /* send $r1 */
-};
-
 /*
  * [GL_POLYGON_MODE_FRONT] = arg;
  *
index bd85a7f1ffda9a1949578ff6ec1572547f9f41d6..2c3b8555f32345f85a1ff0df45dd6f1be13c181e 100644 (file)
@@ -20,8 +20,6 @@
  * SOFTWARE.
  */
 
-#define NOUVEAU_DEBUG 1
-
 #include "nvc0_pc.h"
 #include "nvc0_program.h"
 
@@ -262,7 +260,7 @@ nvc0_print_program(struct nv_pc *pc)
          nvc0_print_function(pc->root[i]);
 }
 
-#if NOUVEAU_DEBUG > 1
+#if NV50_DEBUG & NV50_DEBUG_PROG_CFLOW
 static void
 nv_do_print_cfgraph(struct nv_pc *pc, FILE *f, struct nv_basic_block *b)
 {
@@ -327,7 +325,7 @@ nvc0_pc_print_binary(struct nv_pc *pc)
 {
    unsigned i;
 
-   NOUVEAU_DBG("nvc0_pc_print_binary(%u ops)\n", pc->emit_size / 8);
+   NV50_DBGMSG(SHADER, "nvc0_pc_print_binary(%u ops)\n", pc->emit_size / 8);
 
    for (i = 0; i < pc->emit_size / 4; i += 2) {
       debug_printf("0x%08x ", pc->emit[i + 0]);
@@ -344,7 +342,7 @@ nvc0_emit_program(struct nv_pc *pc)
    uint32_t *code = pc->emit;
    int n;
 
-   NOUVEAU_DBG("emitting program: size = %u\n", pc->emit_size);
+   NV50_DBGMSG(SHADER, "emitting program: size = %u\n", pc->emit_size);
 
    pc->emit_pos = 0;
    for (n = 0; n < pc->num_blocks; ++n) {
@@ -365,11 +363,10 @@ nvc0_emit_program(struct nv_pc *pc)
 
    pc->emit = code;
 
-#ifdef NOUVEAU_DEBUG
+#if NV50_DEBUG & NV50_DEBUG_SHADER
    nvc0_pc_print_binary(pc);
-#else
-   debug_printf("not printing binary\n");
 #endif
+
    return 0;
 }
 
@@ -396,7 +393,7 @@ nvc0_generate_code(struct nvc0_translation_info *ti)
    ret = nvc0_tgsi_to_nc(pc, ti);
    if (ret)
       goto out;
-#if NOUVEAU_DEBUG > 1
+#if NV50_DEBUG & NV50_DEBUG_PROG_IR
    nvc0_print_program(pc);
 #endif
 
@@ -406,7 +403,7 @@ nvc0_generate_code(struct nvc0_translation_info *ti)
    ret = nvc0_pc_exec_pass0(pc);
    if (ret)
       goto out;
-#ifdef NOUVEAU_DEBUG
+#if NV50_DEBUG & NV50_DEBUG_PROG_IR
    nvc0_print_program(pc);
 #endif
 
@@ -414,7 +411,7 @@ nvc0_generate_code(struct nvc0_translation_info *ti)
    ret = nvc0_pc_exec_pass1(pc);
    if (ret)
       goto out;
-#if NOUVEAU_DEBUG > 1
+#if NV50_DEBUG & NV50_DEBUG_PROG_CFLOW
    nvc0_print_program(pc);
    nv_print_cfgraph(pc, "nvc0_shader_cfgraph.dot", 0);
 #endif
@@ -444,7 +441,7 @@ nvc0_generate_code(struct nvc0_translation_info *ti)
    ti->prog->relocs = pc->reloc_entries;
    ti->prog->num_relocs = pc->num_relocs;
 
-   NOUVEAU_DBG("SHADER TRANSLATION - %s\n", ret ? "failure" : "success");
+   NV50_DBGMSG(SHADER, "SHADER TRANSLATION - %s\n", ret ? "failed" : "success");
 
 out:
    nv_pc_free_refs(pc);
@@ -573,7 +570,7 @@ nvc0_insn_delete(struct nv_instruction *nvi)
 
    if (nvi == b->phi) {
       if (nvi->opcode != NV_OP_PHI)
-         NOUVEAU_DBG("NOTE: b->phi points to non-PHI instruction\n");
+         NV50_DBGMSG(PROG_IR, "NOTE: b->phi points to non-PHI instruction\n");
 
       assert(!nvi->prev);
       if (!nvi->next || nvi->next->opcode != NV_OP_PHI)
index 3a5612a5fac383aeefe0f2ac447e3f52e46a24e7..441692d766c9932df9ec5a59c474bde6c0099e6f 100644 (file)
 #ifndef __NVC0_COMPILER_H__
 #define __NVC0_COMPILER_H__
 
-#include <stdio.h>
-
-#ifndef NOUVEAU_DBG
-#ifdef NOUVEAU_DEBUG
-# define NOUVEAU_DBG(args...) debug_printf(args);
-#else
-# define NOUVEAU_DBG(args...)
-#endif
-#endif
-
-#ifndef NOUVEAU_ERR
-#define NOUVEAU_ERR(fmt, args...) \
-   fprintf(stderr, "%s:%d -  "fmt, __FUNCTION__, __LINE__, ##args);
-#endif
+#include "nv50/nv50_debug.h"
 
 #include "pipe/p_defines.h"
 #include "util/u_inlines.h"
index 76ad40dbcf8d018dcd4c914f14af27a0833b2623..e35653280a1832ba6a3a1f71e3bdc8dd48920f9e 100644 (file)
@@ -715,6 +715,10 @@ emit_interp(struct nv_pc *pc, struct nv_instruction *i)
    if (i->opcode == NV_OP_PINTERP) {
       pc->emit[0] |= 0x040;
       SID(pc, i->src[1], 26);
+
+      if (i->src[0]->value->reg.address >= 0x280 &&
+          i->src[0]->value->reg.address <= 0x29c)
+         pc->emit[0] |= 0x080; /* XXX: ? */
    } else {
       SID(pc, NULL, 26);
    }
@@ -875,7 +879,9 @@ emit_st(struct nv_pc *pc, struct nv_instruction *i)
 void
 nvc0_emit_instruction(struct nv_pc *pc, struct nv_instruction *i)
 {
+#if NV50_DEBUG & NV50_DEBUG_SHADER
    debug_printf("EMIT: "); nvc0_print_instruction(i);
+#endif
 
    switch (i->opcode) {
    case NV_OP_VFETCH:
index f7bf1680d09c9641c980f541b27b9a13e2314682..7f5fbaff690458bde338f9baf690f8ff8f55ca07 100644 (file)
@@ -115,7 +115,7 @@ inst_is_noop(struct nv_instruction *nvi)
       return FALSE;
 
    if (nvi->src[0]->value->join->reg.id < 0) {
-      NOUVEAU_DBG("inst_is_noop: orphaned value detected\n");
+      NV50_DBGMSG(PROG_IR, "inst_is_noop: orphaned value detected\n");
       return TRUE;
    }
 
@@ -178,7 +178,7 @@ nv_pc_pass_pre_emission(void *priv, struct nv_basic_block *b)
    }
    pc->emit_size += b->emit_size;
 
-#ifdef NOUVEAU_DEBUG
+#if NV50_DEBUG & NV50_DEBUG_PROG_IR
    if (!b->entry)
       debug_printf("BB:%i is now empty\n", b->id);
    else
@@ -206,7 +206,7 @@ nvc0_pc_exec_pass2(struct nv_pc *pc)
 {
    int i, ret;
 
-   NOUVEAU_DBG("preparing %u blocks for emission\n", pc->num_blocks);
+   NV50_DBGMSG(PROG_IR, "preparing %u blocks for emission\n", pc->num_blocks);
 
    pc->num_blocks = 0; /* will reorder bb_list */
 
index f4afe083e2dde92a32e1a79a21d9837c9b81c9fe..15bebb2134abf9c3b49f5c0c71394652204771d3 100644 (file)
  * SOFTWARE.
  */
 
-#define NOUVEAU_DEBUG 1
-
-/* #define NVC0_RA_DEBUG_LIVEI */
-/* #define NVC0_RA_DEBUG_LIVE_SETS */
-/* #define NVC0_RA_DEBUG_JOIN */
+#if NV50_DEBUG & NV50_DEBUG_PROG_RA
+# define NVC0_RA_DEBUG_LIVEI
+# define NVC0_RA_DEBUG_LIVE_SETS
+# define NVC0_RA_DEBUG_JOIN
+#endif
 
 #include "nvc0_pc.h"
 #include "util/u_simple_list.h"
@@ -504,7 +504,9 @@ pass_generate_phi_movs(struct nv_pc_pass *ctx, struct nv_basic_block *b)
       }
 
       if (pn != p && pn->exit) {
-         ctx->pc->current_block = b->in[n ? 0 : 1];
+         assert(!b->in[!n]->exit || b->in[!n]->exit->terminator);
+         /* insert terminator (branch to ENDIF) in new else block */
+         ctx->pc->current_block = pn;
          ni = new_instruction(ctx->pc, NV_OP_BRA);
          ni->target = b;
          ni->terminator = 1;
@@ -965,7 +967,7 @@ nv_pc_pass1(struct nv_pc *pc, struct nv_basic_block *root)
    struct nv_pc_pass *ctx;
    int i, ret;
 
-   NOUVEAU_DBG("REGISTER ALLOCATION - entering\n");
+   NV50_DBGMSG(PROG_RA, "REGISTER ALLOCATION - entering\n");
 
    ctx = CALLOC_STRUCT(nv_pc_pass);
    if (!ctx)
@@ -1031,7 +1033,7 @@ nv_pc_pass1(struct nv_pc *pc, struct nv_basic_block *root)
    for (i = 0; i < pc->num_values; ++i)
       livei_release(&pc->values[i]);
 
-   NOUVEAU_DBG("REGISTER ALLOCATION - leaving\n");
+   NV50_DBGMSG(PROG_RA, "REGISTER ALLOCATION - leaving\n");
 
 out:
    FREE(ctx->insns);
index 3c59213176ef7ae8005d345a2ef4bd594d7bb60c..bcee027917ed7ce26ad76d759ca07dd202e04c29 100644 (file)
@@ -23,8 +23,6 @@
 #include "pipe/p_shader_tokens.h"
 #include "pipe/p_defines.h"
 
-#define NOUVEAU_DEBUG
-
 #include "tgsi/tgsi_parse.h"
 #include "tgsi/tgsi_util.h"
 #include "tgsi/tgsi_dump.h"
@@ -224,6 +222,9 @@ nvc0_interp_mode(const struct tgsi_full_declaration *decl)
    else
    if (decl->Declaration.Interpolate == TGSI_INTERPOLATE_PERSPECTIVE)
       mode = NVC0_INTERP_PERSPECTIVE;
+   else
+   if (decl->Declaration.Semantic && decl->Semantic.Name == TGSI_SEMANTIC_COLOR)
+      mode = NVC0_INTERP_PERSPECTIVE;
    else
       mode = NVC0_INTERP_LINEAR;
 
@@ -574,7 +575,7 @@ nvc0_prog_scan(struct nvc0_translation_info *ti)
    int ret;
    unsigned i;
 
-#ifdef NOUVEAU_DEBUG
+#if NV50_DEBUG & NV50_DEBUG_SHADER
    tgsi_dump(prog->pipe.tokens, 0);
 #endif
 
@@ -691,12 +692,12 @@ nvc0_program_translate(struct nvc0_program *prog)
    if (ret)
       NOUVEAU_ERR("shader translation failed\n");
 
-   {
-      unsigned i;
-      for (i = 0; i < sizeof(prog->hdr) / sizeof(prog->hdr[0]); ++i)
-         debug_printf("HDR[%02lx] = 0x%08x\n",
-                      i * sizeof(prog->hdr[0]), prog->hdr[i]);
-   }
+#if NV50_DEBUG & NV50_DEBUG_SHADER
+   unsigned i;
+   for (i = 0; i < sizeof(prog->hdr) / sizeof(prog->hdr[0]); ++i)
+      debug_printf("HDR[%02lx] = 0x%08x\n",
+                   i * sizeof(prog->hdr[0]), prog->hdr[i]);
+#endif
 
 out:
    if (ti->immd32)
index 1047ba3c3377822dbdc9bd26c9478089d8b096f1..ca0691d2aee3833af39b504def8f3cd1da0745e5 100644 (file)
@@ -20,6 +20,7 @@
  * SOFTWARE.
  */
 
+#include "util/u_format.h"
 #include "util/u_format_s3tc.h"
 #include "pipe/p_screen.h"
 
@@ -39,17 +40,8 @@ nvc0_screen_is_format_supported(struct pipe_screen *pscreen,
    if (sample_count > 1)
       return FALSE;
 
-   if (!util_format_s3tc_enabled) {
-      switch (format) {
-      case PIPE_FORMAT_DXT1_RGB:
-      case PIPE_FORMAT_DXT1_RGBA:
-      case PIPE_FORMAT_DXT3_RGBA:
-      case PIPE_FORMAT_DXT5_RGBA:
-         return FALSE;
-      default:
-         break;
-      }
-   }
+   if (!util_format_is_supported(format, bindings))
+      return FALSE;
 
    /* transfers & shared are always supported */
    bindings &= ~(PIPE_BIND_TRANSFER_READ |
@@ -93,6 +85,8 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
       return 1;
    case PIPE_CAP_MAX_RENDER_TARGETS:
       return 8;
+   case PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL:
+      return 1;
    case PIPE_CAP_TIMER_QUERY:
    case PIPE_CAP_OCCLUSION_QUERY:
       return 1;
@@ -113,6 +107,7 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
    case PIPE_CAP_PRIMITIVE_RESTART:
    case PIPE_CAP_TGSI_INSTANCEID:
    case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
+   case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
       return 1;
    default:
       NOUVEAU_ERR("unknown PIPE_CAP %d\n", param);
@@ -291,8 +286,6 @@ nvc0_magic_3d_init(struct nouveau_channel *chan)
    OUT_RING  (chan, 1 << 12);
    BEGIN_RING(chan, RING_3D_(0x151c), 1);
    OUT_RING  (chan, 1);
-   BEGIN_RING(chan, RING_3D_(0x020c), 1);
-   OUT_RING  (chan, 1);
    BEGIN_RING(chan, RING_3D_(0x030c), 1);
    OUT_RING  (chan, 0);
    BEGIN_RING(chan, RING_3D_(0x0300), 1);
@@ -309,11 +302,6 @@ nvc0_magic_3d_init(struct nouveau_channel *chan)
    OUT_RING  (chan, 1);
    BEGIN_RING(chan, RING_3D_(0x075c), 1);
    OUT_RING  (chan, 3);
-
-   BEGIN_RING(chan, RING_3D_(0x0fac), 1);
-   OUT_RING  (chan, 0);
-   BEGIN_RING(chan, RING_3D_(0x0f90), 1);
-   OUT_RING  (chan, 0);
 }
 
 static void
@@ -445,6 +433,14 @@ nvc0_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
    OUT_RING  (chan, NVC0_3D_MULTISAMPLE_MODE_1X);
    BEGIN_RING(chan, RING_3D(MULTISAMPLE_CTRL), 1);
    OUT_RING  (chan, 0);
+   BEGIN_RING(chan, RING_3D(LINE_WIDTH_SEPARATE), 1);
+   OUT_RING  (chan, 1);
+   BEGIN_RING(chan, RING_3D(LINE_LAST_PIXEL), 1);
+   OUT_RING  (chan, 0);
+   BEGIN_RING(chan, RING_3D(BLEND_SEPARATE_ALPHA), 1);
+   OUT_RING  (chan, 1);
+   BEGIN_RING(chan, RING_3D(BLEND_ENABLE_COMMON), 1);
+   OUT_RING  (chan, 0);
 
    nvc0_magic_3d_init(chan);
 
@@ -452,7 +448,10 @@ nvc0_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
    if (ret)
       goto fail;
 
-   nouveau_resource_init(&screen->text_heap, 0, 1 << 20);
+   /* XXX: getting a page fault at the end of the code buffer every few
+    *  launches, don't use the last 256 bytes to work around them - prefetch ?
+    */
+   nouveau_resource_init(&screen->text_heap, 0, (1 << 20) - 0x100);
 
    ret = nouveau_bo_new(dev, NOUVEAU_BO_VRAM, 1 << 12, 6 << 16,
                         &screen->uniforms);
@@ -557,17 +556,6 @@ nvc0_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
    OUT_RING  (chan, 8192 << 16);
    OUT_RING  (chan, 8192 << 16);
 
-   BEGIN_RING(chan, RING_3D_(0x0fac), 1);
-   OUT_RING  (chan, 0);
-   BEGIN_RING(chan, RING_3D_(0x3484), 1);
-   OUT_RING  (chan, 0);
-   BEGIN_RING(chan, RING_3D_(0x0dbc), 1);
-   OUT_RING  (chan, 0x00010000);
-   BEGIN_RING(chan, RING_3D_(0x0dd8), 1);
-   OUT_RING  (chan, 0xff800006);
-   BEGIN_RING(chan, RING_3D_(0x3488), 1);
-   OUT_RING  (chan, 0);
-
 #define MK_MACRO(m, n) i = nvc0_graph_set_macro(screen, m, i, sizeof(n), n);
 
    i = 0;
@@ -577,10 +565,11 @@ nvc0_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
    MK_MACRO(NVC0_3D_GP_SELECT, nvc0_9097_gp_select);
    MK_MACRO(NVC0_3D_POLYGON_MODE_FRONT, nvc0_9097_poly_mode_front);
    MK_MACRO(NVC0_3D_POLYGON_MODE_BACK, nvc0_9097_poly_mode_back);
-   MK_MACRO(NVC0_3D_COLOR_MASK_BROADCAST, nvc0_9097_color_mask_brdc);
 
    BEGIN_RING(chan, RING_3D(RASTERIZE_ENABLE), 1);
    OUT_RING  (chan, 1);
+   BEGIN_RING(chan, RING_3D(RT_SEPARATE_FRAG_DATA), 1);
+   OUT_RING  (chan, 1);
    BEGIN_RING(chan, RING_3D(GP_SELECT), 1);
    OUT_RING  (chan, 0x40);
    BEGIN_RING(chan, RING_3D(LAYER), 1);
@@ -599,8 +588,6 @@ nvc0_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
    BEGIN_RING(chan, RING_3D(POINT_RASTER_RULES), 1);
    OUT_RING  (chan, NVC0_3D_POINT_RASTER_RULES_OGL);
 
-   BEGIN_RING(chan, RING_3D(FRAG_COLOR_CLAMP_EN), 1);
-   OUT_RING  (chan, 0x11111111);
    BEGIN_RING(chan, RING_3D(EDGEFLAG_ENABLE), 1);
    OUT_RING  (chan, 1);
 
index 7294eaa222e1b074cd859d358e612c959c966207..287160e0b2a22ead185b4d9a0b4e7c10266e74a0 100644 (file)
@@ -97,8 +97,6 @@ nvc0_vertprog_validate(struct nvc0_context *nvc0)
 
    // BEGIN_RING(chan, RING_3D_(0x163c), 1);
    // OUT_RING  (chan, 0);
-   BEGIN_RING(chan, RING_3D(VERT_COLOR_CLAMP_EN), 1);
-   OUT_RING  (chan, 1);
 }
 
 void
index ab68abcfb5a6497bcc4544be6aeb94acd3c3d56e..b0b2065167e728f42bcdeffe4d2139779c9d9873 100644 (file)
@@ -93,9 +93,18 @@ nvc0_blend_state_create(struct pipe_context *pipe,
 
     SB_IMMED_3D(so, BLEND_INDEPENDENT, cso->independent_blend_enable);
 
+    if (!cso->logicop_enable)
+       SB_IMMED_3D(so, LOGIC_OP_ENABLE, 0);
+
+    if (cso->logicop_enable) {
+       SB_BEGIN_3D(so, LOGIC_OP_ENABLE, 2);
+       SB_DATA    (so, 1);
+       SB_DATA    (so, nvgl_logicop_func(cso->logicop_func));
+
+       SB_IMMED_3D(so, BLEND_ENABLES, 0);
+    } else
     if (!cso->independent_blend_enable) {
-        SB_BEGIN_3D(so, BLEND_ENABLES, 1);
-        SB_DATA    (so, cso->rt[0].blend_enable ? 0xff : 0);
+        SB_IMMED_3D(so, BLEND_ENABLES, cso->rt[0].blend_enable ? 0xff : 0);
 
         if (cso->rt[0].blend_enable) {
             SB_BEGIN_3D(so, BLEND_EQUATION_RGB, 5);
@@ -108,7 +117,8 @@ nvc0_blend_state_create(struct pipe_context *pipe,
             SB_DATA    (so, nvc0_blend_fac(cso->rt[0].alpha_dst_factor));
         }
 
-        SB_BEGIN_3D(so, COLOR_MASK_BROADCAST, 1);
+        SB_IMMED_3D(so, COLOR_MASK_COMMON, 1);
+        SB_BEGIN_3D(so, COLOR_MASK(0), 1);
         SB_DATA    (so, nvc0_colormask(cso->rt[0].colormask));
     } else {
         uint8_t en = 0;
@@ -126,23 +136,15 @@ nvc0_blend_state_create(struct pipe_context *pipe,
             SB_DATA    (so, nvc0_blend_fac(cso->rt[i].alpha_src_factor));
             SB_DATA    (so, nvc0_blend_fac(cso->rt[i].alpha_dst_factor));
         }
-        SB_BEGIN_3D(so, BLEND_ENABLES, 1);
-        SB_DATA    (so, en);
+        SB_IMMED_3D(so, BLEND_ENABLES, en);
 
+        SB_IMMED_3D(so, COLOR_MASK_COMMON, 0);
         SB_BEGIN_3D(so, COLOR_MASK(0), 8);
         for (i = 0; i < 8; ++i)
             SB_DATA(so, nvc0_colormask(cso->rt[i].colormask));
     }
 
-    if (cso->logicop_enable) {
-       SB_BEGIN_3D(so, LOGIC_OP_ENABLE, 2);
-       SB_DATA    (so, 1);
-       SB_DATA    (so, nvgl_logicop_func(cso->logicop_func));
-    } else {
-       SB_IMMED_3D(so, LOGIC_OP_ENABLE, 0);
-    }
-
-    assert(so->size < (sizeof(so->state) / sizeof(so->state[0])));
+    assert(so->size <= (sizeof(so->state) / sizeof(so->state[0])));
     return so;
 }
 
@@ -161,6 +163,7 @@ nvc0_blend_state_delete(struct pipe_context *pipe, void *hwcso)
     FREE(hwcso);
 }
 
+/* NOTE: ignoring line_last_pixel, using FALSE (set on screen init) */
 static void *
 nvc0_rasterizer_state_create(struct pipe_context *pipe,
                              const struct pipe_rasterizer_state *cso)
@@ -183,19 +186,23 @@ nvc0_rasterizer_state_create(struct pipe_context *pipe,
     SB_IMMED_3D(so, PROVOKING_VERTEX_LAST, !cso->flatshade_first);
     SB_IMMED_3D(so, VERTEX_TWO_SIDE_ENABLE, cso->light_twoside);
 
-    SB_BEGIN_3D(so, LINE_WIDTH, 1);
-    SB_DATA    (so, fui(cso->line_width));
+    SB_IMMED_3D(so, VERT_COLOR_CLAMP_EN, cso->clamp_vertex_color);
+    SB_BEGIN_3D(so, FRAG_COLOR_CLAMP_EN, 1);
+    SB_DATA    (so, cso->clamp_fragment_color ? 0x11111111 : 0x00000000);
+
     SB_IMMED_3D(so, LINE_SMOOTH_ENABLE, cso->line_smooth);
+    if (cso->line_smooth)
+       SB_BEGIN_3D(so, LINE_WIDTH_SMOOTH, 1);
+    else
+       SB_BEGIN_3D(so, LINE_WIDTH_ALIASED, 1);
+    SB_DATA    (so, fui(cso->line_width));
 
-    SB_BEGIN_3D(so, LINE_STIPPLE_ENABLE, 1);
+    SB_IMMED_3D(so, LINE_STIPPLE_ENABLE, cso->line_stipple_enable);
     if (cso->line_stipple_enable) {
-        SB_DATA    (so, 1);
         SB_BEGIN_3D(so, LINE_STIPPLE_PATTERN, 1);
         SB_DATA    (so, (cso->line_stipple_pattern << 8) |
                          cso->line_stipple_factor);
                     
-    } else {
-        SB_DATA    (so, 0);
     }
 
     SB_IMMED_3D(so, VP_POINT_SIZE_EN, cso->point_size_per_vertex);
@@ -249,7 +256,7 @@ nvc0_rasterizer_state_create(struct pipe_context *pipe,
         SB_DATA    (so, fui(cso->offset_units * 2.0f));
     }
 
-    assert(so->size < (sizeof(so->state) / sizeof(so->state[0])));
+    assert(so->size <= (sizeof(so->state) / sizeof(so->state[0])));
     return (void *)so;
 }
 
@@ -320,7 +327,7 @@ nvc0_zsa_state_create(struct pipe_context *pipe,
       SB_DATA    (so, nvgl_comparison_op(cso->alpha.func));
    }
 
-   assert(so->size < (sizeof(so->state) / sizeof(so->state[0])));
+   assert(so->size <= (sizeof(so->state) / sizeof(so->state[0])));
    return (void *)so;
 }
 
index bb81480bab9be9ff43f431d8d44065a04ac01fc0..9b2a28150b1f4dda59b036b21ac8288de8aa775f 100644 (file)
@@ -1,6 +1,7 @@
 
+#include "util/u_math.h"
+
 #include "nvc0_context.h"
-#include "os/os_time.h"
 
 static void
 nvc0_validate_zcull(struct nvc0_context *nvc0)
@@ -156,11 +157,10 @@ static void
 nvc0_validate_stencil_ref(struct nvc0_context *nvc0)
 {
     struct nouveau_channel *chan = nvc0->screen->base.channel;
+    const ubyte *ref = &nvc0->stencil_ref.ref_value[0];
 
-    BEGIN_RING(chan, RING_3D(STENCIL_FRONT_FUNC_REF), 1);
-    OUT_RING  (chan, nvc0->stencil_ref.ref_value[0]);
-    BEGIN_RING(chan, RING_3D(STENCIL_BACK_FUNC_REF), 1);
-    OUT_RING  (chan, nvc0->stencil_ref.ref_value[1]);
+    IMMED_RING(chan, RING_3D(STENCIL_FRONT_FUNC_REF), ref[0]);
+    IMMED_RING(chan, RING_3D(STENCIL_BACK_FUNC_REF), ref[1]);
 }
 
 static void
@@ -214,10 +214,11 @@ nvc0_validate_viewport(struct nvc0_context *nvc0)
 
     /* now set the viewport rectangle to viewport dimensions for clipping */
 
-    x = (int)(vp->translate[0] - fabsf(vp->scale[0]));
-    y = (int)(vp->translate[1] - fabsf(vp->scale[1]));
-    w = (int)fabsf(2.0f * vp->scale[0]);
-    h = (int)fabsf(2.0f * vp->scale[1]);
+    x = util_iround(MAX2(0.0f, vp->translate[0] - fabsf(vp->scale[0])));
+    y = util_iround(MAX2(0.0f, vp->translate[1] - fabsf(vp->scale[1])));
+    w = util_iround(vp->translate[0] + fabsf(vp->scale[0])) - x;
+    h = util_iround(vp->translate[1] + fabsf(vp->scale[1])) - y;
+
     zmin = vp->translate[2] - fabsf(vp->scale[2]);
     zmax = vp->translate[2] + fabsf(vp->scale[2]);
 
index 8222f9375ee2c69adaa349164f267b14a9fcb55b..e0fe9df25d7a549dfd56ba1d56bbb550500c51f2 100644 (file)
 struct nvc0_blend_stateobj {
    struct pipe_blend_state pipe;
    int size;
-   uint32_t state[72];
+   uint32_t state[70];
 };
 
 struct nvc0_rasterizer_stateobj {
    struct pipe_rasterizer_state pipe;
    int size;
-   uint32_t state[36];
+   uint32_t state[38];
 };
 
 struct nvc0_zsa_stateobj {
    struct pipe_depth_stencil_alpha_state pipe;
    int size;
-   uint32_t state[29];
+   uint32_t state[26];
 };
 
 struct nvc0_vertex_element {
index fc5f45ea25dfe1898a4a5cfe105b76cae1bc22a6..6be3702bddc38bde146ae58a688d87c1bb0601fc 100644 (file)
@@ -27,6 +27,7 @@
 #include "util/u_inlines.h"
 #include "util/u_pack_color.h"
 #include "util/u_format.h"
+#include "util/u_surface.h"
 
 #include "nvc0_context.h"
 #include "nvc0_resource.h"
@@ -234,6 +235,13 @@ nvc0_resource_copy_region(struct pipe_context *pipe,
    int ret;
    unsigned dst_layer = dstz, src_layer = src_box->z;
 
+   /* Fallback for buffers. */
+   if (dst->target == PIPE_BUFFER && src->target == PIPE_BUFFER) {
+      util_resource_copy_region(pipe, dst, dst_level, dstx, dsty, dstz,
+                                src, src_level, src_box);
+      return;
+   }
+
    nv04_resource(dst)->status |= NOUVEAU_BUFFER_STATUS_GPU_WRITING;
 
    if (src->format == dst->format) {
index a44d330c7319d106d85609afdde2c377c3dfb991..d57be91669676faf7bd7bce19c7400b8817772ca 100644 (file)
@@ -22,8 +22,6 @@
 
 #include <unistd.h>
 
-#define NOUVEAU_DEBUG 1
-
 #include "pipe/p_shader_tokens.h"
 #include "tgsi/tgsi_parse.h"
 #include "tgsi/tgsi_util.h"
@@ -200,7 +198,7 @@ static INLINE void
 bld_warn_uninitialized(struct bld_context *bld, int kind,
                        struct bld_register *reg, struct nv_basic_block *b)
 {
-#ifdef NOUVEAU_DEBUG
+#if NV50_DEBUG & NV50_DEBUG_SHADER
    long i = (reg - &bld->tvs[0][0]) / 4;
    long c = (reg - &bld->tvs[0][0]) & 3;
 
@@ -259,6 +257,12 @@ fetch_by_bb(struct bld_register *reg,
          fetch_by_bb(reg, vals, n, b->in[i]);
 }
 
+static INLINE boolean
+nvc0_bblock_is_terminated(struct nv_basic_block *bb)
+{
+   return bb->exit && bb->exit->terminator;
+}
+
 static INLINE struct nv_value *
 bld_load_imm_u32(struct bld_context *bld, uint32_t u);
 
@@ -1465,7 +1469,7 @@ bld_instruction(struct bld_context *bld,
    uint opcode = translate_opcode(insn->Instruction.Opcode);
    uint8_t mask = insn->Dst[0].Register.WriteMask;
 
-#ifdef NOUVEAU_DEBUG
+#if NV50_DEBUG & NV50_DEBUG_PROG_IR
    debug_printf("bld_instruction:"); tgsi_dump_instruction(insn, 1);
 #endif
        
@@ -1637,8 +1641,7 @@ bld_instruction(struct bld_context *bld,
    {
       struct nv_basic_block *b = new_basic_block(bld->pc);
 
-      if (bld->pc->current_block->exit &&
-          !bld->pc->current_block->exit->terminator)
+      if (!nvc0_bblock_is_terminated(bld->pc->current_block))
          bld_flow(bld, NV_OP_BRA, NULL, NV_CC_P, b, FALSE);
 
       --bld->cond_lvl;
index 2bcb93d93e3bd64580394c6d3e603cb870ee5a96..2b1510264a1154388c36f25b64a82e98808bf5c0 100644 (file)
@@ -13,7 +13,7 @@ nvfx_flush(struct pipe_context *pipe,
        struct nvfx_context *nvfx = nvfx_context(pipe);
        struct nvfx_screen *screen = nvfx->screen;
        struct nouveau_channel *chan = screen->base.channel;
-       struct nouveau_grobj *eng3d = screen->eng3d;
+       /*struct nouveau_grobj *eng3d = screen->eng3d;*/
 
        /* XXX: we need to actually be intelligent here */
         /* XXX This flag wasn't set by the state tracker anyway. */
index 8742f60c163be241ee70143ce7784da551e3d4e1..4a97dfb9c252f7dad373d448c969d4bf23692cea 100644 (file)
@@ -1,5 +1,6 @@
 #include "pipe/p_screen.h"
 #include "pipe/p_state.h"
+#include "util/u_format.h"
 #include "util/u_format_s3tc.h"
 #include "util/u_simple_screen.h"
 
@@ -82,6 +83,8 @@ nvfx_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
                return 0; // TODO: implement primitive restart
        case PIPE_CAP_SHADER_STENCIL_EXPORT:
                return 0;
+       case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
+                return 0;
        default:
                NOUVEAU_ERR("Warning: unknown PIPE_CAP %d\n", param);
                return 0;
@@ -207,6 +210,9 @@ nvfx_screen_is_format_supported(struct pipe_screen *pscreen,
 {
        struct nvfx_screen *screen = nvfx_screen(pscreen);
 
+        if (!util_format_is_supported(format, bind))
+                return FALSE;
+
         if (sample_count > 1)
                return FALSE;
 
index be31853d7177c99e5651941b280d4e62a9dabebb..ced26494e15430b1920e4b19a21a4220929d3212 100644 (file)
@@ -33,6 +33,7 @@
 #include "util/u_memory.h"
 #include "util/u_pack_color.h"
 #include "util/u_blitter.h"
+#include "util/u_surface.h"
 
 #include "nouveau/nouveau_winsys.h"
 #include "nouveau/nouveau_screen.h"
@@ -252,6 +253,13 @@ nvfx_resource_copy_region(struct pipe_context *pipe,
        if(!w || !h)
                return;
 
+        /* Fallback for buffers. */
+        if (dstr->target == PIPE_BUFFER && srcr->target == PIPE_BUFFER) {
+                util_resource_copy_region(pipe, dstr, dst_level, dstx, dsty, dstz,
+                                          srcr, src_level, src_box);
+                return;
+        }
+
        if(copy_threshold < 0)
                copy_threshold = debug_get_num_option("NOUVEAU_COPY_THRESHOLD", 4);
 
index 66d900ebb5f35b57b7a051e3940bed3ef012a20f..c9401b99f1cdfe14e48fa63c0872d1ea9c65c150 100644 (file)
@@ -29,8 +29,7 @@ C_SOURCES = \
        r300_transfer.c
 
 LIBRARY_INCLUDES = \
-       -I$(TOP)/src/mesa/drivers/dri/r300/compiler \
-       -I$(TOP)/src/gallium/winsys/drm/radeon/core
+       -I$(TOP)/src/mesa/drivers/dri/r300/compiler
 
 COMPILER_ARCHIVE = $(TOP)/src/mesa/drivers/dri/r300/compiler/libr300compiler.a
 
index b49db937994fbea18934fa5a34a9572305507a7e..3af157a7956be92435d6974de7a1a61b7f5287f6 100644 (file)
@@ -6,7 +6,6 @@ env = env.Clone()
 # add the paths for r300compiler
 env.Append(CPPPATH = [
     '#/src/mesa/drivers/dri/r300/compiler', 
-    '#/src/gallium/winsys/drm/radeon/core',
     '#/include', 
     '#/src/mesa',
 ])
index 37b635fd120bcd6dd44237a119345dc7ff03460a..1217488bac7af102c3a2715aaecea7c3065f6f91 100644 (file)
 #include "r300_context.h"
 #include "r300_emit.h"
 #include "r300_texture.h"
-#include "r300_winsys.h"
 
 #include "util/u_format.h"
 #include "util/u_pack_color.h"
+#include "util/u_surface.h"
 
 enum r300_blitter_op /* bitmask */
 {
@@ -206,7 +206,7 @@ static void r300_clear(struct pipe_context* pipe,
         (struct r300_hyperz_state*)r300->hyperz_state.state;
     uint32_t width = fb->width;
     uint32_t height = fb->height;
-    boolean can_hyperz = r300->rws->get_value(r300->rws, R300_CAN_HYPERZ);
+    boolean can_hyperz = r300->rws->get_value(r300->rws, RADEON_VID_CAN_HYPERZ);
     uint32_t hyperz_dcv = hyperz->zb_depthclearvalue;
 
     /* Enable fast Z clear.
@@ -253,17 +253,15 @@ static void r300_clear(struct pipe_context* pipe,
     } else if (r300->zmask_clear.dirty || r300->hiz_clear.dirty) {
         /* Just clear zmask and hiz now, this does not use the standard draw
          * procedure. */
-        unsigned dwords;
-
         /* Calculate zmask_clear and hiz_clear atom sizes. */
-        r300_update_hyperz_state(r300);
-        dwords = (r300->zmask_clear.dirty ? r300->zmask_clear.size : 0) +
-                 (r300->hiz_clear.dirty ? r300->hiz_clear.size : 0) +
-                 r300_get_num_cs_end_dwords(r300);
+        unsigned dwords =
+            (r300->zmask_clear.dirty ? r300->zmask_clear.size : 0) +
+            (r300->hiz_clear.dirty ? r300->hiz_clear.size : 0) +
+            r300_get_num_cs_end_dwords(r300);
 
         /* Reserve CS space. */
-        if (dwords > (R300_MAX_CMDBUF_DWORDS - r300->cs->cdw)) {
-            r300_flush(&r300->context, R300_FLUSH_ASYNC, NULL);
+        if (dwords > (RADEON_MAX_CMDBUF_DWORDS - r300->cs->cdw)) {
+            r300_flush(&r300->context, RADEON_FLUSH_ASYNC, NULL);
         }
 
         /* Emit clear packets. */
@@ -306,16 +304,10 @@ static void r300_clear_render_target(struct pipe_context *pipe,
 {
     struct r300_context *r300 = r300_context(pipe);
 
-    r300->hyperz_locked = TRUE;
-    r300_mark_atom_dirty(r300, &r300->hyperz_state);
-
     r300_blitter_begin(r300, R300_CLEAR_SURFACE);
     util_blitter_clear_render_target(r300->blitter, dst, rgba,
                                      dstx, dsty, width, height);
     r300_blitter_end(r300);
-
-    r300->hyperz_locked = FALSE;
-    r300_mark_atom_dirty(r300, &r300->hyperz_state);
 }
 
 /* Clear a region of a depth stencil surface. */
@@ -334,21 +326,14 @@ static void r300_clear_depth_stencil(struct pipe_context *pipe,
     if (r300->zmask_in_use && !r300->hyperz_locked) {
         if (fb->zsbuf->texture == dst->texture) {
             r300_decompress_zmask(r300);
-        } else {
-            r300->hyperz_locked = TRUE;
-            r300_mark_atom_dirty(r300, &r300->hyperz_state);
         }
     }
 
+    /* XXX Do not decompress ZMask of the currently-set zbuffer. */
     r300_blitter_begin(r300, R300_CLEAR_SURFACE);
     util_blitter_clear_depth_stencil(r300->blitter, dst, clear_flags, depth, stencil,
                                      dstx, dsty, width, height);
     r300_blitter_end(r300);
-
-    if (r300->hyperz_locked) {
-        r300->hyperz_locked = FALSE;
-        r300_mark_atom_dirty(r300, &r300->hyperz_state);
-    }
 }
 
 void r300_decompress_zmask(struct r300_context *r300)
@@ -431,13 +416,17 @@ static void r300_resource_copy_region(struct pipe_context *pipe,
             util_format_description(dst->format);
     struct pipe_box box;
 
+    /* Fallback for buffers. */
+    if (dst->target == PIPE_BUFFER && src->target == PIPE_BUFFER) {
+        util_resource_copy_region(pipe, dst, dst_level, dstx, dsty, dstz,
+                                  src, src_level, src_box);
+        return;
+    }
+
     if (r300->zmask_in_use && !r300->hyperz_locked) {
         if (fb->zsbuf->texture == src ||
             fb->zsbuf->texture == dst) {
             r300_decompress_zmask(r300);
-        } else {
-            r300->hyperz_locked = TRUE;
-            r300_mark_atom_dirty(r300, &r300->hyperz_state);
         }
     }
 
@@ -513,11 +502,6 @@ static void r300_resource_copy_region(struct pipe_context *pipe,
         r300_resource_set_properties(pipe->screen, src, 0, &old_src);
     if (old_dst.format != new_dst.format)
         r300_resource_set_properties(pipe->screen, dst, 0, &old_dst);
-
-    if (r300->hyperz_locked) {
-        r300->hyperz_locked = FALSE;
-        r300_mark_atom_dirty(r300, &r300->hyperz_state);
-    }
 }
 
 void r300_init_blit_functions(struct r300_context *r300)
index 990acea9f445c0a8692d82e50159e306511cd72d..4949703120d42a86e286282b183292b17fe329b3 100644 (file)
@@ -419,4 +419,5 @@ void r300_parse_chipset(struct r300_capabilities* caps)
     caps->is_rv350 = caps->family >= CHIP_FAMILY_RV350;
     caps->z_compress = caps->is_rv350 ? R300_ZCOMP_8X8 : R300_ZCOMP_4X4;
     caps->dxtc_swizzle = caps->is_r400 || caps->is_r500;
+    caps->has_us_format = caps->family == CHIP_FAMILY_R520;
 }
index 68943d561ba7de9761920c534ab1b0c81620789e..d0050bed2e8fa92f700fad390d6efd1decf14f95 100644 (file)
@@ -90,6 +90,8 @@ struct r300_capabilities {
     boolean high_second_pipe;
     /* DXTC texture swizzling. */
     boolean dxtc_swizzle;
+    /* Whether R500_US_FORMAT0_0 exists (R520-only and depends on DRM). */
+    boolean has_us_format;
 };
 
 /* Enumerations for legibility and telling which card we're running on. */
index 720d666d98c7253180f5c6ad8976731e09aabc6e..15d1278c3bbd0614593f2f5e9e6ea1f52148cae5 100644 (file)
@@ -32,7 +32,6 @@
 #include "r300_emit.h"
 #include "r300_screen.h"
 #include "r300_screen_buffer.h"
-#include "r300_winsys.h"
 
 static void r300_update_num_contexts(struct r300_screen *r300screen,
                                      int diff)
@@ -167,8 +166,8 @@ static boolean r300_setup_atoms(struct r300_context* r300)
     boolean is_rv350 = r300->screen->caps.is_rv350;
     boolean is_r500 = r300->screen->caps.is_r500;
     boolean has_tcl = r300->screen->caps.has_tcl;
-    boolean drm_2_6_0 = r300->rws->get_value(r300->rws, R300_VID_DRM_2_6_0);
-    boolean can_hyperz = r300->rws->get_value(r300->rws, R300_CAN_HYPERZ);
+    boolean drm_2_6_0 = r300->rws->get_value(r300->rws, RADEON_VID_DRM_2_6_0);
+    boolean can_hyperz = r300->rws->get_value(r300->rws, RADEON_VID_CAN_HYPERZ);
     boolean has_hiz_ram = r300->screen->caps.hiz_ram > 0;
 
     /* Create the actual atom list.
@@ -379,7 +378,7 @@ static void r300_init_states(struct pipe_context *pipe)
 
         if (r300->screen->caps.is_r500 ||
             (r300->screen->caps.is_rv350 &&
-             r300->rws->get_value(r300->rws, R300_VID_DRM_2_6_0))) {
+             r300->rws->get_value(r300->rws, RADEON_VID_DRM_2_6_0))) {
             OUT_CB_REG(R300_GB_Z_PEQ_CONFIG, 0);
         }
         END_CB;
@@ -391,7 +390,7 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
 {
     struct r300_context* r300 = CALLOC_STRUCT(r300_context);
     struct r300_screen* r300screen = r300_screen(screen);
-    struct r300_winsys_screen *rws = r300screen->rws;
+    struct radeon_winsys *rws = r300screen->rws;
 
     if (!r300)
         return NULL;
@@ -514,19 +513,19 @@ struct pipe_context* r300_create_context(struct pipe_screen* screen,
                 "r300: DRM version: %d.%d.%d, Name: %s, ID: 0x%04x, GB: %d, Z: %d\n"
                 "r300: GART size: %d MB, VRAM size: %d MB\n"
                 "r300: AA compression: %s, Z compression: %s, HiZ: %s\n",
-                rws->get_value(rws, R300_VID_DRM_MAJOR),
-                rws->get_value(rws, R300_VID_DRM_MINOR),
-                rws->get_value(rws, R300_VID_DRM_PATCHLEVEL),
+                rws->get_value(rws, RADEON_VID_DRM_MAJOR),
+                rws->get_value(rws, RADEON_VID_DRM_MINOR),
+                rws->get_value(rws, RADEON_VID_DRM_PATCHLEVEL),
                 screen->get_name(screen),
-                rws->get_value(rws, R300_VID_PCI_ID),
-                rws->get_value(rws, R300_VID_GB_PIPES),
-                rws->get_value(rws, R300_VID_Z_PIPES),
-                rws->get_value(rws, R300_VID_GART_SIZE) >> 20,
-                rws->get_value(rws, R300_VID_VRAM_SIZE) >> 20,
-                rws->get_value(rws, R300_CAN_AACOMPRESS) ? "YES" : "NO",
-                rws->get_value(rws, R300_CAN_HYPERZ) &&
+                rws->get_value(rws, RADEON_VID_PCI_ID),
+                rws->get_value(rws, RADEON_VID_R300_GB_PIPES),
+                rws->get_value(rws, RADEON_VID_R300_Z_PIPES),
+                rws->get_value(rws, RADEON_VID_GART_SIZE) >> 20,
+                rws->get_value(rws, RADEON_VID_VRAM_SIZE) >> 20,
+                rws->get_value(rws, RADEON_VID_CAN_AACOMPRESS) ? "YES" : "NO",
+                rws->get_value(rws, RADEON_VID_CAN_HYPERZ) &&
                 r300->screen->caps.zmask_ram ? "YES" : "NO",
-                rws->get_value(rws, R300_CAN_HYPERZ) &&
+                rws->get_value(rws, RADEON_VID_CAN_HYPERZ) &&
                 r300->screen->caps.hiz_ram ? "YES" : "NO");
     }
 
index e395f41290e63c8e57bce5a431424e9ee5623fba..8a0a54cf1e97d8f58e8a2d2a9e5173b7a4401325 100644 (file)
@@ -34,7 +34,7 @@
 
 #include "r300_defines.h"
 #include "r300_screen.h"
-#include "r300_winsys.h"
+#include "../../winsys/radeon/drm/radeon_winsys.h"
 
 struct u_upload_mgr;
 struct r300_context;
@@ -190,6 +190,7 @@ struct r300_texture_format_state {
     uint32_t format1; /* R300_TX_FORMAT1: 0x44c0 */
     uint32_t format2; /* R300_TX_FORMAT2: 0x4500 */
     uint32_t tile_config; /* R300_TX_OFFSET (subset thereof) */
+    uint32_t us_format0;   /* R500_US_FORMAT0_0: 0x4640 (through 15) */
 };
 
 struct r300_sampler_view {
@@ -211,7 +212,7 @@ struct r300_texture_sampler_state {
     struct r300_texture_format_state format;
     uint32_t filter0;      /* R300_TX_FILTER0: 0x4400 */
     uint32_t filter1;      /* R300_TX_FILTER1: 0x4440 */
-    uint32_t border_color;  /* R300_TX_BORDER_COLOR: 0x45c0 */
+    uint32_t border_color; /* R300_TX_BORDER_COLOR: 0x45c0 */
 };
 
 struct r300_textures_state {
@@ -290,12 +291,12 @@ struct r300_query {
     boolean begin_emitted;
 
     /* The buffer where query results are stored. */
-    struct r300_winsys_bo *buf;
-    struct r300_winsys_cs_handle *cs_buf;
+    struct pb_buffer *buf;
+    struct radeon_winsys_cs_handle *cs_buf;
     /* The size of the buffer. */
     unsigned buffer_size;
     /* The domain of the buffer. */
-    enum r300_buffer_domain domain;
+    enum radeon_bo_domain domain;
 
     /* Linked list members. */
     struct r300_query* prev;
@@ -306,10 +307,10 @@ struct r300_surface {
     struct pipe_surface base;
 
     /* Winsys buffer backing the texture. */
-    struct r300_winsys_bo *buf;
-    struct r300_winsys_cs_handle *cs_buf;
+    struct pb_buffer *buf;
+    struct radeon_winsys_cs_handle *cs_buf;
 
-    enum r300_buffer_domain domain;
+    enum radeon_bo_domain domain;
 
     uint32_t offset;    /* COLOROFFSET or DEPTHOFFSET. */
     uint32_t pitch;     /* COLORPITCH or DEPTHPITCH. */
@@ -339,8 +340,8 @@ struct r300_texture_desc {
     /* Buffer tiling.
      * Macrotiling is specified per-level because small mipmaps cannot
      * be macrotiled. */
-    enum r300_buffer_tiling microtile;
-    enum r300_buffer_tiling macrotile[R300_MAX_TEXTURE_LEVELS];
+    enum radeon_bo_layout microtile;
+    enum radeon_bo_layout macrotile[R300_MAX_TEXTURE_LEVELS];
 
     /* Offsets into the buffer. */
     unsigned offset_in_bytes[R300_MAX_TEXTURE_LEVELS];
@@ -396,9 +397,9 @@ struct r300_resource
     struct u_vbuf_resource b;
 
     /* Winsys buffer backing this resource. */
-    struct r300_winsys_bo *buf;
-    struct r300_winsys_cs_handle *cs_buf;
-    enum r300_buffer_domain domain;
+    struct pb_buffer *buf;
+    struct radeon_winsys_cs_handle *cs_buf;
+    enum radeon_bo_domain domain;
     unsigned buf_size;
 
     /* Constant buffers are in user memory. */
@@ -447,14 +448,21 @@ enum r300_hiz_func {
     HIZ_FUNC_MIN,
 };
 
+/* For deferred fragment shader state validation. */
+enum r300_fs_validity_status {
+    FRAGMENT_SHADER_VALID,      /* No need to change/validate the FS. */
+    FRAGMENT_SHADER_MAYBE_DIRTY,/* Validate the FS if external state was changed. */
+    FRAGMENT_SHADER_DIRTY       /* Always validate the FS (if the FS was changed) */
+};
+
 struct r300_context {
     /* Parent class */
     struct pipe_context context;
 
     /* The interface to the windowing system, etc. */
-    struct r300_winsys_screen *rws;
+    struct radeon_winsys *rws;
     /* The command stream. */
-    struct r300_winsys_cs *cs;
+    struct radeon_winsys_cs *cs;
     /* Screen. */
     struct r300_screen *screen;
 
@@ -580,6 +588,8 @@ struct r300_context {
     int sprite_coord_enable;
     /* Whether two-sided color selection is enabled (AKA light_twoside). */
     boolean two_sided_color;
+    /* Whether fragment color clamping is enabled. */
+    boolean frag_clamp;
     /* Whether fast color clear is enabled. */
     boolean cbzb_clear;
     /* Whether ZMASK is enabled. */
@@ -596,6 +606,10 @@ struct r300_context {
     enum r300_hiz_func hiz_func;
     /* HiZ clear value. */
     uint32_t hiz_clear_value;
+    /* Whether fragment shader needs to be validated. */
+    enum r300_fs_validity_status fs_status;
+    /* Framebuffer multi-write. */
+    boolean fb_multiwrite;
 
     void *dsa_decompress_zmask;
 
index 2e52dfa43c6a17e36e1c6ec040f712f2407b141c..c208e672f42194876603293cecf1eadafeaa608d 100644 (file)
@@ -29,7 +29,6 @@
 
 #include "r300_reg.h"
 #include "r300_context.h"
-#include "r300_winsys.h"
 
 /* Yes, I know macros are ugly. However, they are much prettier than the code
  * that they neatly hide away, and don't have the cost of function setup,so
  */
 
 #define CS_LOCALS(context) \
-    struct r300_winsys_cs *cs_copy = (context)->cs; \
-    struct r300_winsys_screen *cs_winsys = (context)->rws; \
+    struct radeon_winsys_cs *cs_copy = (context)->cs; \
+    struct radeon_winsys *cs_winsys = (context)->rws; \
     int cs_count = 0; (void) cs_count; (void) cs_winsys;
 
 #ifdef DEBUG
 
 #define BEGIN_CS(size) do { \
-    assert(size <= (R300_MAX_CMDBUF_DWORDS - cs_copy->cdw)); \
+    assert(size <= (RADEON_MAX_CMDBUF_DWORDS - cs_copy->cdw)); \
     cs_count = size; \
 } while (0)
 
index 2d111f9158d0db9dec79eaf928ea22c10a1274cd..30e9befad21fdc7e4e8da82a30fd794fa65a4a1e 100644 (file)
 
 #define R300_INVALID_FORMAT 0xffff
 
-/* Tiling flags. */
-enum r300_buffer_tiling {
-    R300_BUFFER_LINEAR = 0,
-    R300_BUFFER_TILED,
-    R300_BUFFER_SQUARETILED,
-
-    R300_BUFFER_UNKNOWN,
-    R300_BUFFER_SELECT_LAYOUT = R300_BUFFER_UNKNOWN
-};
-
-enum r300_buffer_domain { /* bitfield */
-    R300_DOMAIN_GTT  = 2,
-    R300_DOMAIN_VRAM = 4
-};
-
 #endif
index e17a907e77e0c2816d842c3e476a04c8a2678c0f..62435c5e2e29d40ce682f31bc74f10b86b164773 100644 (file)
@@ -375,7 +375,7 @@ void r300_emit_fb_state(struct r300_context* r300, unsigned size, void* state)
     struct pipe_framebuffer_state* fb = (struct pipe_framebuffer_state*)state;
     struct r300_surface* surf;
     unsigned i;
-    boolean can_hyperz = r300->rws->get_value(r300->rws, R300_CAN_HYPERZ);
+    boolean can_hyperz = r300->rws->get_value(r300->rws, RADEON_VID_CAN_HYPERZ);
     uint32_t rb3d_cctl = 0;
 
     CS_LOCALS(r300);
@@ -387,8 +387,7 @@ void r300_emit_fb_state(struct r300_context* r300, unsigned size, void* state)
     if (r300->screen->caps.is_r500) {
         rb3d_cctl = R300_RB3D_CCTL_INDEPENDENT_COLORFORMAT_ENABLE_ENABLE;
     }
-    if (fb->nr_cbufs &&
-        r300_fragment_shader_writes_all(r300_fs(r300))) {
+    if (fb->nr_cbufs && r300->fb_multiwrite) {
         rb3d_cctl |= R300_RB3D_CCTL_NUM_MULTIWRITES(fb->nr_cbufs);
     }
 
@@ -483,7 +482,7 @@ void r300_emit_fb_state_pipelined(struct r300_context *r300,
 
     /* If we use the multiwrite feature, the colorbuffers 2,3,4 must be
      * marked as UNUSED in the US block. */
-    if (r300_fragment_shader_writes_all(r300_fs(r300))) {
+    if (r300->fb_multiwrite) {
         num_cbufs = MIN2(num_cbufs, 1);
     }
 
@@ -495,6 +494,11 @@ void r300_emit_fb_state_pipelined(struct r300_context *r300,
     for (i = 0; i < num_cbufs; i++) {
         OUT_CS(r300_surface(fb->cbufs[i])->format);
     }
+    for (; i < 1; i++) {
+        OUT_CS(R300_US_OUT_FMT_C4_8 |
+               R300_C0_SEL_B | R300_C1_SEL_G |
+               R300_C2_SEL_R | R300_C3_SEL_A);
+    }
     for (; i < 4; i++) {
         OUT_CS(R300_US_OUT_FMT_UNUSED);
     }
@@ -771,6 +775,7 @@ void r300_emit_textures_state(struct r300_context *r300,
     struct r300_texture_sampler_state *texstate;
     struct r300_resource *tex;
     unsigned i;
+    boolean has_us_format = r300->screen->caps.has_us_format;
     CS_LOCALS(r300);
 
     BEGIN_CS(size);
@@ -792,6 +797,11 @@ void r300_emit_textures_state(struct r300_context *r300,
 
             OUT_CS_REG(R300_TX_OFFSET_0 + (i * 4), texstate->format.tile_config);
             OUT_CS_RELOC(tex);
+
+            if (has_us_format) {
+                OUT_CS_REG(R500_US_FORMAT0_0 + (i * 4),
+                           texstate->format.us_format0);
+            }
         }
     }
     END_CS;
@@ -1221,7 +1231,7 @@ validate:
         if (flushed)
             return FALSE;
 
-        r300_flush(&r300->context, R300_FLUSH_ASYNC, NULL);
+        r300_flush(&r300->context, RADEON_FLUSH_ASYNC, NULL);
         flushed = TRUE;
         goto validate;
     }
index b3d0d344ec4ccf17ce64f913babb7272f6eedef5..de7d77d608bd57261ed01dada54d6f8ef09f3144 100644 (file)
@@ -38,7 +38,7 @@ void r300_flush(struct pipe_context *pipe,
 {
     struct r300_context *r300 = r300_context(pipe);
     struct r300_atom *atom;
-    struct r300_winsys_bo **rfence = (struct r300_winsys_bo**)fence;
+    struct pb_buffer **rfence = (struct pb_buffer**)fence;
 
     if (r300->draw && !r300->draw_vbo_locked)
        r300_draw_flush_vbuf(r300);
@@ -48,11 +48,11 @@ void r300_flush(struct pipe_context *pipe,
         *rfence = r300->rws->buffer_create(r300->rws, 1, 1,
                                            PIPE_BIND_VERTEX_BUFFER,
                                            PIPE_USAGE_STATIC,
-                                           R300_DOMAIN_GTT);
+                                           RADEON_DOMAIN_GTT);
         /* Add the fence as a dummy relocation. */
         r300->rws->cs_add_reloc(r300->cs,
                                 r300->rws->buffer_get_cs_handle(*rfence),
-                                R300_DOMAIN_GTT, R300_DOMAIN_GTT);
+                                RADEON_DOMAIN_GTT, RADEON_DOMAIN_GTT);
     }
 
     if (r300->dirty_hw) {
index 4c502fefb3fce365c3c50b0a668ff45074e4def9..e3a1bc4a0f4e7b8894d7a7e4ecce276ccc7cd918 100644 (file)
@@ -22,6 +22,7 @@
  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  * USE OR OTHER DEALINGS IN THE SOFTWARE. */
 
+#include "util/u_format.h"
 #include "util/u_math.h"
 #include "util/u_memory.h"
 
@@ -34,6 +35,7 @@
 #include "r300_screen.h"
 #include "r300_fs.h"
 #include "r300_reg.h"
+#include "r300_texture.h"
 #include "r300_tgsi_to_rc.h"
 
 #include "radeon_code.h"
@@ -146,10 +148,10 @@ static void get_external_state(
     struct r300_fragment_program_external_state* state)
 {
     struct r300_textures_state *texstate = r300->textures_state.state;
+    struct r300_rs_state *rs = r300->rs_state.state;
     unsigned i;
-    unsigned char *swizzle;
 
-    state->frag_clamp = 0;
+    state->frag_clamp = rs ? rs->rs.clamp_fragment_color : 0;
 
     for (i = 0; i < texstate->sampler_state_count; i++) {
         struct r300_sampler_state *s = texstate->sampler_states[i];
@@ -160,27 +162,37 @@ static void get_external_state(
             continue;
         }
 
-        t = r300_resource(texstate->sampler_views[i]->base.texture);
+        t = r300_resource(v->base.texture);
 
         if (s->state.compare_mode == PIPE_TEX_COMPARE_R_TO_TEXTURE) {
             state->unit[i].compare_mode_enabled = 1;
 
-            /* Pass depth texture swizzling to the compiler. */
-            if (texstate->sampler_views[i]) {
-                swizzle = texstate->sampler_views[i]->swizzle;
-
-                state->unit[i].depth_texture_swizzle =
-                    RC_MAKE_SWIZZLE(swizzle[0], swizzle[1],
-                                    swizzle[2], swizzle[3]);
-            } else {
-                state->unit[i].depth_texture_swizzle = RC_SWIZZLE_XYZW;
-            }
-
             /* Fortunately, no need to translate this. */
             state->unit[i].texture_compare_func = s->state.compare_func;
         }
 
         state->unit[i].non_normalized_coords = !s->state.normalized_coords;
+        state->unit[i].convert_unorm_to_snorm =
+                v->base.format == PIPE_FORMAT_RGTC1_SNORM ||
+                v->base.format == PIPE_FORMAT_LATC1_SNORM;
+
+        /* Pass texture swizzling to the compiler, some lowering passes need it. */
+        if (v->base.format == PIPE_FORMAT_RGTC1_SNORM ||
+            v->base.format == PIPE_FORMAT_LATC1_SNORM) {
+            unsigned char swizzle[4];
+
+            util_format_combine_swizzles(swizzle,
+                            util_format_description(v->base.format)->swizzle,
+                            v->swizzle);
+
+            state->unit[i].texture_swizzle =
+                    RC_MAKE_SWIZZLE(swizzle[0], swizzle[1],
+                                    swizzle[2], swizzle[3]);
+        } else if (state->unit[i].compare_mode_enabled) {
+            state->unit[i].texture_swizzle =
+                RC_MAKE_SWIZZLE(v->swizzle[0], v->swizzle[1],
+                                v->swizzle[2], v->swizzle[3]);
+        }
 
         /* XXX this should probably take into account STR, not just S. */
         if (t->tex.is_npot) {
index ecaadf4af8ebae50df511b60dc0c708f18f8bc36..ef330f34c9e4fdafd98f4a1212a11279959065a6 100644 (file)
@@ -24,7 +24,6 @@
 #include "r300_context.h"
 #include "r300_reg.h"
 #include "r300_fs.h"
-#include "r300_winsys.h"
 
 #include "util/u_format.h"
 #include "util/u_mm.h"
@@ -153,7 +152,7 @@ static void r300_update_hyperz(struct r300_context* r300)
     }
 
     if (!zstex ||
-        !r300->rws->get_value(r300->rws, R300_CAN_HYPERZ))
+        !r300->rws->get_value(r300->rws, RADEON_VID_CAN_HYPERZ))
         return;
 
     /* Zbuffer compression. */
index 8e7a963c55d42a669ea73f83f3f9ac81aeda1b3f..b6059203ff18c9adf9b841788e5cc22f1213f9f9 100644 (file)
@@ -2,8 +2,8 @@
 #ifndef R300_PUBLIC_H
 #define R300_PUBLIC_H
 
-struct r300_winsys_screen;
+struct radeon_winsys;
 
-struct pipe_screen* r300_screen_create(struct r300_winsys_screen *rws);
+struct pipe_screen* r300_screen_create(struct radeon_winsys *rws);
 
 #endif
index 717485f43cbb140728fbec23ec7cbdf56095bf30..9752a5194919b732d2f36e8c78c713e9f35c244d 100644 (file)
@@ -26,7 +26,6 @@
 #include "r300_context.h"
 #include "r300_screen.h"
 #include "r300_emit.h"
-#include "r300_winsys.h"
 
 #include <stdio.h>
 
@@ -46,7 +45,7 @@ static struct pipe_query *r300_create_query(struct pipe_context *pipe,
         return NULL;
 
     q->type = query_type;
-    q->domain = R300_DOMAIN_GTT;
+    q->domain = RADEON_DOMAIN_GTT;
     q->buffer_size = 4096;
 
     if (r300screen->caps.family == CHIP_FAMILY_RV530)
@@ -70,7 +69,7 @@ static void r300_destroy_query(struct pipe_context* pipe,
 {
     struct r300_query* q = r300_query(query);
 
-    r300_winsys_bo_reference(&q->buf, NULL);
+    pb_reference(&q->buf, NULL);
     remove_from_list(q);
     FREE(query);
 }
index 26594dabe4201cbf8a8d4e12a0cba9f52d2d7f60..429b85545f70a6dfd04972c7ae40db14044fa806 100644 (file)
@@ -218,8 +218,8 @@ static boolean r300_reserve_cs_dwords(struct r300_context *r300,
     cs_dwords += r300_get_num_cs_end_dwords(r300);
 
     /* Reserve requested CS space. */
-    if (cs_dwords > (R300_MAX_CMDBUF_DWORDS - r300->cs->cdw)) {
-        r300_flush(&r300->context, R300_FLUSH_ASYNC, NULL);
+    if (cs_dwords > (RADEON_MAX_CMDBUF_DWORDS - r300->cs->cdw)) {
+        r300_flush(&r300->context, RADEON_FLUSH_ASYNC, NULL);
         flushed = TRUE;
     }
 
@@ -343,7 +343,7 @@ static boolean immd_is_good_idea(struct r300_context *r300,
         if (!checked[vbi]) {
             buf = r300->vbuf_mgr->real_vertex_buffer[vbi];
 
-            if ((r300_resource(buf)->domain != R300_DOMAIN_GTT)) {
+            if ((r300_resource(buf)->domain != RADEON_DOMAIN_GTT)) {
                 return FALSE;
             }
 
@@ -1080,7 +1080,7 @@ static void r300_render_draw_elements(struct vbuf_render* render,
     end_cs_dwords = r300_get_num_cs_end_dwords(r300);
 
     while (count) {
-        free_dwords = R300_MAX_CMDBUF_DWORDS - r300->cs->cdw;
+        free_dwords = RADEON_MAX_CMDBUF_DWORDS - r300->cs->cdw;
 
         short_count = MIN2(count, (free_dwords - end_cs_dwords - 6) * 2);
 
index 8a69628c53e2866ddab293855943594b63df21cf..9ec16c6562feebed9894b74ae2ba3f1ea4099d1d 100644 (file)
@@ -30,7 +30,6 @@
 #include "r300_texture.h"
 #include "r300_screen_buffer.h"
 #include "r300_state_inlines.h"
-#include "r300_winsys.h"
 #include "r300_public.h"
 
 #include "draw/draw_context.h"
@@ -114,9 +113,12 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
         case PIPE_CAP_TEXTURE_MIRROR_REPEAT:
         case PIPE_CAP_BLEND_EQUATION_SEPARATE:
         case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
-            return 1;
+        case PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL:
+            return is_r500 ? 1 : 0;
         case PIPE_CAP_TEXTURE_SWIZZLE:
             return util_format_s3tc_enabled ? r300screen->caps.dxtc_swizzle : 1;
+        case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
+            return is_r500 ? 1 : 0;
 
         /* Unsupported features (boolean caps). */
         case PIPE_CAP_TIMER_QUERY:
@@ -127,12 +129,12 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
         case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE:
         case PIPE_CAP_SHADER_STENCIL_EXPORT:
         case PIPE_CAP_ARRAY_TEXTURES:
+        case PIPE_CAP_TGSI_INSTANCEID:
             return 0;
 
         /* SWTCL-only features. */
         case PIPE_CAP_STREAM_OUTPUT:
         case PIPE_CAP_PRIMITIVE_RESTART:
-        case PIPE_CAP_TGSI_INSTANCEID:
             return !r300screen->caps.has_tcl;
 
         /* Texturing. */
@@ -209,7 +211,7 @@ static int r300_get_shader_param(struct pipe_screen *pscreen, unsigned shader, e
         case PIPE_SHADER_CAP_MAX_PREDS:
             return is_r500 ? 1 : 0;
         case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
-            return 1;
+            return 0;
         case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
         case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
         case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
@@ -247,7 +249,7 @@ static int r300_get_shader_param(struct pipe_screen *pscreen, unsigned shader, e
         case PIPE_SHADER_CAP_MAX_PREDS:
             return is_r500 ? 4 : 0; /* XXX guessed. */
         case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
-            return 1;
+            return 0;
         case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
         case PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR:
         case PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR:
@@ -308,9 +310,9 @@ static boolean r300_is_format_supported(struct pipe_screen* screen,
                                         unsigned sample_count,
                                         unsigned usage)
 {
-    struct r300_winsys_screen *rws = r300_screen(screen)->rws;
+    struct radeon_winsys *rws = r300_screen(screen)->rws;
     uint32_t retval = 0;
-    boolean drm_2_8_0 = rws->get_value(rws, R300_VID_DRM_2_8_0);
+    boolean drm_2_8_0 = rws->get_value(rws, RADEON_VID_DRM_2_8_0);
     boolean is_r500 = r300_screen(screen)->caps.is_r500;
     boolean is_r400 = r300_screen(screen)->caps.is_r400;
     boolean is_color2101010 = format == PIPE_FORMAT_R10G10B10A2_UNORM ||
@@ -325,11 +327,20 @@ static boolean r300_is_format_supported(struct pipe_screen* screen,
                        format == PIPE_FORMAT_RGTC2_SNORM ||
                        format == PIPE_FORMAT_LATC2_UNORM ||
                        format == PIPE_FORMAT_LATC2_SNORM;
+    boolean is_x16f_xy16f = format == PIPE_FORMAT_R16_FLOAT ||
+                            format == PIPE_FORMAT_R16G16_FLOAT ||
+                            format == PIPE_FORMAT_A16_FLOAT ||
+                            format == PIPE_FORMAT_L16_FLOAT ||
+                            format == PIPE_FORMAT_L16A16_FLOAT ||
+                            format == PIPE_FORMAT_I16_FLOAT;
     boolean is_half_float = format == PIPE_FORMAT_R16_FLOAT ||
                             format == PIPE_FORMAT_R16G16_FLOAT ||
                             format == PIPE_FORMAT_R16G16B16_FLOAT ||
                             format == PIPE_FORMAT_R16G16B16A16_FLOAT;
 
+    if (!util_format_is_supported(format, usage))
+       return FALSE;
+
     /* Check multisampling support. */
     switch (sample_count) {
         case 0:
@@ -358,6 +369,8 @@ static boolean r300_is_format_supported(struct pipe_screen* screen,
         (is_r500 || !is_ati1n) &&
         /* ATI2N is supported on r4xx-r5xx. */
         (is_r400 || is_r500 || !is_ati2n) &&
+        /* R16F and RG16F texture support was added in as late as DRM 2.8.0 */
+        (drm_2_8_0 || !is_x16f_xy16f) &&
         r300_is_sampler_format_supported(format)) {
         retval |= PIPE_BIND_SAMPLER_VIEW;
     }
@@ -403,7 +416,7 @@ static boolean r300_is_format_supported(struct pipe_screen* screen,
 static void r300_destroy_screen(struct pipe_screen* pscreen)
 {
     struct r300_screen* r300screen = r300_screen(pscreen);
-    struct r300_winsys_screen *rws = r300_winsys_screen(pscreen);
+    struct radeon_winsys *rws = radeon_winsys(pscreen);
 
     util_slab_destroy(&r300screen->pool_buffers);
     pipe_mutex_destroy(r300screen->num_contexts_mutex);
@@ -418,15 +431,15 @@ static void r300_fence_reference(struct pipe_screen *screen,
                                  struct pipe_fence_handle **ptr,
                                  struct pipe_fence_handle *fence)
 {
-    r300_winsys_bo_reference((struct r300_winsys_bo**)ptr,
-                             (struct r300_winsys_bo*)fence);
+    pb_reference((struct pb_buffer**)ptr,
+                             (struct pb_buffer*)fence);
 }
 
 static boolean r300_fence_signalled(struct pipe_screen *screen,
                                     struct pipe_fence_handle *fence)
 {
-    struct r300_winsys_screen *rws = r300_screen(screen)->rws;
-    struct r300_winsys_bo *rfence = (struct r300_winsys_bo*)fence;
+    struct radeon_winsys *rws = r300_screen(screen)->rws;
+    struct pb_buffer *rfence = (struct pb_buffer*)fence;
 
     return !rws->buffer_is_busy(rfence);
 }
@@ -435,8 +448,8 @@ static boolean r300_fence_finish(struct pipe_screen *screen,
                                  struct pipe_fence_handle *fence,
                                  uint64_t timeout)
 {
-    struct r300_winsys_screen *rws = r300_screen(screen)->rws;
-    struct r300_winsys_bo *rfence = (struct r300_winsys_bo*)fence;
+    struct radeon_winsys *rws = r300_screen(screen)->rws;
+    struct pb_buffer *rfence = (struct pb_buffer*)fence;
 
     if (timeout != PIPE_TIMEOUT_INFINITE) {
         int64_t start_time = os_time_get();
@@ -458,7 +471,7 @@ static boolean r300_fence_finish(struct pipe_screen *screen,
     return TRUE;
 }
 
-struct pipe_screen* r300_screen_create(struct r300_winsys_screen *rws)
+struct pipe_screen* r300_screen_create(struct radeon_winsys *rws)
 {
     struct r300_screen *r300screen = CALLOC_STRUCT(r300_screen);
 
@@ -467,9 +480,9 @@ struct pipe_screen* r300_screen_create(struct r300_winsys_screen *rws)
         return NULL;
     }
 
-    r300screen->caps.pci_id = rws->get_value(rws, R300_VID_PCI_ID);
-    r300screen->caps.num_frag_pipes = rws->get_value(rws, R300_VID_GB_PIPES);
-    r300screen->caps.num_z_pipes = rws->get_value(rws, R300_VID_Z_PIPES);
+    r300screen->caps.pci_id = rws->get_value(rws, RADEON_VID_PCI_ID);
+    r300screen->caps.num_frag_pipes = rws->get_value(rws, RADEON_VID_R300_GB_PIPES);
+    r300screen->caps.num_z_pipes = rws->get_value(rws, RADEON_VID_R300_Z_PIPES);
 
     r300_init_debug(r300screen);
     r300_parse_chipset(&r300screen->caps);
@@ -479,6 +492,9 @@ struct pipe_screen* r300_screen_create(struct r300_winsys_screen *rws)
     if (SCREEN_DBG_ON(r300screen, DBG_NO_HIZ))
         r300screen->caps.hiz_ram = 0;
 
+    if (!rws->get_value(rws, RADEON_VID_DRM_2_8_0))
+        r300screen->caps.has_us_format = FALSE;
+
     pipe_mutex_init(r300screen->num_contexts_mutex);
 
     util_slab_create(&r300screen->pool_buffers,
index 576f9c1f4a96e65595b3ba35048b21fee03bb2d9..bca86edb1d78f35b24d97344e35e914e07691741 100644 (file)
 
 #include <stdio.h>
 
-struct r300_winsys_screen;
+struct radeon_winsys;
 
 struct r300_screen {
     /* Parent class */
     struct pipe_screen screen;
 
-    struct r300_winsys_screen *rws;
+    struct radeon_winsys *rws;
 
     /* Chipset capabilities */
     struct r300_capabilities caps;
@@ -61,8 +61,8 @@ static INLINE struct r300_screen* r300_screen(struct pipe_screen* screen) {
     return (struct r300_screen*)screen;
 }
 
-static INLINE struct r300_winsys_screen *
-r300_winsys_screen(struct pipe_screen *screen) {
+static INLINE struct radeon_winsys *
+radeon_winsys(struct pipe_screen *screen) {
     return r300_screen(screen)->rws;
 }
 
index 986ae384fbf9774e6fba100082e071bc67c532d1..4154c81512ee37e63ccf6cfd770f64ba7987e464 100644 (file)
@@ -31,7 +31,6 @@
 #include "util/u_math.h"
 
 #include "r300_screen_buffer.h"
-#include "r300_winsys.h"
 
 void r300_upload_index_buffer(struct r300_context *r300,
                              struct pipe_resource **index_buffer,
@@ -62,7 +61,7 @@ static void r300_buffer_destroy(struct pipe_screen *screen,
         FREE(rbuf->constant_buffer);
 
     if (rbuf->buf)
-        r300_winsys_bo_reference(&rbuf->buf, NULL);
+        pb_reference(&rbuf->buf, NULL);
 
     util_slab_free(&r300screen->pool_buffers, rbuf);
 }
@@ -105,7 +104,7 @@ r300_buffer_transfer_map( struct pipe_context *pipe,
 {
     struct r300_context *r300 = r300_context(pipe);
     struct r300_screen *r300screen = r300_screen(pipe->screen);
-    struct r300_winsys_screen *rws = r300screen->rws;
+    struct radeon_winsys *rws = r300screen->rws;
     struct r300_resource *rbuf = r300_resource(transfer->resource);
     uint8_t *map;
 
@@ -126,7 +125,7 @@ static void r300_buffer_transfer_unmap( struct pipe_context *pipe,
                            struct pipe_transfer *transfer )
 {
     struct r300_screen *r300screen = r300_screen(pipe->screen);
-    struct r300_winsys_screen *rws = r300screen->rws;
+    struct radeon_winsys *rws = r300screen->rws;
     struct r300_resource *rbuf = r300_resource(transfer->resource);
 
     if (rbuf->buf) {
@@ -144,7 +143,7 @@ static void r300_buffer_transfer_inline_write(struct pipe_context *pipe,
                                               unsigned layer_stride)
 {
     struct r300_context *r300 = r300_context(pipe);
-    struct r300_winsys_screen *rws = r300->screen->rws;
+    struct radeon_winsys *rws = r300->screen->rws;
     struct r300_resource *rbuf = r300_resource(resource);
     uint8_t *map = NULL;
 
@@ -188,7 +187,7 @@ struct pipe_resource *r300_buffer_create(struct pipe_screen *screen,
     pipe_reference_init(&rbuf->b.b.b.reference, 1);
     rbuf->b.b.b.screen = screen;
     rbuf->b.user_ptr = NULL;
-    rbuf->domain = R300_DOMAIN_GTT;
+    rbuf->domain = RADEON_DOMAIN_GTT;
     rbuf->buf = NULL;
     rbuf->buf_size = templ->width0;
     rbuf->constant_buffer = NULL;
@@ -237,7 +236,7 @@ struct pipe_resource *r300_user_buffer_create(struct pipe_screen *screen,
     rbuf->b.b.b.flags = 0;
     rbuf->b.b.vtbl = &r300_buffer_vtbl;
     rbuf->b.user_ptr = ptr;
-    rbuf->domain = R300_DOMAIN_GTT;
+    rbuf->domain = RADEON_DOMAIN_GTT;
     rbuf->buf = NULL;
     rbuf->buf_size = size;
     rbuf->constant_buffer = NULL;
index cdbc4425fcb2ffb33bcebcf888c80ad4d33f96fe..360ec509cc53d645b6f9259af3d2dfe7f7fa15b7 100644 (file)
@@ -32,7 +32,6 @@
 #include "util/u_transfer.h"
 
 #include "r300_screen.h"
-#include "r300_winsys.h"
 #include "r300_context.h"
 
 /* Functions. */
index ecb4fc691cc8ff0355f20d2c54c87e0d283e8c42..24b41d5085d039061a1c783a78899b2daa1f0225 100644 (file)
@@ -45,7 +45,6 @@
 #include "r300_fs.h"
 #include "r300_texture.h"
 #include "r300_vs.h"
-#include "r300_winsys.h"
 
 /* r300_state: Functions used to intialize state context by translating
  * Gallium state objects into semi-native r300 state objects. */
@@ -398,10 +397,6 @@ static void r300_bind_blend_state(struct pipe_context* pipe,
     struct r300_context* r300 = r300_context(pipe);
 
     UPDATE_STATE(state, r300->blend_state);
-
-    if (r300->fs.state && r300_pick_fragment_shader(r300)) {
-        r300_mark_fs_code_dirty(r300);
-    }
 }
 
 /* Free blend state. */
@@ -773,7 +768,7 @@ void r300_mark_fb_state_dirty(struct r300_context *r300,
                               enum r300_fb_state_change change)
 {
     struct pipe_framebuffer_state *state = r300->fb_state.state;
-    boolean can_hyperz = r300->rws->get_value(r300->rws, R300_CAN_HYPERZ);
+    boolean can_hyperz = r300->rws->get_value(r300->rws, RADEON_VID_CAN_HYPERZ);
 
     r300_mark_atom_dirty(r300, &r300->gpu_flush);
     r300_mark_atom_dirty(r300, &r300->fb_state);
@@ -860,6 +855,7 @@ r300_set_framebuffer_state(struct pipe_context* pipe,
             }
         }
     }
+    assert(state->zsbuf || r300->hyperz_locked || !r300->zmask_in_use);
 
     /* Need to reset clamping or colormask. */
     r300_mark_atom_dirty(r300, &r300->blend_state);
@@ -973,24 +969,14 @@ static void r300_bind_fs_state(struct pipe_context* pipe, void* shader)
 {
     struct r300_context* r300 = r300_context(pipe);
     struct r300_fragment_shader* fs = (struct r300_fragment_shader*)shader;
-    struct pipe_framebuffer_state *fb = r300->fb_state.state;
-    boolean last_multi_write;
 
     if (fs == NULL) {
         r300->fs.state = NULL;
         return;
     }
 
-    last_multi_write = r300_fragment_shader_writes_all(r300_fs(r300));
-
     r300->fs.state = fs;
-    r300_pick_fragment_shader(r300);
-    r300_mark_fs_code_dirty(r300);
-
-    if (fb->nr_cbufs > 1 &&
-        last_multi_write != r300_fragment_shader_writes_all(fs)) {
-        r300_mark_fb_state_dirty(r300, R300_CHANGED_MULTIWRITE);
-    }
+    r300->fs_status = FRAGMENT_SHADER_DIRTY;
 
     r300_mark_atom_dirty(r300, &r300->rs_block_state); /* Will be updated before the emission. */
 }
@@ -1047,7 +1033,7 @@ static void* r300_create_rs_state(struct pipe_context* pipe,
     float point_texcoord_bottom = 0;/* R300_GA_POINT_T0: 0x4204 */
     float point_texcoord_right = 1; /* R300_GA_POINT_S1: 0x4208 */
     float point_texcoord_top = 0;   /* R300_GA_POINT_T1: 0x420c */
-    boolean vclamp = TRUE;
+    boolean vclamp = state->clamp_vertex_color;
     CB_LOCALS;
 
     /* Copy rasterizer state. */
@@ -1233,6 +1219,7 @@ static void r300_bind_rs_state(struct pipe_context* pipe, void* state)
     struct r300_rs_state* rs = (struct r300_rs_state*)state;
     int last_sprite_coord_enable = r300->sprite_coord_enable;
     boolean last_two_sided_color = r300->two_sided_color;
+    boolean last_frag_clamp = r300->frag_clamp;
 
     if (r300->draw && rs) {
         draw_set_rasterizer_state(r300->draw, &rs->rs_draw, state);
@@ -1242,10 +1229,12 @@ static void r300_bind_rs_state(struct pipe_context* pipe, void* state)
         r300->polygon_offset_enabled = rs->polygon_offset_enable;
         r300->sprite_coord_enable = rs->rs.sprite_coord_enable;
         r300->two_sided_color = rs->rs.light_twoside;
+        r300->frag_clamp = rs->rs.clamp_fragment_color;
     } else {
         r300->polygon_offset_enabled = FALSE;
         r300->sprite_coord_enable = 0;
         r300->two_sided_color = FALSE;
+        r300->frag_clamp = FALSE;
     }
 
     UPDATE_STATE(state, r300->rs_state);
@@ -1255,6 +1244,11 @@ static void r300_bind_rs_state(struct pipe_context* pipe, void* state)
         last_two_sided_color != r300->two_sided_color) {
         r300_mark_atom_dirty(r300, &r300->rs_block_state);
     }
+
+    if (last_frag_clamp != r300->frag_clamp &&
+        r300->fs_status == FRAGMENT_SHADER_VALID) {
+        r300->fs_status = FRAGMENT_SHADER_MAYBE_DIRTY;
+    }
 }
 
 /* Free rasterizer state. */
@@ -1551,7 +1545,8 @@ static void r300_set_viewport_state(struct pipe_context* pipe,
     }
 
     r300_mark_atom_dirty(r300, &r300->viewport_state);
-    if (r300->fs.state && r300_fs(r300)->shader->inputs.wpos != ATTR_UNUSED) {
+    if (r300->fs.state && r300_fs(r300)->shader &&
+        r300_fs(r300)->shader->inputs.wpos != ATTR_UNUSED) {
         r300_mark_atom_dirty(r300, &r300->fs_rc_constant_state);
     }
 }
index ec00e2552ca6a7a2cc24b780ccf5871d093fb85c..afc1451183d63e5e494de0533e710af857bda8fb 100644 (file)
@@ -592,6 +592,13 @@ static void r300_update_rs_block(struct r300_context *r300)
     }
 }
 
+static void rgba_to_bgra(float color[4])
+{
+    float x = color[0];
+    color[0] = color[2];
+    color[2] = x;
+}
+
 static uint32_t r300_get_border_color(enum pipe_format format,
                                       const float border[4],
                                       boolean is_r500)
@@ -625,13 +632,13 @@ static uint32_t r300_get_border_color(enum pipe_format format,
     for (i = 0; i < 4; i++) {
         switch (desc->swizzle[i]) {
         case UTIL_FORMAT_SWIZZLE_X:
-            border_swizzled[2] = border[i];
+            border_swizzled[0] = border[i];
             break;
         case UTIL_FORMAT_SWIZZLE_Y:
             border_swizzled[1] = border[i];
             break;
         case UTIL_FORMAT_SWIZZLE_Z:
-            border_swizzled[0] = border[i];
+            border_swizzled[2] = border[i];
             break;
         case UTIL_FORMAT_SWIZZLE_W:
             border_swizzled[3] = border[i];
@@ -643,39 +650,46 @@ static uint32_t r300_get_border_color(enum pipe_format format,
     if (util_format_is_compressed(format)) {
         switch (format) {
         case PIPE_FORMAT_RGTC1_SNORM:
-        case PIPE_FORMAT_RGTC1_UNORM:
         case PIPE_FORMAT_LATC1_SNORM:
+            border_swizzled[0] = border_swizzled[0] < 0 ?
+                                 border_swizzled[0]*0.5+1 :
+                                 border_swizzled[0]*0.5;
+            /* Pass through. */
+
+        case PIPE_FORMAT_RGTC1_UNORM:
         case PIPE_FORMAT_LATC1_UNORM:
             /* Add 1/32 to round the border color instead of truncating. */
             /* The Y component is used for the border color. */
-            border_swizzled[1] = border_swizzled[2] + 1.0f/32;
+            border_swizzled[1] = border_swizzled[0] + 1.0f/32;
             util_pack_color(border_swizzled, PIPE_FORMAT_B4G4R4A4_UNORM, &uc);
             return uc.ui;
         case PIPE_FORMAT_RGTC2_SNORM:
         case PIPE_FORMAT_LATC2_SNORM:
-            border_swizzled[0] = border_swizzled[2];
             util_pack_color(border_swizzled, PIPE_FORMAT_R8G8B8A8_SNORM, &uc);
             return uc.ui;
         case PIPE_FORMAT_RGTC2_UNORM:
         case PIPE_FORMAT_LATC2_UNORM:
-            util_pack_color(border_swizzled, PIPE_FORMAT_B8G8R8A8_UNORM, &uc);
+            util_pack_color(border_swizzled, PIPE_FORMAT_R8G8B8A8_UNORM, &uc);
             return uc.ui;
         default:
-            util_pack_color(border_swizzled, PIPE_FORMAT_R8G8B8A8_UNORM, &uc);
+            util_pack_color(border_swizzled, PIPE_FORMAT_B8G8R8A8_UNORM, &uc);
             return uc.ui;
         }
     }
 
     switch (desc->channel[0].size) {
         case 2:
+            rgba_to_bgra(border_swizzled);
             util_pack_color(border_swizzled, PIPE_FORMAT_B2G3R3_UNORM, &uc);
             break;
 
         case 4:
+            rgba_to_bgra(border_swizzled);
             util_pack_color(border_swizzled, PIPE_FORMAT_B4G4R4A4_UNORM, &uc);
             break;
 
         case 5:
+            rgba_to_bgra(border_swizzled);
             if (desc->channel[1].size == 5) {
                 util_pack_color(border_swizzled, PIPE_FORMAT_B5G5R5A1_UNORM, &uc);
             } else if (desc->channel[1].size == 6) {
@@ -687,32 +701,39 @@ static uint32_t r300_get_border_color(enum pipe_format format,
 
         default:
         case 8:
-            util_pack_color(border_swizzled, PIPE_FORMAT_B8G8R8A8_UNORM, &uc);
+            if (desc->channel[0].type == UTIL_FORMAT_TYPE_SIGNED)
+               util_pack_color(border_swizzled, PIPE_FORMAT_R8G8B8A8_SNORM, &uc);
+            else
+               util_pack_color(border_swizzled, PIPE_FORMAT_R8G8B8A8_UNORM, &uc);
             break;
 
         case 10:
-            util_pack_color(border_swizzled, PIPE_FORMAT_B10G10R10A2_UNORM, &uc);
+            util_pack_color(border_swizzled, PIPE_FORMAT_R10G10B10A2_UNORM, &uc);
             break;
 
         case 16:
             if (desc->nr_channels <= 2) {
-                border_swizzled[0] = border_swizzled[2];
                 if (desc->channel[0].type == UTIL_FORMAT_TYPE_FLOAT) {
                     util_pack_color(border_swizzled, PIPE_FORMAT_R16G16_FLOAT, &uc);
+                } else if (desc->channel[0].type == UTIL_FORMAT_TYPE_SIGNED) {
+                    util_pack_color(border_swizzled, PIPE_FORMAT_R16G16_SNORM, &uc);
                 } else {
                     util_pack_color(border_swizzled, PIPE_FORMAT_R16G16_UNORM, &uc);
                 }
             } else {
-                util_pack_color(border_swizzled, PIPE_FORMAT_B8G8R8A8_UNORM, &uc);
+                if (desc->channel[0].type == UTIL_FORMAT_TYPE_SIGNED) {
+                    util_pack_color(border_swizzled, PIPE_FORMAT_R8G8B8A8_SNORM, &uc);
+                } else {
+                    util_pack_color(border_swizzled, PIPE_FORMAT_R8G8B8A8_UNORM, &uc);
+                }
             }
             break;
 
         case 32:
             if (desc->nr_channels == 1) {
-                border_swizzled[0] = border_swizzled[2];
                 util_pack_color(border_swizzled, PIPE_FORMAT_R32_FLOAT, &uc);
             } else {
-                util_pack_color(border_swizzled, PIPE_FORMAT_B8G8R8A8_UNORM, &uc);
+                util_pack_color(border_swizzled, PIPE_FORMAT_R8G8B8A8_UNORM, &uc);
             }
             break;
     }
@@ -720,25 +741,6 @@ static uint32_t r300_get_border_color(enum pipe_format format,
     return uc.ui;
 }
 
-static boolean util_format_is_float(enum pipe_format format)
-{
-    const struct util_format_description *desc = util_format_description(format);
-    unsigned i;
-
-    if (!format)
-       return FALSE;
-
-    /* Find the first non-void channel. */
-    for (i = 0; i < 4; i++)
-        if (desc->channel[i].type != UTIL_FORMAT_TYPE_VOID)
-            break;
-
-    if (i == 4)
-        return FALSE;
-
-    return desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT ? TRUE : FALSE;
-}
-
 static void r300_merge_textures_and_samplers(struct r300_context* r300)
 {
     struct r300_textures_state *state =
@@ -747,9 +749,10 @@ static void r300_merge_textures_and_samplers(struct r300_context* r300)
     struct r300_sampler_state *sampler;
     struct r300_sampler_view *view;
     struct r300_resource *tex;
-    unsigned min_level, max_level, i, j, size;
+    unsigned base_level, min_level, level_count, i, j, size;
     unsigned count = MIN2(state->sampler_view_count,
                           state->sampler_state_count);
+    boolean has_us_format = r300->screen->caps.has_us_format;
 
     /* The KIL opcode fix, see below. */
     if (!count && !r300->screen->caps.is_r500)
@@ -779,21 +782,27 @@ static void r300_merge_textures_and_samplers(struct r300_context* r300)
                                       r300->screen->caps.is_r500);
 
             /* determine min/max levels */
-            max_level = MIN3(sampler->max_lod + view->base.u.tex.first_level,
-                             tex->b.b.b.last_level, view->base.u.tex.last_level);
-            min_level = MIN2(sampler->min_lod + view->base.u.tex.first_level,
-                             max_level);
-
-            if (tex->tex.is_npot && min_level > 0) {
-                /* Even though we do not implement mipmapping for NPOT
-                 * textures, we should at least honor the minimum level
-                 * which is allowed to be displayed. We do this by setting up
-                 * the i-th mipmap level as the zero level. */
-                unsigned offset = tex->tex_offset +
-                                  tex->tex.offset_in_bytes[min_level];
+            base_level = view->base.u.tex.first_level;
+            min_level = sampler->min_lod;
+            level_count = MIN3(sampler->max_lod,
+                               tex->b.b.b.last_level - base_level,
+                               view->base.u.tex.last_level - base_level);
+
+            if (base_level + min_level) {
+                unsigned offset;
+
+                if (tex->tex.is_npot) {
+                    /* Even though we do not implement mipmapping for NPOT
+                     * textures, we should at least honor the minimum level
+                     * which is allowed to be displayed. We do this by setting up
+                     * an i-th mipmap level as the zero level. */
+                    base_level += min_level;
+                }
+                offset = tex->tex_offset +
+                         tex->tex.offset_in_bytes[base_level];
 
                 r300_texture_setup_format_state(r300->screen, tex,
-                                                min_level,
+                                                base_level,
                                                 &texstate->format);
                 texstate->format.tile_config |= offset & 0xffffffe0;
                 assert((offset & 0x1f) == 0);
@@ -870,7 +879,7 @@ static void r300_merge_textures_and_samplers(struct r300_context* r300)
                 }
             } else {
                 /* the MAX_MIP level is the largest (finest) one */
-                texstate->format.format0 |= R300_TX_NUM_LEVELS(max_level);
+                texstate->format.format0 |= R300_TX_NUM_LEVELS(level_count);
                 texstate->filter0 |= R300_TX_MAX_MIP_LEVEL(min_level);
             }
 
@@ -902,7 +911,7 @@ static void r300_merge_textures_and_samplers(struct r300_context* r300)
 
             texstate->filter0 |= i << 28;
 
-            size += 16;
+            size += 16 + (has_us_format ? 2 : 0);
             state->count = i+1;
         } else {
             /* For the KIL opcode to work on r3xx-r4xx, the texture unit
@@ -931,7 +940,7 @@ static void r300_merge_textures_and_samplers(struct r300_context* r300)
                 texstate->border_color = 0;
 
                 texstate->filter0 |= i << 28;
-                size += 16;
+                size += 16 + (has_us_format ? 2 : 0);
                 state->count = i+1;
             }
         }
@@ -940,11 +949,10 @@ static void r300_merge_textures_and_samplers(struct r300_context* r300)
     r300->textures_state.size = size;
 
     /* Pick a fragment shader based on either the texture compare state
-     * or the uses_pitch flag. */
-    if (r300->fs.state && count) {
-        if (r300_pick_fragment_shader(r300)) {
-            r300_mark_fs_code_dirty(r300);
-        }
+     * or the uses_pitch flag or some other external state. */
+    if (count &&
+        r300->fs_status == FRAGMENT_SHADER_VALID) {
+        r300->fs_status = FRAGMENT_SHADER_MAYBE_DIRTY;
     }
 }
 
@@ -973,6 +981,34 @@ static void r300_decompress_depth_textures(struct r300_context *r300)
     }
 }
 
+static void r300_validate_fragment_shader(struct r300_context *r300)
+{
+    struct pipe_framebuffer_state *fb = r300->fb_state.state;
+
+    if (r300->fs.state && r300->fs_status != FRAGMENT_SHADER_VALID) {
+        /* Pick the fragment shader based on external states.
+         * Then mark the state dirty if the fragment shader is either dirty
+         * or the function r300_pick_fragment_shader changed the shader. */
+        if (r300_pick_fragment_shader(r300) ||
+            r300->fs_status == FRAGMENT_SHADER_DIRTY) {
+            /* Mark the state atom as dirty. */
+            r300_mark_fs_code_dirty(r300);
+
+            /* Does Multiwrite need to be changed? */
+            if (fb->nr_cbufs > 1) {
+                boolean new_multiwrite =
+                    r300_fragment_shader_writes_all(r300_fs(r300));
+
+                if (r300->fb_multiwrite != new_multiwrite) {
+                    r300->fb_multiwrite = new_multiwrite;
+                    r300_mark_fb_state_dirty(r300, R300_CHANGED_MULTIWRITE);
+                }
+            }
+        }
+        r300->fs_status = FRAGMENT_SHADER_VALID;
+    }
+}
+
 void r300_update_derived_state(struct r300_context* r300)
 {
     if (r300->textures_state.dirty) {
@@ -980,6 +1016,8 @@ void r300_update_derived_state(struct r300_context* r300)
         r300_merge_textures_and_samplers(r300);
     }
 
+    r300_validate_fragment_shader(r300);
+
     if (r300->rs_block_state.dirty) {
         r300_update_rs_block(r300);
 
index c650fb7ed3773709fd0c819475e7d8e527842d09..38ca9a24e45ec85a808060da58f64b1be3217278 100644 (file)
@@ -29,7 +29,6 @@
 #include "r300_texture_desc.h"
 #include "r300_transfer.h"
 #include "r300_screen.h"
-#include "r300_winsys.h"
 
 #include "util/u_format.h"
 #include "util/u_format_s3tc.h"
 
 #include "pipe/p_screen.h"
 
+void util_format_combine_swizzles(unsigned char *dst,
+                                  const unsigned char *swz1,
+                                  const unsigned char *swz2)
+{
+    unsigned i;
+
+    for (i = 0; i < 4; i++) {
+        dst[i] = swz2[i] <= UTIL_FORMAT_SWIZZLE_W ?
+                 swz1[swz2[i]] : swz2[i];
+    }
+}
+
 unsigned r300_get_swizzle_combined(const unsigned char *swizzle_format,
                                    const unsigned char *swizzle_view,
                                    boolean dxtc_swizzle)
@@ -61,10 +72,7 @@ unsigned r300_get_swizzle_combined(const unsigned char *swizzle_format,
 
     if (swizzle_view) {
         /* Combine two sets of swizzles. */
-        for (i = 0; i < 4; i++) {
-            swizzle[i] = swizzle_view[i] <= UTIL_FORMAT_SWIZZLE_W ?
-                         swizzle_format[swizzle_view[i]] : swizzle_view[i];
-        }
+        util_format_combine_swizzles(swizzle, swizzle_format, swizzle_view);
     } else {
         memcpy(swizzle, swizzle_format, 4);
     }
@@ -116,10 +124,10 @@ uint32_t r300_translate_texformat(enum pipe_format format,
     unsigned i;
     boolean uniform = TRUE;
     const uint32_t sign_bit[4] = {
-        R300_TX_FORMAT_SIGNED_X,
-        R300_TX_FORMAT_SIGNED_Y,
-        R300_TX_FORMAT_SIGNED_Z,
         R300_TX_FORMAT_SIGNED_W,
+        R300_TX_FORMAT_SIGNED_Z,
+        R300_TX_FORMAT_SIGNED_Y,
+        R300_TX_FORMAT_SIGNED_X,
     };
 
     desc = util_format_description(format);
@@ -171,17 +179,22 @@ uint32_t r300_translate_texformat(enum pipe_format format,
             }
     }
 
-    if (util_format_is_compressed(format) &&
-        dxtc_swizzle &&
-        format != PIPE_FORMAT_RGTC2_UNORM &&
-        format != PIPE_FORMAT_RGTC2_SNORM &&
-        format != PIPE_FORMAT_LATC2_UNORM &&
-        format != PIPE_FORMAT_LATC2_SNORM) {
-        result |= r300_get_swizzle_combined(desc->swizzle, swizzle_view,
-                                            TRUE);
-    } else {
-        result |= r300_get_swizzle_combined(desc->swizzle, swizzle_view,
-                                            FALSE);
+    /* Add swizzling. */
+    /* The RGTC1_SNORM and LATC1_SNORM swizzle is done in the shader. */
+    if (format != PIPE_FORMAT_RGTC1_SNORM &&
+        format != PIPE_FORMAT_LATC1_SNORM) {
+        if (util_format_is_compressed(format) &&
+            dxtc_swizzle &&
+            format != PIPE_FORMAT_RGTC2_UNORM &&
+            format != PIPE_FORMAT_RGTC2_SNORM &&
+            format != PIPE_FORMAT_LATC2_UNORM &&
+            format != PIPE_FORMAT_LATC2_SNORM) {
+            result |= r300_get_swizzle_combined(desc->swizzle, swizzle_view,
+                                                TRUE);
+        } else {
+            result |= r300_get_swizzle_combined(desc->swizzle, swizzle_view,
+                                                FALSE);
+        }
     }
 
     /* S3TC formats. */
@@ -212,14 +225,13 @@ uint32_t r300_translate_texformat(enum pipe_format format,
         switch (format) {
             case PIPE_FORMAT_RGTC1_SNORM:
             case PIPE_FORMAT_LATC1_SNORM:
-                result |= sign_bit[1];
             case PIPE_FORMAT_LATC1_UNORM:
             case PIPE_FORMAT_RGTC1_UNORM:
                 return R500_TX_FORMAT_ATI1N | result;
 
             case PIPE_FORMAT_RGTC2_SNORM:
             case PIPE_FORMAT_LATC2_SNORM:
-                result |= sign_bit[2] | sign_bit[3];
+                result |= sign_bit[1] | sign_bit[0];
             case PIPE_FORMAT_RGTC2_UNORM:
             case PIPE_FORMAT_LATC2_UNORM:
                 return R400_TX_FORMAT_ATI2N | result;
@@ -390,20 +402,33 @@ static uint32_t r300_translate_colorformat(enum pipe_format format)
     switch (format) {
         /* 8-bit buffers. */
         case PIPE_FORMAT_A8_UNORM:
-        /*case PIPE_FORMAT_A8_SNORM:*/
+        case PIPE_FORMAT_A8_SNORM:
         case PIPE_FORMAT_I8_UNORM:
-        /*case PIPE_FORMAT_I8_SNORM:*/
+        case PIPE_FORMAT_I8_SNORM:
         case PIPE_FORMAT_L8_UNORM:
-        /*case PIPE_FORMAT_L8_SNORM:*/
+        case PIPE_FORMAT_L8_SNORM:
         case PIPE_FORMAT_R8_UNORM:
         case PIPE_FORMAT_R8_SNORM:
             return R300_COLOR_FORMAT_I8;
 
         /* 16-bit buffers. */
         case PIPE_FORMAT_L8A8_UNORM:
-        /*case PIPE_FORMAT_L8A8_SNORM:*/
+        case PIPE_FORMAT_L8A8_SNORM:
         case PIPE_FORMAT_R8G8_UNORM:
         case PIPE_FORMAT_R8G8_SNORM:
+        /* These formats work fine with UV88 if US_OUT_FMT is set correctly. */
+        case PIPE_FORMAT_A16_UNORM:
+        case PIPE_FORMAT_A16_SNORM:
+        case PIPE_FORMAT_A16_FLOAT:
+        case PIPE_FORMAT_L16_UNORM:
+        case PIPE_FORMAT_L16_SNORM:
+        case PIPE_FORMAT_L16_FLOAT:
+        case PIPE_FORMAT_I16_UNORM:
+        case PIPE_FORMAT_I16_SNORM:
+        case PIPE_FORMAT_I16_FLOAT:
+        case PIPE_FORMAT_R16_UNORM:
+        case PIPE_FORMAT_R16_SNORM:
+        case PIPE_FORMAT_R16_FLOAT:
             return R300_COLOR_FORMAT_UV88;
 
         case PIPE_FORMAT_B5G6R5_UNORM:
@@ -434,19 +459,33 @@ static uint32_t r300_translate_colorformat(enum pipe_format format)
         /*case PIPE_FORMAT_X8B8G8R8_SNORM:*/
         case PIPE_FORMAT_R8G8B8X8_UNORM:
         /*case PIPE_FORMAT_R8G8B8X8_SNORM:*/
-        case PIPE_FORMAT_R8SG8SB8UX8U_NORM:
+        /* These formats work fine with ARGB8888 if US_OUT_FMT is set
+         * correctly. */
+        case PIPE_FORMAT_R16G16_UNORM:
+        case PIPE_FORMAT_R16G16_SNORM:
+        case PIPE_FORMAT_R16G16_FLOAT:
+        case PIPE_FORMAT_L16A16_UNORM:
+        case PIPE_FORMAT_L16A16_SNORM:
+        case PIPE_FORMAT_L16A16_FLOAT:
+        case PIPE_FORMAT_A32_FLOAT:
+        case PIPE_FORMAT_L32_FLOAT:
+        case PIPE_FORMAT_I32_FLOAT:
+        case PIPE_FORMAT_R32_FLOAT:
             return R300_COLOR_FORMAT_ARGB8888;
 
         case PIPE_FORMAT_R10G10B10A2_UNORM:
         case PIPE_FORMAT_R10G10B10X2_SNORM:
         case PIPE_FORMAT_B10G10R10A2_UNORM:
-        case PIPE_FORMAT_R10SG10SB10SA2U_NORM:
             return R500_COLOR_FORMAT_ARGB2101010;  /* R5xx-only? */
 
         /* 64-bit buffers. */
         case PIPE_FORMAT_R16G16B16A16_UNORM:
         case PIPE_FORMAT_R16G16B16A16_SNORM:
         case PIPE_FORMAT_R16G16B16A16_FLOAT:
+        /* These formats work fine with ARGB16161616 if US_OUT_FMT is set
+         * correctly. */
+        case PIPE_FORMAT_R32G32_FLOAT:
+        case PIPE_FORMAT_L32A32_FLOAT:
             return R300_COLOR_FORMAT_ARGB16161616;
 
         /* 128-bit buffers. */
@@ -489,12 +528,7 @@ static uint32_t r300_translate_out_fmt(enum pipe_format format)
     uint32_t modifier = 0;
     unsigned i;
     const struct util_format_description *desc;
-    static const uint32_t sign_bit[4] = {
-        R300_OUT_SIGN(0x1),
-        R300_OUT_SIGN(0x2),
-        R300_OUT_SIGN(0x4),
-        R300_OUT_SIGN(0x8),
-    };
+    boolean uniform_sign;
 
     desc = util_format_description(format);
 
@@ -509,54 +543,109 @@ static uint32_t r300_translate_out_fmt(enum pipe_format format)
         return ~0; /* Unsupported/unknown. */
 
     /* Specifies how the shader output is written to the fog unit. */
-    if (desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT) {
-        if (desc->channel[i].size == 32) {
-            modifier |= R300_US_OUT_FMT_C4_32_FP;
-        } else {
-            modifier |= R300_US_OUT_FMT_C4_16_FP;
+    switch (desc->channel[i].type) {
+    case UTIL_FORMAT_TYPE_FLOAT:
+        switch (desc->channel[i].size) {
+        case 32:
+            switch (desc->nr_channels) {
+            case 1:
+                modifier |= R300_US_OUT_FMT_C_32_FP;
+                break;
+            case 2:
+                modifier |= R300_US_OUT_FMT_C2_32_FP;
+                break;
+            case 4:
+                modifier |= R300_US_OUT_FMT_C4_32_FP;
+                break;
+            }
+            break;
+
+        case 16:
+            switch (desc->nr_channels) {
+            case 1:
+                modifier |= R300_US_OUT_FMT_C_16_FP;
+                break;
+            case 2:
+                modifier |= R300_US_OUT_FMT_C2_16_FP;
+                break;
+            case 4:
+                modifier |= R300_US_OUT_FMT_C4_16_FP;
+                break;
+            }
+            break;
         }
-    } else {
-        if (desc->channel[i].size == 16) {
-            modifier |= R300_US_OUT_FMT_C4_16;
-        } else if (desc->channel[i].size == 10) {
+        break;
+
+    default:
+        switch (desc->channel[i].size) {
+        case 16:
+            switch (desc->nr_channels) {
+            case 1:
+                modifier |= R300_US_OUT_FMT_C_16;
+                break;
+            case 2:
+                modifier |= R300_US_OUT_FMT_C2_16;
+                break;
+            case 4:
+                modifier |= R300_US_OUT_FMT_C4_16;
+                break;
+            }
+            break;
+
+        case 10:
             modifier |= R300_US_OUT_FMT_C4_10;
-        } else {
+            break;
+
+        default:
             /* C4_8 seems to be used for the formats whose pixel size
              * is <= 32 bits. */
             modifier |= R300_US_OUT_FMT_C4_8;
+            break;
         }
     }
 
     /* Add sign. */
-    for (i = 0; i < 4; i++)
-        if (desc->channel[i].type == UTIL_FORMAT_TYPE_SIGNED) {
-            modifier |= sign_bit[i];
-        }
+    uniform_sign = TRUE;
+    for (i = 0; i < desc->nr_channels; i++)
+        if (desc->channel[i].type != UTIL_FORMAT_TYPE_SIGNED)
+            uniform_sign = FALSE;
+
+    if (uniform_sign)
+        modifier |= R300_OUT_SIGN(0xf);
 
     /* Add swizzles and return. */
     switch (format) {
-        /* 8-bit outputs, one channel.
-         * COLORFORMAT_I8 stores the C2 component. */
+        /*** Special cases (non-standard channel mapping) ***/
+
+        /* X8
+         * COLORFORMAT_I8 stores the Z component (C2). */
         case PIPE_FORMAT_A8_UNORM:
-        /*case PIPE_FORMAT_A8_SNORM:*/
+        case PIPE_FORMAT_A8_SNORM:
             return modifier | R300_C2_SEL_A;
         case PIPE_FORMAT_I8_UNORM:
-        /*case PIPE_FORMAT_I8_SNORM:*/
+        case PIPE_FORMAT_I8_SNORM:
         case PIPE_FORMAT_L8_UNORM:
-        /*case PIPE_FORMAT_L8_SNORM:*/
+        case PIPE_FORMAT_L8_SNORM:
         case PIPE_FORMAT_R8_UNORM:
         case PIPE_FORMAT_R8_SNORM:
             return modifier | R300_C2_SEL_R;
 
-        /* 16-bit outputs, two channels.
-         * COLORFORMAT_UV88 stores C2 and C0. */
+        /* X8Y8
+         * COLORFORMAT_UV88 stores ZX (C2 and C0). */
+        case PIPE_FORMAT_L8A8_SNORM:
         case PIPE_FORMAT_L8A8_UNORM:
-        /*case PIPE_FORMAT_L8A8_SNORM:*/
             return modifier | R300_C0_SEL_A | R300_C2_SEL_R;
-        case PIPE_FORMAT_R8G8_UNORM:
         case PIPE_FORMAT_R8G8_SNORM:
+        case PIPE_FORMAT_R8G8_UNORM:
             return modifier | R300_C0_SEL_G | R300_C2_SEL_R;
 
+        /* X32Y32
+         * ARGB16161616 stores XZ for RG32F */
+        case PIPE_FORMAT_R32G32_FLOAT:
+            return modifier | R300_C0_SEL_R | R300_C2_SEL_G;
+
+        /*** Generic cases (standard channel mapping) ***/
+
         /* BGRA outputs. */
         case PIPE_FORMAT_B5G6R5_UNORM:
         case PIPE_FORMAT_B5G5R5A1_UNORM:
@@ -577,6 +666,10 @@ static uint32_t r300_translate_out_fmt(enum pipe_format format)
         /*case PIPE_FORMAT_A8R8G8B8_SNORM:*/
         case PIPE_FORMAT_X8R8G8B8_UNORM:
         /*case PIPE_FORMAT_X8R8G8B8_SNORM:*/
+        case PIPE_FORMAT_A16_UNORM:
+        case PIPE_FORMAT_A16_SNORM:
+        case PIPE_FORMAT_A16_FLOAT:
+        case PIPE_FORMAT_A32_FLOAT:
             return modifier |
                 R300_C0_SEL_A | R300_C1_SEL_R |
                 R300_C2_SEL_G | R300_C3_SEL_B;
@@ -595,18 +688,39 @@ static uint32_t r300_translate_out_fmt(enum pipe_format format)
         /*case PIPE_FORMAT_R8G8B8X8_SNORM:*/
         case PIPE_FORMAT_R8G8B8A8_UNORM:
         case PIPE_FORMAT_R8G8B8A8_SNORM:
-        case PIPE_FORMAT_R8SG8SB8UX8U_NORM:
         case PIPE_FORMAT_R10G10B10A2_UNORM:
         case PIPE_FORMAT_R10G10B10X2_SNORM:
-        case PIPE_FORMAT_R10SG10SB10SA2U_NORM:
+        case PIPE_FORMAT_R16_UNORM:
+        case PIPE_FORMAT_R16G16_UNORM:
         case PIPE_FORMAT_R16G16B16A16_UNORM:
+        case PIPE_FORMAT_R16_SNORM:
+        case PIPE_FORMAT_R16G16_SNORM:
         case PIPE_FORMAT_R16G16B16A16_SNORM:
+        case PIPE_FORMAT_R16_FLOAT:
+        case PIPE_FORMAT_R16G16_FLOAT:
         case PIPE_FORMAT_R16G16B16A16_FLOAT:
+        case PIPE_FORMAT_R32_FLOAT:
         case PIPE_FORMAT_R32G32B32A32_FLOAT:
+        case PIPE_FORMAT_L16_UNORM:
+        case PIPE_FORMAT_L16_SNORM:
+        case PIPE_FORMAT_L16_FLOAT:
+        case PIPE_FORMAT_L32_FLOAT:
+        case PIPE_FORMAT_I16_UNORM:
+        case PIPE_FORMAT_I16_SNORM:
+        case PIPE_FORMAT_I16_FLOAT:
+        case PIPE_FORMAT_I32_FLOAT:
             return modifier |
                 R300_C0_SEL_R | R300_C1_SEL_G |
                 R300_C2_SEL_B | R300_C3_SEL_A;
 
+        /* LA outputs. */
+        case PIPE_FORMAT_L16A16_UNORM:
+        case PIPE_FORMAT_L16A16_SNORM:
+        case PIPE_FORMAT_L16A16_FLOAT:
+        case PIPE_FORMAT_L32A32_FLOAT:
+            return modifier |
+                R300_C0_SEL_R | R300_C1_SEL_A;
+
         default:
             return ~0; /* Unsupported. */
     }
@@ -636,6 +750,16 @@ void r300_texture_setup_format_state(struct r300_screen *screen,
     struct pipe_resource *pt = &tex->b.b.b;
     struct r300_texture_desc *desc = &tex->tex;
     boolean is_r500 = screen->caps.is_r500;
+    unsigned width, height, depth;
+    unsigned txwidth, txheight, txdepth;
+
+    width = u_minify(desc->width0, level);
+    height = u_minify(desc->height0, level);
+    depth = u_minify(desc->depth0, level);
+
+    txwidth = (width - 1) & 0x7ff;
+    txheight = (height - 1) & 0x7ff;
+    txdepth = util_logbase2(depth) & 0xf;
 
     /* Mask out all the fields we change. */
     out->format0 = 0;
@@ -645,9 +769,9 @@ void r300_texture_setup_format_state(struct r300_screen *screen,
 
     /* Set sampler state. */
     out->format0 =
-        R300_TX_WIDTH((u_minify(desc->width0, level) - 1) & 0x7ff) |
-        R300_TX_HEIGHT((u_minify(desc->height0, level) - 1) & 0x7ff) |
-        R300_TX_DEPTH(util_logbase2(u_minify(desc->depth0, level)) & 0xf);
+        R300_TX_WIDTH(txwidth) |
+        R300_TX_HEIGHT(txheight) |
+        R300_TX_DEPTH(txdepth);
 
     if (desc->uses_stride_addressing) {
         /* rectangles love this */
@@ -665,12 +789,32 @@ void r300_texture_setup_format_state(struct r300_screen *screen,
     /* large textures on r500 */
     if (is_r500)
     {
-        if (desc->width0 > 2048) {
+        unsigned us_width = txwidth;
+        unsigned us_height = txheight;
+        unsigned us_depth = txdepth;
+
+        if (width > 2048) {
             out->format2 |= R500_TXWIDTH_BIT11;
         }
-        if (desc->height0 > 2048) {
+        if (height > 2048) {
             out->format2 |= R500_TXHEIGHT_BIT11;
         }
+
+        /* The US_FORMAT register fixes an R500 TX addressing bug.
+         * Don't ask why it must be set like this. I don't know it either. */
+        if (width > 2048) {
+            us_width = (0x000007FF + us_width) >> 1;
+            us_depth |= 0x0000000D;
+        }
+        if (height > 2048) {
+            us_height = (0x000007FF + us_height) >> 1;
+            us_depth |= 0x0000000E;
+        }
+
+        out->us_format0 =
+            R300_TX_WIDTH(us_width) |
+            R300_TX_HEIGHT(us_height) |
+            R300_TX_DEPTH(us_depth);
     }
 
     out->tile_config = R300_TXO_MACRO_TILE(desc->macrotile[level]) |
@@ -729,7 +873,7 @@ static void r300_texture_destroy(struct pipe_screen *screen,
 {
     struct r300_resource* tex = (struct r300_resource*)texture;
 
-    r300_winsys_bo_reference(&tex->buf, NULL);
+    pb_reference(&tex->buf, NULL);
     FREE(tex);
 }
 
@@ -737,7 +881,7 @@ boolean r300_resource_get_handle(struct pipe_screen* screen,
                                  struct pipe_resource *texture,
                                  struct winsys_handle *whandle)
 {
-    struct r300_winsys_screen *rws = (struct r300_winsys_screen *)screen->winsys;
+    struct radeon_winsys *rws = (struct radeon_winsys *)screen->winsys;
     struct r300_resource* tex = (struct r300_resource*)texture;
 
     if (!tex) {
@@ -764,17 +908,17 @@ static const struct u_resource_vtbl r300_texture_vtbl =
 static struct r300_resource*
 r300_texture_create_object(struct r300_screen *rscreen,
                            const struct pipe_resource *base,
-                           enum r300_buffer_tiling microtile,
-                           enum r300_buffer_tiling macrotile,
+                           enum radeon_bo_layout microtile,
+                           enum radeon_bo_layout macrotile,
                            unsigned stride_in_bytes_override,
                            unsigned max_buffer_size,
-                           struct r300_winsys_bo *buffer)
+                           struct pb_buffer *buffer)
 {
-    struct r300_winsys_screen *rws = rscreen->rws;
+    struct radeon_winsys *rws = rscreen->rws;
     struct r300_resource *tex = CALLOC_STRUCT(r300_resource);
     if (!tex) {
         if (buffer)
-            r300_winsys_bo_reference(&buffer, NULL);
+            pb_reference(&buffer, NULL);
         return NULL;
     }
 
@@ -788,13 +932,13 @@ r300_texture_create_object(struct r300_screen *rscreen,
     tex->tex.macrotile[0] = macrotile;
     tex->tex.stride_in_bytes_override = stride_in_bytes_override;
     tex->domain = base->flags & R300_RESOURCE_FLAG_TRANSFER ?
-                  R300_DOMAIN_GTT :
-                  R300_DOMAIN_VRAM | R300_DOMAIN_GTT;
+                  RADEON_DOMAIN_GTT :
+                  RADEON_DOMAIN_VRAM | RADEON_DOMAIN_GTT;
     tex->buf_size = max_buffer_size;
 
     if (!r300_resource_set_properties(&rscreen->screen, &tex->b.b.b, 0, base)) {
         if (buffer)
-            r300_winsys_bo_reference(&buffer, NULL);
+            pb_reference(&buffer, NULL);
         FREE(tex);
         return NULL;
     }
@@ -827,15 +971,16 @@ struct pipe_resource *r300_texture_create(struct pipe_screen *screen,
                                           const struct pipe_resource *base)
 {
     struct r300_screen *rscreen = r300_screen(screen);
-    enum r300_buffer_tiling microtile, macrotile;
+    enum radeon_bo_layout microtile, macrotile;
 
     if ((base->flags & R300_RESOURCE_FLAG_TRANSFER) ||
         (base->bind & PIPE_BIND_SCANOUT)) {
-        microtile = R300_BUFFER_LINEAR;
-        macrotile = R300_BUFFER_LINEAR;
+        microtile = RADEON_LAYOUT_LINEAR;
+        macrotile = RADEON_LAYOUT_LINEAR;
     } else {
-        microtile = R300_BUFFER_SELECT_LAYOUT;
-        macrotile = R300_BUFFER_SELECT_LAYOUT;
+        /* This will make the texture_create_function select the layout. */
+        microtile = RADEON_LAYOUT_UNKNOWN;
+        macrotile = RADEON_LAYOUT_UNKNOWN;
     }
 
     return (struct pipe_resource*)
@@ -847,10 +992,10 @@ struct pipe_resource *r300_texture_from_handle(struct pipe_screen *screen,
                                                const struct pipe_resource *base,
                                                struct winsys_handle *whandle)
 {
-    struct r300_winsys_screen *rws = (struct r300_winsys_screen*)screen->winsys;
+    struct radeon_winsys *rws = (struct radeon_winsys*)screen->winsys;
     struct r300_screen *rscreen = r300_screen(screen);
-    struct r300_winsys_bo *buffer;
-    enum r300_buffer_tiling microtile, macrotile;
+    struct pb_buffer *buffer;
+    enum radeon_bo_layout microtile, macrotile;
     unsigned stride, size;
 
     /* Support only 2D textures without mipmaps */
@@ -869,14 +1014,14 @@ struct pipe_resource *r300_texture_from_handle(struct pipe_screen *screen,
 
     /* Enforce a microtiled zbuffer. */
     if (util_format_is_depth_or_stencil(base->format) &&
-        microtile == R300_BUFFER_LINEAR) {
+        microtile == RADEON_LAYOUT_LINEAR) {
         switch (util_format_get_blocksize(base->format)) {
             case 4:
-                microtile = R300_BUFFER_TILED;
+                microtile = RADEON_LAYOUT_TILED;
                 break;
 
             case 2:
-                microtile = R300_BUFFER_SQUARETILED;
+                microtile = RADEON_LAYOUT_SQUARETILED;
                 break;
         }
     }
@@ -917,8 +1062,8 @@ struct pipe_surface* r300_create_surface(struct pipe_context * ctx,
 
         /* Prefer VRAM if there are multiple domains to choose from. */
         surface->domain = tex->domain;
-        if (surface->domain & R300_DOMAIN_VRAM)
-            surface->domain &= ~R300_DOMAIN_GTT;
+        if (surface->domain & RADEON_DOMAIN_VRAM)
+            surface->domain &= ~RADEON_DOMAIN_GTT;
 
         surface->offset = r300_texture_get_offset(tex, level,
                                                   surf_tmpl->u.tex.first_layer);
index 158a387478ff377379174b8f64f75dd7f5a2d34d..4586bb2e4dc7420547550aa681a35139cc02d18b 100644 (file)
@@ -35,6 +35,10 @@ struct r300_texture_desc;
 struct r300_resource;
 struct r300_screen;
 
+void util_format_combine_swizzles(unsigned char *dst,
+                                  const unsigned char *swz1,
+                                  const unsigned char *swz2);
+
 unsigned r300_get_swizzle_combined(const unsigned char *swizzle_format,
                                    const unsigned char *swizzle_view,
                                    boolean dxtc_swizzle);
index 2910666dd512e745801a7f57d4e42eff99f56db7..da5778be65e36d3936e837aa14d18f4bdc415684 100644 (file)
@@ -22,9 +22,7 @@
  * USE OR OTHER DEALINGS IN THE SOFTWARE. */
 
 #include "r300_texture_desc.h"
-
 #include "r300_context.h"
-#include "r300_winsys.h"
 
 #include "util/u_format.h"
 
@@ -32,8 +30,8 @@
  * in the given dimension. */
 unsigned r300_get_pixel_alignment(enum pipe_format format,
                                   unsigned num_samples,
-                                  enum r300_buffer_tiling microtile,
-                                  enum r300_buffer_tiling macrotile,
+                                  enum radeon_bo_layout microtile,
+                                  enum radeon_bo_layout macrotile,
                                   enum r300_dim dim, boolean is_rs690)
 {
     static const unsigned table[2][5][3][2] =
@@ -62,8 +60,8 @@ unsigned r300_get_pixel_alignment(enum pipe_format format,
     unsigned tile = 0;
     unsigned pixsize = util_format_get_blocksize(format);
 
-    assert(macrotile <= R300_BUFFER_TILED);
-    assert(microtile <= R300_BUFFER_SQUARETILED);
+    assert(macrotile <= RADEON_LAYOUT_TILED);
+    assert(microtile <= RADEON_LAYOUT_SQUARETILED);
     assert(pixsize <= 16);
     assert(dim <= DIM_HEIGHT);
 
@@ -98,7 +96,7 @@ static boolean r300_texture_macro_switch(struct r300_resource *tex,
     unsigned tile, texdim;
 
     tile = r300_get_pixel_alignment(tex->b.b.b.format, tex->b.b.b.nr_samples,
-                                    tex->tex.microtile, R300_BUFFER_TILED, dim, 0);
+                                    tex->tex.microtile, RADEON_LAYOUT_TILED, dim, 0);
     if (dim == DIM_WIDTH) {
         texdim = u_minify(tex->tex.width0, level);
     } else {
@@ -233,10 +231,10 @@ static void r300_setup_miptree(struct r300_screen *screen,
     for (i = 0; i <= base->last_level; i++) {
         /* Let's see if this miplevel can be macrotiled. */
         tex->tex.macrotile[i] =
-            (tex->tex.macrotile[0] == R300_BUFFER_TILED &&
+            (tex->tex.macrotile[0] == RADEON_LAYOUT_TILED &&
              r300_texture_macro_switch(tex, i, rv350_mode, DIM_WIDTH) &&
              r300_texture_macro_switch(tex, i, rv350_mode, DIM_HEIGHT)) ?
-             R300_BUFFER_TILED : R300_BUFFER_LINEAR;
+             RADEON_LAYOUT_TILED : RADEON_LAYOUT_LINEAR;
 
         stride = r300_texture_get_stride(screen, tex, i);
 
@@ -424,8 +422,8 @@ static void r300_setup_tiling(struct r300_screen *screen,
     boolean is_zb = util_format_is_depth_or_stencil(format);
     boolean dbg_no_tiling = SCREEN_DBG_ON(screen, DBG_NO_TILING);
 
-    tex->tex.microtile = R300_BUFFER_LINEAR;
-    tex->tex.macrotile[0] = R300_BUFFER_LINEAR;
+    tex->tex.microtile = RADEON_LAYOUT_LINEAR;
+    tex->tex.macrotile[0] = RADEON_LAYOUT_LINEAR;
 
     if (!util_format_is_plain(format)) {
         return;
@@ -441,11 +439,11 @@ static void r300_setup_tiling(struct r300_screen *screen,
         case 1:
         case 4:
         case 8:
-            tex->tex.microtile = R300_BUFFER_TILED;
+            tex->tex.microtile = RADEON_LAYOUT_TILED;
             break;
 
         case 2:
-            tex->tex.microtile = R300_BUFFER_SQUARETILED;
+            tex->tex.microtile = RADEON_LAYOUT_SQUARETILED;
             break;
     }
 
@@ -456,7 +454,7 @@ static void r300_setup_tiling(struct r300_screen *screen,
     /* Set macrotiling. */
     if (r300_texture_macro_switch(tex, 0, rv350_mode, DIM_WIDTH) &&
         r300_texture_macro_switch(tex, 0, rv350_mode, DIM_HEIGHT)) {
-        tex->tex.macrotile[0] = R300_BUFFER_TILED;
+        tex->tex.macrotile[0] = RADEON_LAYOUT_TILED;
     }
 }
 
@@ -501,7 +499,7 @@ boolean r300_texture_desc_init(struct r300_screen *rscreen,
     }
 
     /* Setup tiling. */
-    if (tex->tex.microtile == R300_BUFFER_SELECT_LAYOUT) {
+    if (tex->tex.microtile == RADEON_LAYOUT_UNKNOWN) {
         r300_setup_tiling(rscreen, tex);
     }
 
index ce6e9643ec6ffe8a6de7fc942483e824bdbb6826..a84d6fae0ea75b310a35f1c0cea5ad3819f0bc28 100644 (file)
@@ -25,7 +25,7 @@
 #define R300_TEXTURE_DESC_H
 
 #include "pipe/p_format.h"
-#include "r300_defines.h"
+#include "r300_context.h"
 
 struct pipe_resource;
 struct r300_screen;
@@ -39,8 +39,8 @@ enum r300_dim {
 
 unsigned r300_get_pixel_alignment(enum pipe_format format,
                                   unsigned num_samples,
-                                  enum r300_buffer_tiling microtile,
-                                  enum r300_buffer_tiling macrotile,
+                                  enum radeon_bo_layout microtile,
+                                  enum radeon_bo_layout macrotile,
                                   enum r300_dim dim, boolean is_rs690);
 
 boolean r300_texture_desc_init(struct r300_screen *rscreen,
index 97ec0a1a1f20e5fdafc06daf5bedbdd2a52e7e72..6a000cfe2c6d435fd366cf30e6ed7d87d8b5da44 100644 (file)
@@ -52,8 +52,7 @@ static unsigned translate_opcode(unsigned opcode)
         case TGSI_OPCODE_MAD: return RC_OPCODE_MAD;
         case TGSI_OPCODE_SUB: return RC_OPCODE_SUB;
         case TGSI_OPCODE_LRP: return RC_OPCODE_LRP;
-     /* case TGSI_OPCODE_CND: return RC_OPCODE_CND; */
-     /* case TGSI_OPCODE_CND0: return RC_OPCODE_CND0; */
+        case TGSI_OPCODE_CND: return RC_OPCODE_CND;
      /* case TGSI_OPCODE_DP2A: return RC_OPCODE_DP2A; */
                                         /* gap */
         case TGSI_OPCODE_FRC: return RC_OPCODE_FRC;
index 65c5095be6aab36711c0eab36eb7d25781d23d35..e2ea4cbf6c5458aacbb7541ba97dcfdefb1c18b6 100644 (file)
@@ -226,7 +226,7 @@ void* r300_texture_transfer_map(struct pipe_context *ctx,
                                struct pipe_transfer *transfer)
 {
     struct r300_context *r300 = r300_context(ctx);
-    struct r300_winsys_screen *rws = (struct r300_winsys_screen *)ctx->winsys;
+    struct radeon_winsys *rws = (struct radeon_winsys *)ctx->winsys;
     struct r300_transfer *r300transfer = r300_transfer(transfer);
     struct r300_resource *tex = r300_resource(transfer->resource);
     char *map;
@@ -256,7 +256,7 @@ void* r300_texture_transfer_map(struct pipe_context *ctx,
 void r300_texture_transfer_unmap(struct pipe_context *ctx,
                                 struct pipe_transfer *transfer)
 {
-    struct r300_winsys_screen *rws = (struct r300_winsys_screen *)ctx->winsys;
+    struct radeon_winsys *rws = (struct radeon_winsys *)ctx->winsys;
     struct r300_transfer *r300transfer = r300_transfer(transfer);
     struct r300_resource *tex = r300_resource(transfer->resource);
 
diff --git a/src/gallium/drivers/r300/r300_winsys.h b/src/gallium/drivers/r300/r300_winsys.h
deleted file mode 100644 (file)
index 3a6798a..0000000
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Copyright 2008 Corbin Simpson <MostAwesomeDude@gmail.com>
- * Copyright 2010 Marek Olšák <maraeo@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
- * 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
- * THE AUTHOR(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. */
-
-#ifndef R300_WINSYS_H
-#define R300_WINSYS_H
-
-/* The public winsys interface header for the r300 pipe driver.
- * Any winsys hosting this pipe needs to implement r300_winsys_screen and then
- * call r300_screen_create to start things. */
-
-#include "r300_defines.h"
-
-#include "pipebuffer/pb_bufmgr.h"
-#include "pipe/p_defines.h"
-#include "pipe/p_state.h"
-
-#define R300_MAX_CMDBUF_DWORDS (16 * 1024)
-#define R300_FLUSH_ASYNC       (1 << 0)
-
-struct winsys_handle;
-struct r300_winsys_screen;
-
-#define r300_winsys_bo                      pb_buffer
-#define r300_winsys_bo_reference(pdst, src) pb_reference(pdst, src)
-
-struct r300_winsys_cs_handle;   /* for write_reloc etc. */
-
-struct r300_winsys_cs {
-    unsigned cdw;  /* Number of used dwords. */
-    uint32_t *buf; /* The command buffer. */
-};
-
-enum r300_value_id {
-    R300_VID_PCI_ID,
-    R300_VID_GB_PIPES,
-    R300_VID_Z_PIPES,
-    R300_VID_GART_SIZE,
-    R300_VID_VRAM_SIZE,
-    R300_VID_DRM_MAJOR,
-    R300_VID_DRM_MINOR,
-    R300_VID_DRM_PATCHLEVEL,
-
-    /* These should probably go away: */
-    R300_VID_DRM_2_6_0,  /* Hyper-Z, GB_Z_PEQ_CONFIG on rv350->r4xx, R500 FG_ALPHA_VALUE */
-    R300_VID_DRM_2_8_0,  /* R500 US_FORMAT regs, R500 ARGB2101010 colorbuffer, CMask, R16F/RG16F */
-
-    R300_CAN_HYPERZ,     /* ZMask + HiZ */
-    R300_CAN_AACOMPRESS, /* CMask */
-};
-
-struct r300_winsys_screen {
-    /**
-     * Destroy this winsys.
-     *
-     * \param ws        The winsys this function is called from.
-     */
-    void (*destroy)(struct r300_winsys_screen *ws);
-
-    /**
-     * Query a system value from a winsys.
-     *
-     * \param ws        The winsys this function is called from.
-     * \param vid       One of the R300_VID_* enums.
-     */
-    uint32_t (*get_value)(struct r300_winsys_screen *ws,
-                          enum r300_value_id vid);
-
-    /**************************************************************************
-     * Buffer management. Buffer attributes are mostly fixed over its lifetime.
-     *
-     * Remember that gallium gets to choose the interface it needs, and the
-     * window systems must then implement that interface (rather than the
-     * other way around...).
-     *************************************************************************/
-
-    /**
-     * Create a buffer object.
-     *
-     * \param ws        The winsys this function is called from.
-     * \param size      The size to allocate.
-     * \param alignment An alignment of the buffer in memory.
-     * \param bind      A bitmask of the PIPE_BIND_* flags.
-     * \param usage     A bitmask of the PIPE_USAGE_* flags.
-     * \param domain    A bitmask of the R300_DOMAIN_* flags.
-     * \return          The created buffer object.
-     */
-    struct r300_winsys_bo *(*buffer_create)(struct r300_winsys_screen *ws,
-                                                unsigned size,
-                                                unsigned alignment,
-                                                unsigned bind,
-                                                unsigned usage,
-                                                enum r300_buffer_domain domain);
-
-    struct r300_winsys_cs_handle *(*buffer_get_cs_handle)(
-            struct r300_winsys_bo *buf);
-
-    /**
-     * Map the entire data store of a buffer object into the client's address
-     * space.
-     *
-     * \param buf       A winsys buffer object to map.
-     * \param cs        A command stream to flush if the buffer is referenced by it.
-     * \param usage     A bitmask of the PIPE_TRANSFER_* flags.
-     * \return          The pointer at the beginning of the buffer.
-     */
-    void *(*buffer_map)(struct r300_winsys_bo *buf,
-                        struct r300_winsys_cs *cs,
-                        enum pipe_transfer_usage usage);
-
-    /**
-     * Unmap a buffer object from the client's address space.
-     *
-     * \param buf       A winsys buffer object to unmap.
-     */
-    void (*buffer_unmap)(struct r300_winsys_bo *buf);
-
-    /**
-     * Return TRUE if a buffer object is being used by the GPU.
-     *
-     * \param buf       A winsys buffer object.
-     */
-    boolean (*buffer_is_busy)(struct r300_winsys_bo *buf);
-
-    /**
-     * Wait for a buffer object until it is not used by a GPU. This is
-     * equivalent to a fence placed after the last command using the buffer,
-     * and synchronizing to the fence.
-     *
-     * \param buf       A winsys buffer object to wait for.
-     */
-    void (*buffer_wait)(struct r300_winsys_bo *buf);
-
-    /**
-     * Return tiling flags describing a memory layout of a buffer object.
-     *
-     * \param buf       A winsys buffer object to get the flags from.
-     * \param macrotile A pointer to the return value of the microtile flag.
-     * \param microtile A pointer to the return value of the macrotile flag.
-     *
-     * \note microtile and macrotile are not bitmasks!
-     */
-    void (*buffer_get_tiling)(struct r300_winsys_bo *buf,
-                              enum r300_buffer_tiling *microtile,
-                              enum r300_buffer_tiling *macrotile);
-
-    /**
-     * Set tiling flags describing a memory layout of a buffer object.
-     *
-     * \param buf       A winsys buffer object to set the flags for.
-     * \param cs        A command stream to flush if the buffer is referenced by it.
-     * \param macrotile A macrotile flag.
-     * \param microtile A microtile flag.
-     * \param stride    A stride of the buffer in bytes, for texturing.
-     *
-     * \note microtile and macrotile are not bitmasks!
-     */
-    void (*buffer_set_tiling)(struct r300_winsys_bo *buf,
-                              struct r300_winsys_cs *cs,
-                              enum r300_buffer_tiling microtile,
-                              enum r300_buffer_tiling macrotile,
-                              unsigned stride);
-
-    /**
-     * Get a winsys buffer from a winsys handle. The internal structure
-     * of the handle is platform-specific and only a winsys should access it.
-     *
-     * \param ws        The winsys this function is called from.
-     * \param whandle   A winsys handle pointer as was received from a state
-     *                  tracker.
-     * \param stride    The returned buffer stride in bytes.
-     * \param size      The returned buffer size.
-     */
-    struct r300_winsys_bo *(*buffer_from_handle)(struct r300_winsys_screen *ws,
-                                                     struct winsys_handle *whandle,
-                                                     unsigned *stride,
-                                                     unsigned *size);
-
-    /**
-     * Get a winsys handle from a winsys buffer. The internal structure
-     * of the handle is platform-specific and only a winsys should access it.
-     *
-     * \param buf       A winsys buffer object to get the handle from.
-     * \param whandle   A winsys handle pointer.
-     * \param stride    A stride of the buffer in bytes, for texturing.
-     * \return          TRUE on success.
-     */
-    boolean (*buffer_get_handle)(struct r300_winsys_bo *buf,
-                                 unsigned stride,
-                                 struct winsys_handle *whandle);
-
-    /**************************************************************************
-     * Command submission.
-     *
-     * Each pipe context should create its own command stream and submit
-     * commands independently of other contexts.
-     *************************************************************************/
-
-    /**
-     * Create a command stream.
-     *
-     * \param ws        The winsys this function is called from.
-     */
-    struct r300_winsys_cs *(*cs_create)(struct r300_winsys_screen *ws);
-
-    /**
-     * Destroy a command stream.
-     *
-     * \param cs        A command stream to destroy.
-     */
-    void (*cs_destroy)(struct r300_winsys_cs *cs);
-
-    /**
-     * Add a new buffer relocation. Every relocation must first be added
-     * before it can be written.
-     *
-     * \param cs  A command stream to add buffer for validation against.
-     * \param buf A winsys buffer to validate.
-     * \param rd  A read domain containing a bitmask of the R300_DOMAIN_* flags.
-     * \param wd  A write domain containing a bitmask of the R300_DOMAIN_* flags.
-     */
-    void (*cs_add_reloc)(struct r300_winsys_cs *cs,
-                         struct r300_winsys_cs_handle *buf,
-                         enum r300_buffer_domain rd,
-                         enum r300_buffer_domain wd);
-
-    /**
-     * Return TRUE if there is enough memory in VRAM and GTT for the relocs
-     * added so far.
-     *
-     * \param cs        A command stream to validate.
-     */
-    boolean (*cs_validate)(struct r300_winsys_cs *cs);
-
-    /**
-     * Write a relocated dword to a command buffer.
-     *
-     * \param cs        A command stream the relocation is written to.
-     * \param buf       A winsys buffer to write the relocation for.
-     * \param rd        A read domain containing a bitmask of the R300_DOMAIN_* flags.
-     * \param wd        A write domain containing a bitmask of the R300_DOMAIN_* flags.
-     */
-    void (*cs_write_reloc)(struct r300_winsys_cs *cs,
-                           struct r300_winsys_cs_handle *buf);
-
-    /**
-     * Flush a command stream.
-     *
-     * \param cs        A command stream to flush.
-     * \param flags,    R300_FLUSH_ASYNC or 0.
-     */
-    void (*cs_flush)(struct r300_winsys_cs *cs, unsigned flags);
-
-    /**
-     * Set a flush callback which is called from winsys when flush is
-     * required.
-     *
-     * \param cs        A command stream to set the callback for.
-     * \param flush     A flush callback function associated with the command stream.
-     * \param user      A user pointer that will be passed to the flush callback.
-     */
-    void (*cs_set_flush)(struct r300_winsys_cs *cs,
-                         void (*flush)(void *ctx, unsigned flags),
-                         void *user);
-
-    /**
-     * Return TRUE if a buffer is referenced by a command stream.
-     *
-     * \param cs        A command stream.
-     * \param buf       A winsys buffer.
-     */
-    boolean (*cs_is_buffer_referenced)(struct r300_winsys_cs *cs,
-                                       struct r300_winsys_cs_handle *buf);
-};
-
-#endif /* R300_WINSYS_H */
index 487adddcb726e462ea34baf0345b9746fe1dbf01..f20d45f48de17256bf89a81057d8e83a5744c893 100644 (file)
@@ -367,10 +367,13 @@ static inline uint32_t r600_translate_colorswap(enum pipe_format format)
        case PIPE_FORMAT_B10G10R10A2_UNORM:
                return V_028C70_SWAP_ALT;
 
+       case PIPE_FORMAT_R32_FLOAT:
+       case PIPE_FORMAT_R16G16_FLOAT:
        case PIPE_FORMAT_R16G16_UNORM:
                return V_028C70_SWAP_STD;
 
                /* 64-bit buffers. */
+       case PIPE_FORMAT_R32G32_FLOAT:
        case PIPE_FORMAT_R16G16B16A16_UNORM:
        case PIPE_FORMAT_R16G16B16A16_SNORM:
        case PIPE_FORMAT_R16G16B16A16_SSCALED:
@@ -504,6 +507,57 @@ static INLINE uint32_t r600_translate_colorformat(enum pipe_format format)
        }
 }
 
+static INLINE uint32_t r600_colorformat_endian_swap(uint32_t colorformat)
+{
+#ifdef PIPE_ARCH_BIG_ENDIAN
+       switch(colorformat) {
+       case V_0280A0_COLOR_4_4:
+               return(ENDIAN_NONE);
+
+               /* 8-bit buffers. */
+       case V_0280A0_COLOR_8:
+               return(ENDIAN_NONE);
+
+               /* 16-bit buffers. */
+       case V_0280A0_COLOR_5_6_5:
+       case V_0280A0_COLOR_1_5_5_5:
+       case V_0280A0_COLOR_4_4_4_4:
+       case V_0280A0_COLOR_16:
+       case V_0280A0_COLOR_8_8:
+               return(ENDIAN_8IN16);
+
+               /* 32-bit buffers. */
+       case V_0280A0_COLOR_8_8_8_8:
+       case V_0280A0_COLOR_2_10_10_10:
+       case V_0280A0_COLOR_8_24:
+       case V_0280A0_COLOR_24_8:
+       case V_0280A0_COLOR_32_FLOAT:
+       case V_0280A0_COLOR_16_16_FLOAT:
+       case V_0280A0_COLOR_16_16:
+               return(ENDIAN_8IN32);
+
+               /* 64-bit buffers. */
+       case V_0280A0_COLOR_16_16_16_16:
+       case V_0280A0_COLOR_16_16_16_16_FLOAT:
+               return(ENDIAN_8IN16);
+
+       case V_0280A0_COLOR_32_32_FLOAT:
+       case V_0280A0_COLOR_32_32:
+               return(ENDIAN_8IN32);
+
+               /* 128-bit buffers. */
+       case V_0280A0_COLOR_32_32_32_FLOAT:
+       case V_0280A0_COLOR_32_32_32_32_FLOAT:
+       case V_0280A0_COLOR_32_32_32_32:
+               return(ENDIAN_8IN32);
+       default:
+               return ENDIAN_NONE; /* Unsupported. */
+       }
+#else
+       return ENDIAN_NONE;
+#endif
+}
+
 static INLINE boolean r600_is_sampler_format_supported(struct pipe_screen *screen, enum pipe_format format)
 {
        return r600_translate_texformat(screen, format, NULL, NULL, NULL) != ~0;
index 77432661b64f3519886f1d2c6ffd916fdb25c1a9..a972f82fb1d03451e49e3af1c6eae339795b3c4f 100644 (file)
@@ -107,15 +107,18 @@ static void *evergreen_create_blend_state(struct pipe_context *ctx,
        r600_pipe_state_add_reg(rstate, R_028C3C_PA_SC_AA_MASK, 0xFFFFFFFF, 0xFFFFFFFF, NULL);
 
        for (int i = 0; i < 8; i++) {
-               unsigned eqRGB = state->rt[i].rgb_func;
-               unsigned srcRGB = state->rt[i].rgb_src_factor;
-               unsigned dstRGB = state->rt[i].rgb_dst_factor;
-               unsigned eqA = state->rt[i].alpha_func;
-               unsigned srcA = state->rt[i].alpha_src_factor;
-               unsigned dstA = state->rt[i].alpha_dst_factor;
+               /* state->rt entries > 0 only written if independent blending */
+               const int j = state->independent_blend_enable ? i : 0;
+
+               unsigned eqRGB = state->rt[j].rgb_func;
+               unsigned srcRGB = state->rt[j].rgb_src_factor;
+               unsigned dstRGB = state->rt[j].rgb_dst_factor;
+               unsigned eqA = state->rt[j].alpha_func;
+               unsigned srcA = state->rt[j].alpha_src_factor;
+               unsigned dstA = state->rt[j].alpha_dst_factor;
 
                blend_cntl[i] = 0;
-               if (!state->rt[i].blend_enable)
+               if (!state->rt[j].blend_enable)
                        continue;
 
                blend_cntl[i] |= S_028780_BLEND_CONTROL_ENABLE(1);
@@ -354,7 +357,7 @@ static struct pipe_sampler_view *evergreen_create_sampler_view(struct pipe_conte
        const struct util_format_description *desc;
        struct r600_resource_texture *tmp;
        struct r600_resource *rbuffer;
-       unsigned format;
+       unsigned format, endian;
        uint32_t word4 = 0, yuv_format = 0, pitch = 0;
        unsigned char swizzle[4], array_mode = 0, tile_type = 0;
        struct r600_bo *bo[2];
@@ -391,6 +394,8 @@ static struct pipe_sampler_view *evergreen_create_sampler_view(struct pipe_conte
                tmp = tmp->flushed_depth_texture;
        }
 
+       endian = r600_colorformat_endian_swap(format);
+
        if (tmp->force_int_type) {
                word4 &= C_030010_NUM_FORMAT_ALL;
                word4 |= S_030010_NUM_FORMAT_ALL(V_030010_SQ_NUM_FORMAT_INT);
@@ -422,6 +427,7 @@ static struct pipe_sampler_view *evergreen_create_sampler_view(struct pipe_conte
        r600_pipe_state_add_reg(rstate, R_030010_RESOURCE0_WORD4,
                                word4 |
                                S_030010_SRF_MODE_ALL(V_030010_SRF_MODE_NO_ZERO) |
+                               S_030010_ENDIAN_SWAP(endian) |
                                S_030010_BASE_LEVEL(state->u.tex.first_level), 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_030014_RESOURCE0_WORD5,
                                S_030014_LAST_LEVEL(state->u.tex.last_level) |
@@ -652,7 +658,7 @@ static void evergreen_cb(struct r600_pipe_context *rctx, struct r600_pipe_state
        unsigned level = state->cbufs[cb]->u.tex.level;
        unsigned pitch, slice;
        unsigned color_info;
-       unsigned format, swap, ntype;
+       unsigned format, swap, ntype, endian;
        unsigned offset;
        unsigned tile_type;
        const struct util_format_description *desc;
@@ -677,35 +683,43 @@ static void evergreen_cb(struct r600_pipe_context *rctx, struct r600_pipe_state
                                         level, state->cbufs[cb]->u.tex.first_layer);
        pitch = rtex->pitch_in_blocks[level] / 8 - 1;
        slice = rtex->pitch_in_blocks[level] * surf->aligned_height / 64 - 1;
-       ntype = 0;
        desc = util_format_description(surf->base.format);
+       for (i = 0; i < 4; i++) {
+               if (desc->channel[i].type != UTIL_FORMAT_TYPE_VOID) {
+                       break;
+               }
+       }
+       ntype = V_028C70_NUMBER_UNORM;
        if (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB)
                ntype = V_028C70_NUMBER_SRGB;
+       else if (desc->channel[i].type == UTIL_FORMAT_TYPE_SIGNED)
+               ntype = V_028C70_NUMBER_SNORM;
 
        format = r600_translate_colorformat(surf->base.format);
        swap = r600_translate_colorswap(surf->base.format);
+       if (rbuffer->b.b.b.usage == PIPE_USAGE_STAGING) {
+               endian = ENDIAN_NONE;
+       } else {
+               endian = r600_colorformat_endian_swap(format);
+       }
 
        /* disable when gallium grows int textures */
        if ((format == FMT_32_32_32_32 || format == FMT_16_16_16_16) && rtex->force_int_type)
-               ntype = 4;
+               ntype = V_028C70_NUMBER_UINT;
 
        color_info = S_028C70_FORMAT(format) |
                S_028C70_COMP_SWAP(swap) |
                S_028C70_ARRAY_MODE(rtex->array_mode[level]) |
                S_028C70_BLEND_CLAMP(1) |
-               S_028C70_NUMBER_TYPE(ntype);
+               S_028C70_NUMBER_TYPE(ntype) |
+               S_028C70_ENDIAN(endian);
 
-       for (i = 0; i < 4; i++) {
-               if (desc->channel[i].type != UTIL_FORMAT_TYPE_VOID) {
-                       break;
-               }
-       }
 
        /* we can only set the export size if any thing is snorm/unorm component is > 11 bits,
           if we aren't a float, sint or uint */
        if (desc->colorspace != UTIL_FORMAT_COLORSPACE_ZS &&
            desc->channel[i].size < 12 && desc->channel[i].type != UTIL_FORMAT_TYPE_FLOAT &&
-           ntype != 4 && ntype != 5)
+           ntype != V_028C70_NUMBER_UINT && ntype != V_028C70_NUMBER_SINT)
                color_info |= S_028C70_SOURCE_FORMAT(V_028C70_EXPORT_4C_16BPC);
 
        if (rtex->array_mode[level] > V_028C70_ARRAY_LINEAR_ALIGNED) {
@@ -808,6 +822,9 @@ static void evergreen_set_framebuffer_state(struct pipe_context *ctx,
        if (rstate == NULL)
                return;
 
+       evergreen_context_flush_dest_caches(&rctx->ctx);
+       rctx->ctx.num_dest_buffers = state->nr_cbufs;
+
        /* unreference old buffer and reference new one */
        rstate->id = R600_PIPE_STATE_FRAMEBUFFER;
 
@@ -819,6 +836,7 @@ static void evergreen_set_framebuffer_state(struct pipe_context *ctx,
        }
        if (state->zsbuf) {
                evergreen_db(rctx, rstate, state);
+               rctx->ctx.num_dest_buffers++;
        }
 
        target_mask = 0x00000000;
@@ -880,6 +898,19 @@ static void evergreen_set_framebuffer_state(struct pipe_context *ctx,
        }
 }
 
+static void evergreen_texture_barrier(struct pipe_context *ctx)
+{
+       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+
+       r600_context_flush_all(&rctx->ctx, S_0085F0_TC_ACTION_ENA(1) | S_0085F0_CB_ACTION_ENA(1) |
+                       S_0085F0_CB0_DEST_BASE_ENA(1) | S_0085F0_CB1_DEST_BASE_ENA(1) |
+                       S_0085F0_CB2_DEST_BASE_ENA(1) | S_0085F0_CB3_DEST_BASE_ENA(1) |
+                       S_0085F0_CB4_DEST_BASE_ENA(1) | S_0085F0_CB5_DEST_BASE_ENA(1) |
+                       S_0085F0_CB6_DEST_BASE_ENA(1) | S_0085F0_CB7_DEST_BASE_ENA(1) |
+                       S_0085F0_CB8_DEST_BASE_ENA(1) | S_0085F0_CB9_DEST_BASE_ENA(1) |
+                       S_0085F0_CB10_DEST_BASE_ENA(1) | S_0085F0_CB11_DEST_BASE_ENA(1));
+}
+
 void evergreen_init_state_functions(struct r600_pipe_context *rctx)
 {
        rctx->context.create_blend_state = evergreen_create_blend_state;
@@ -920,6 +951,7 @@ void evergreen_init_state_functions(struct r600_pipe_context *rctx)
        rctx->context.set_viewport_state = evergreen_set_viewport_state;
        rctx->context.sampler_view_destroy = r600_sampler_view_destroy;
        rctx->context.redefine_user_buffer = u_default_redefine_user_buffer;
+       rctx->context.texture_barrier = evergreen_texture_barrier;
 }
 
 void evergreen_init_config(struct r600_pipe_context *rctx)
@@ -1542,8 +1574,10 @@ void evergreen_pipe_set_buffer_resource(struct r600_pipe_context *rctx,
        r600_pipe_state_add_reg(rstate, R_030004_RESOURCE0_WORD1,
                                rbuffer->bo_size - offset - 1, 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_030008_RESOURCE0_WORD2,
-                               S_030008_STRIDE(stride),
-                               0xFFFFFFFF, NULL);
+#ifdef PIPE_ARCH_BIG_ENDIAN
+                               S_030008_ENDIAN_SWAP(ENDIAN_8IN32) |
+#endif
+                               S_030008_STRIDE(stride), 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_03000C_RESOURCE0_WORD3,
                                S_03000C_DST_SEL_X(V_03000C_SQ_SEL_X) |
                                S_03000C_DST_SEL_Y(V_03000C_SQ_SEL_Y) |
index c51a163bd06433db1402c36fbef55e6922f336e6..de445b879a10116493bd10b6329bafb809aad181 100644 (file)
@@ -43,6 +43,7 @@
 #define EVERGREEN_CTL_CONST_OFFSET                  0x0003CFF0
 #define EVERGREEN_CTL_CONST_END                     0x0003E200
 
+#define EVENT_TYPE_PS_PARTIAL_FLUSH            0x10
 #define EVENT_TYPE_ZPASS_DONE                  0x15
 #define EVENT_TYPE_CACHE_FLUSH_AND_INV_EVENT   0x16
 #define                EVENT_TYPE(x)                           ((x) << 0)
 #define R_03CFF4_SQ_VTX_START_INST_LOC                  0x03CFF4
 
 #define R_03A200_SQ_LOOP_CONST_0                     0x3A200
+
+#define ENDIAN_NONE    0
+#define ENDIAN_8IN16   1
+#define ENDIAN_8IN32   2
+#define ENDIAN_8IN64   3
+
 #endif
index 0b7d6f70968eef633ad684f0601fd77a245c0b52..0b0df9d019b4107b6feead87c31789cc28ad5cec 100644 (file)
@@ -179,11 +179,13 @@ struct r600_block_reloc {
 struct r600_block {
        struct list_head        list;
        unsigned                status;
+       unsigned                flags;
        unsigned                start_offset;
        unsigned                pm4_ndwords;
        unsigned                pm4_flush_ndwords;
        unsigned                nbo;
-       unsigned                nreg;
+       u16                     nreg;
+       u16                     nreg_dirty;
        u32                     *reg;
        u32                     pm4[R600_BLOCK_MAX_REG];
        unsigned                pm4_bo_index[R600_BLOCK_MAX_REG];
@@ -231,6 +233,8 @@ struct r600_query {
 #define R600_QUERY_STATE_ENDED         (1 << 1)
 #define R600_QUERY_STATE_SUSPENDED     (1 << 2)
 
+#define R600_CONTEXT_DRAW_PENDING      (1 << 0)
+#define R600_CONTEXT_DST_CACHES_DIRTY  (1 << 1)
 
 struct r600_context {
        struct radeon           *radeon;
@@ -253,6 +257,8 @@ struct r600_context {
        unsigned                num_query_running;
        struct list_head        fenced_bo;
        unsigned                max_db; /* for OQ */
+       unsigned                num_dest_buffers;
+       unsigned                flags;
        boolean                 predicate_drawing;
 };
 
@@ -288,9 +294,14 @@ void r600_context_queries_suspend(struct r600_context *ctx);
 void r600_context_queries_resume(struct r600_context *ctx);
 void r600_query_predication(struct r600_context *ctx, struct r600_query *query, int operation,
                            int flag_wait);
+void r600_context_emit_fence(struct r600_context *ctx, struct r600_bo *fence,
+                             unsigned offset, unsigned value);
+void r600_context_flush_all(struct r600_context *ctx, unsigned flush_flags);
+void r600_context_flush_dest_caches(struct r600_context *ctx);
 
 int evergreen_context_init(struct r600_context *ctx, struct radeon *radeon);
 void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw *draw);
+void evergreen_context_flush_dest_caches(struct r600_context *ctx);
 void evergreen_context_pipe_state_set_ps_resource(struct r600_context *ctx, struct r600_pipe_state *state, unsigned rid);
 void evergreen_context_pipe_state_set_vs_resource(struct r600_context *ctx, struct r600_pipe_state *state, unsigned rid);
 void evergreen_context_pipe_state_set_fs_resource(struct r600_context *ctx, struct r600_pipe_state *state, unsigned rid);
index 240093f9b9db52bcdbde6d27ffdb2271dde83d81..7e854b1b81d8ee97f1e8bdcbb3d659fe5d33e206 100644 (file)
@@ -22,6 +22,7 @@
  */
 #include <stdio.h>
 #include <errno.h>
+#include <byteswap.h>
 #include "util/u_format.h"
 #include "util/u_memory.h"
 #include "pipe/p_shader_tokens.h"
 #include "r600_formats.h"
 #include "r600d.h"
 
+#ifdef PIPE_ARCH_BIG_ENDIAN
+#define CPU_TO_LE32(x) bswap_32(x)
+#else
+#define CPU_TO_LE32(x) (x)
+#endif
+
 #define NUM_OF_CYCLES 3
 #define NUM_OF_COMPONENTS 4
 
@@ -953,10 +960,17 @@ static int merge_inst_groups(struct r600_bc *bc, struct r600_bc_alu *slots[5],
                } else
                        result[i] = slots[i];
 
-               // let's check source gprs
                alu = slots[i];
                num_once_inst += is_alu_once_inst(bc, alu);
 
+               // let's check dst gpr
+               if (alu->dst.rel) {
+                       if (have_mova)
+                               return 0;
+                       have_rel = 1;
+               }
+
+               // let's check source gprs
                num_src = r600_bc_get_num_operands(bc, alu);
                for (src = 0; src < num_src; ++src) {
                        if (alu->src[src].rel) {
@@ -1376,6 +1390,7 @@ static int r600_bc_vtx_build(struct r600_bc *bc, struct r600_bc_vtx *vtx, unsign
                                S_SQ_VTX_WORD1_SRF_MODE_ALL(vtx->srf_mode_all) |
                                S_SQ_VTX_WORD1_GPR_DST_GPR(vtx->dst_gpr);
        bc->bytecode[id++] = S_SQ_VTX_WORD2_OFFSET(vtx->offset) |
+                               S_SQ_VTX_WORD2_ENDIAN_SWAP(vtx->endian) |
                                S_SQ_VTX_WORD2_MEGA_FETCH(1);
        bc->bytecode[id++] = 0;
        return 0;
@@ -1910,6 +1925,7 @@ void r600_bc_dump(struct r600_bc *bc)
                        fprintf(stderr, "MODE:%d)\n", vtx->srf_mode_all);
                        id++;
                        fprintf(stderr, "%04d %08X   ", id, bc->bytecode[id]);
+                       fprintf(stderr, "ENDIAN:%d ", vtx->endian);
                        fprintf(stderr, "OFFSET:%d\n", vtx->offset);
                        //TODO
                        id++;
@@ -1922,7 +1938,7 @@ void r600_bc_dump(struct r600_bc *bc)
 }
 
 static void r600_vertex_data_type(enum pipe_format pformat, unsigned *format,
-                               unsigned *num_format, unsigned *format_comp)
+                               unsigned *num_format, unsigned *format_comp, unsigned *endian)
 {
        const struct util_format_description *desc;
        unsigned i;
@@ -1930,6 +1946,7 @@ static void r600_vertex_data_type(enum pipe_format pformat, unsigned *format,
        *format = 0;
        *num_format = 0;
        *format_comp = 0;
+       *endian = ENDIAN_NONE;
 
        desc = util_format_description(pformat);
        if (desc->layout != UTIL_FORMAT_LAYOUT_PLAIN) {
@@ -1960,6 +1977,9 @@ static void r600_vertex_data_type(enum pipe_format pformat, unsigned *format,
                                *format = FMT_16_16_16_16_FLOAT;
                                break;
                        }
+#ifdef PIPE_ARCH_BIG_ENDIAN
+                       *endian = ENDIAN_8IN16;
+#endif
                        break;
                case 32:
                        switch (desc->nr_channels) {
@@ -1976,6 +1996,9 @@ static void r600_vertex_data_type(enum pipe_format pformat, unsigned *format,
                                *format = FMT_32_32_32_32_FLOAT;
                                break;
                        }
+#ifdef PIPE_ARCH_BIG_ENDIAN
+                       *endian = ENDIAN_8IN32;
+#endif
                        break;
                default:
                        goto out_unknown;
@@ -2013,6 +2036,9 @@ static void r600_vertex_data_type(enum pipe_format pformat, unsigned *format,
                                *format = FMT_16_16_16_16;
                                break;
                        }
+#ifdef PIPE_ARCH_BIG_ENDIAN
+                       *endian = ENDIAN_8IN16;
+#endif
                        break;
                case 32:
                        switch (desc->nr_channels) {
@@ -2029,6 +2055,9 @@ static void r600_vertex_data_type(enum pipe_format pformat, unsigned *format,
                                *format = FMT_32_32_32_32;
                                break;
                        }
+#ifdef PIPE_ARCH_BIG_ENDIAN
+                       *endian = ENDIAN_8IN32;
+#endif
                        break;
                default:
                        goto out_unknown;
@@ -2060,7 +2089,7 @@ int r600_vertex_elements_build_fetch_shader(struct r600_pipe_context *rctx, stru
        struct pipe_vertex_element *elements = ve->elements;
        const struct util_format_description *desc;
        unsigned fetch_resource_start = rctx->family >= CHIP_CEDAR ? 0 : 160;
-       unsigned format, num_format, format_comp;
+       unsigned format, num_format, format_comp, endian;
        u32 *bytecode;
        int i, r;
 
@@ -2107,7 +2136,7 @@ int r600_vertex_elements_build_fetch_shader(struct r600_pipe_context *rctx, stru
 
        for (i = 0; i < ve->count; i++) {
                unsigned vbuffer_index;
-               r600_vertex_data_type(ve->elements[i].src_format, &format, &num_format, &format_comp);
+               r600_vertex_data_type(ve->elements[i].src_format, &format, &num_format, &format_comp, &endian);
                desc = util_format_description(ve->elements[i].src_format);
                if (desc == NULL) {
                        r600_bc_clear(&bc);
@@ -2133,6 +2162,7 @@ int r600_vertex_elements_build_fetch_shader(struct r600_pipe_context *rctx, stru
                vtx.format_comp_all = format_comp;
                vtx.srf_mode_all = 1;
                vtx.offset = elements[i].src_offset;
+               vtx.endian = endian;
 
                if ((r = r600_bc_add_vtx(&bc, &vtx))) {
                        r600_bc_clear(&bc);
@@ -2172,7 +2202,9 @@ int r600_vertex_elements_build_fetch_shader(struct r600_pipe_context *rctx, stru
                return -ENOMEM;
        }
 
-       memcpy(bytecode, bc.bytecode, ve->fs_size);
+       for(i = 0; i < ve->fs_size / 4; i++) {
+               *(bytecode + i) = CPU_TO_LE32(*(bc.bytecode + i));
+       }
 
        r600_bo_unmap(rctx->radeon, ve->fetch_shader);
        r600_bc_clear(&bc);
index 27ea293ebe55cf0f6ccd9301cc5092fe5cda988d..26d337fe125ffae5aa6dbb7164f242468b2e0ecf 100644 (file)
@@ -104,6 +104,7 @@ struct r600_bc_vtx {
        unsigned                        format_comp_all;
        unsigned                        srf_mode_all;
        unsigned                        offset;
+       unsigned                        endian;
 };
 
 struct r600_bc_output {
index 04408a5cc8eb434aa5aed9dd601bb064829cb8fb..151f48a8bf8b1f70e4403ac62b26645104251581 100644 (file)
@@ -277,6 +277,13 @@ static void r600_resource_copy_region(struct pipe_context *ctx,
        struct texture_orig_info orig_info[2];
        boolean restore_orig[2];
 
+       /* Fallback for buffers. */
+       if (dst->target == PIPE_BUFFER && src->target == PIPE_BUFFER) {
+               util_resource_copy_region(ctx, dst, dst_level, dstx, dsty, dstz,
+                                          src, src_level, src_box);
+               return;
+       }
+
        if (rsrc->depth && !rsrc->is_flushing_texture)
                r600_texture_depth_flush(ctx, src, FALSE);
 
index 6ced719c8f01a2d708f62f32fa0bb9383de99b68..71b47e1b0569299d0ebab2c9555dfd1b8b29f5c4 100644 (file)
@@ -24,6 +24,8 @@
  *      Jerome Glisse
  *      Corbin Simpson <MostAwesomeDude@gmail.com>
  */
+#include <byteswap.h>
+
 #include <pipe/p_screen.h>
 #include <util/u_format.h>
 #include <util/u_math.h>
@@ -266,11 +268,31 @@ void r600_upload_const_buffer(struct r600_pipe_context *rctx, struct r600_resour
                uint8_t *ptr = (*rbuffer)->r.b.user_ptr;
                unsigned size = (*rbuffer)->r.b.b.b.width0;
                boolean flushed;
+#ifdef PIPE_ARCH_BIG_ENDIAN
+               int i;
+               uint32_t *tmpPtr;
+
+               *rbuffer = NULL;
+
+               tmpPtr = (uint32_t *)malloc(size);
+               /* big endian swap */
+               if(tmpPtr == NULL) {
+                       return;
+               }
+               for(i = 0; i < size / 4; i++) {
+                       tmpPtr[i] = bswap_32(*((uint32_t *)ptr + i));
+               }
+
+               u_upload_data(rctx->vbuf_mgr->uploader, 0, size, tmpPtr, const_offset,
+                             (struct pipe_resource**)rbuffer, &flushed);
 
+               free(tmpPtr);
+#else
                *rbuffer = NULL;
 
                u_upload_data(rctx->vbuf_mgr->uploader, 0, size, ptr, const_offset,
                              (struct pipe_resource**)rbuffer, &flushed);
+#endif
        } else {
                *const_offset = 0;
        }
index 4a30eddb6211c27b58d3a7e7672f2699d7d8c852..89b46f5ad7e78f85c4cc84239811173a4d91bf3d 100644 (file)
@@ -30,6 +30,7 @@
 #include <tgsi/tgsi_util.h>
 #include <util/u_blitter.h>
 #include <util/u_double_list.h>
+#include "util/u_format.h"
 #include <util/u_format_s3tc.h>
 #include <util/u_transfer.h>
 #include <util/u_surface.h>
@@ -37,6 +38,7 @@
 #include <util/u_memory.h>
 #include <util/u_inlines.h>
 #include "util/u_upload_mgr.h"
+#include "os/os_time.h"
 #include <pipebuffer/pb_buffer.h>
 #include "r600.h"
 #include "r600d.h"
 /*
  * pipe_context
  */
+static struct r600_fence *r600_create_fence(struct r600_pipe_context *ctx)
+{
+       struct r600_fence *fence = NULL;
+
+       if (!ctx->fences.bo) {
+               /* Create the shared buffer object */
+               ctx->fences.bo = r600_bo(ctx->radeon, 4096, 0, 0, 0);
+               if (!ctx->fences.bo) {
+                       R600_ERR("r600: failed to create bo for fence objects\n");
+                       return NULL;
+               }
+               ctx->fences.data = r600_bo_map(ctx->radeon, ctx->fences.bo, PB_USAGE_UNSYNCHRONIZED, NULL);
+       }
+
+       if (!LIST_IS_EMPTY(&ctx->fences.pool)) {
+               struct r600_fence *entry;
+
+               /* Try to find a freed fence that has been signalled */
+               LIST_FOR_EACH_ENTRY(entry, &ctx->fences.pool, head) {
+                       if (ctx->fences.data[entry->index] != 0) {
+                               LIST_DELINIT(&entry->head);
+                               fence = entry;
+                               break;
+                       }
+               }
+       }
+
+       if (!fence) {
+               /* Allocate a new fence */
+               struct r600_fence_block *block;
+               unsigned index;
+
+               if ((ctx->fences.next_index + 1) >= 1024) {
+                       R600_ERR("r600: too many concurrent fences\n");
+                       return NULL;
+               }
+
+               index = ctx->fences.next_index++;
+
+               if (!(index % FENCE_BLOCK_SIZE)) {
+                       /* Allocate a new block */
+                       block = CALLOC_STRUCT(r600_fence_block);
+                       if (block == NULL)
+                               return NULL;
+
+                       LIST_ADD(&block->head, &ctx->fences.blocks);
+               } else {
+                       block = LIST_ENTRY(struct r600_fence_block, ctx->fences.blocks.next, head);
+               }
+
+               fence = &block->fences[index % FENCE_BLOCK_SIZE];
+               fence->ctx = ctx;
+               fence->index = index;
+       }
+
+       pipe_reference_init(&fence->reference, 1);
+
+       ctx->fences.data[fence->index] = 0;
+       r600_context_emit_fence(&ctx->ctx, ctx->fences.bo, fence->index, 1);
+       return fence;
+}
+
 static void r600_flush(struct pipe_context *ctx,
                        struct pipe_fence_handle **fence)
 {
        struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+       struct r600_fence **rfence = (struct r600_fence**)fence;
+
 #if 0
        static int dc = 0;
        char dname[256];
 #endif
 
+       if (rfence)
+               *rfence = r600_create_fence(rctx);
+
        if (!rctx->ctx.pm4_cdwords)
                return;
 
@@ -101,6 +170,7 @@ static void r600_destroy_context(struct pipe_context *context)
        struct r600_pipe_context *rctx = (struct r600_pipe_context *)context;
 
        rctx->context.delete_depth_stencil_alpha_state(&rctx->context, rctx->custom_dsa_flush);
+       util_unreference_framebuffer_state(&rctx->framebuffer);
 
        r600_context_fini(&rctx->ctx);
 
@@ -113,6 +183,18 @@ static void r600_destroy_context(struct pipe_context *context)
        u_vbuf_mgr_destroy(rctx->vbuf_mgr);
        util_slab_destroy(&rctx->pool_transfers);
 
+       if (rctx->fences.bo) {
+               struct r600_fence_block *entry, *tmp;
+
+               LIST_FOR_EACH_ENTRY_SAFE(entry, tmp, &rctx->fences.blocks, head) {
+                       LIST_DEL(&entry->head);
+                       FREE(entry);
+               }
+
+               r600_bo_unmap(rctx->radeon, rctx->fences.bo);
+               r600_bo_reference(rctx->radeon, &rctx->fences.bo, NULL);
+       }
+
        r600_update_num_contexts(rctx->screen, -1);
 
        FREE(rctx);
@@ -140,6 +222,12 @@ static struct pipe_context *r600_create_context(struct pipe_screen *screen, void
        rctx->radeon = rscreen->radeon;
        rctx->family = r600_get_family(rctx->radeon);
 
+       rctx->fences.bo = NULL;
+       rctx->fences.data = NULL;
+       rctx->fences.next_index = 0;
+       LIST_INITHEAD(&rctx->fences.pool);
+       LIST_INITHEAD(&rctx->fences.blocks);
+
        r600_init_blit_functions(rctx);
        r600_init_query_functions(rctx);
        r600_init_context_resource_functions(rctx);
@@ -284,8 +372,8 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
        case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE:
        case PIPE_CAP_DEPTH_CLAMP:
        case PIPE_CAP_SHADER_STENCIL_EXPORT:
-       case PIPE_CAP_TGSI_INSTANCEID:
        case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
+       case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
                return 1;
        case PIPE_CAP_INDEP_BLEND_ENABLE:
                /* R600 doesn't support per-MRT blends */
@@ -294,10 +382,14 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
                else
                        return 1;
 
+       case PIPE_CAP_TGSI_INSTANCEID:
+               return 0;
+
        /* Unsupported features (boolean caps). */
        case PIPE_CAP_STREAM_OUTPUT:
        case PIPE_CAP_PRIMITIVE_RESTART:
        case PIPE_CAP_INDEP_BLEND_FUNC: /* FIXME allow this */
+       case PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL:
                /* R600 doesn't support per-MRT blends */
                if (family == CHIP_R600)
                        return 0;
@@ -435,6 +527,9 @@ static boolean r600_is_format_supported(struct pipe_screen* screen,
                return FALSE;
        }
 
+        if (!util_format_is_supported(format, usage))
+                return FALSE;
+
        /* Multisample */
        if (sample_count > 1)
                return FALSE;
@@ -492,6 +587,62 @@ static void r600_destroy_screen(struct pipe_screen* pscreen)
        FREE(rscreen);
 }
 
+static void r600_fence_reference(struct pipe_screen *pscreen,
+                                 struct pipe_fence_handle **ptr,
+                                 struct pipe_fence_handle *fence)
+{
+       struct r600_fence **oldf = (struct r600_fence**)ptr;
+       struct r600_fence *newf = (struct r600_fence*)fence;
+
+       if (pipe_reference(&(*oldf)->reference, &newf->reference)) {
+               struct r600_pipe_context *ctx = (*oldf)->ctx;
+               LIST_ADDTAIL(&(*oldf)->head, &ctx->fences.pool);
+       }
+
+       *ptr = fence;
+}
+
+static boolean r600_fence_signalled(struct pipe_screen *pscreen,
+                                    struct pipe_fence_handle *fence)
+{
+       struct r600_fence *rfence = (struct r600_fence*)fence;
+       struct r600_pipe_context *ctx = rfence->ctx;
+
+       return ctx->fences.data[rfence->index];
+}
+
+static boolean r600_fence_finish(struct pipe_screen *pscreen,
+                                 struct pipe_fence_handle *fence,
+                                 uint64_t timeout)
+{
+       struct r600_fence *rfence = (struct r600_fence*)fence;
+       struct r600_pipe_context *ctx = rfence->ctx;
+       int64_t start_time = 0;
+       unsigned spins = 0;
+
+       if (timeout != PIPE_TIMEOUT_INFINITE) {
+               start_time = os_time_get();
+
+               /* Convert to microseconds. */
+               timeout /= 1000;
+       }
+
+       while (ctx->fences.data[rfence->index] == 0) {
+               if (++spins % 256)
+                       continue;
+#ifdef PIPE_OS_UNIX
+               sched_yield();
+#else
+               os_time_sleep(10);
+#endif
+               if (timeout != PIPE_TIMEOUT_INFINITE &&
+                   os_time_get() - start_time >= timeout) {
+                       return FALSE;
+               }
+       }
+
+       return TRUE;
+}
 
 struct pipe_screen *r600_screen_create(struct radeon *radeon)
 {
@@ -513,6 +664,9 @@ struct pipe_screen *r600_screen_create(struct radeon *radeon)
        rscreen->screen.is_format_supported = r600_is_format_supported;
        rscreen->screen.context_create = r600_create_context;
        rscreen->screen.video_context_create = r600_video_create;
+       rscreen->screen.fence_reference = r600_fence_reference;
+       rscreen->screen.fence_signalled = r600_fence_signalled;
+       rscreen->screen.fence_finish = r600_fence_finish;
        r600_init_screen_resource_functions(&rscreen->screen);
 
        rscreen->tiling_info = r600_get_tiling_info(radeon);
index 396801e4a4192697c810a0277bae234394f44c88..88aff0e81bb3817690e6f7295bd63a807c8630ed 100644 (file)
@@ -124,6 +124,30 @@ struct r600_textures_info {
        unsigned                        n_samplers;
 };
 
+struct r600_fence {
+       struct pipe_reference           reference;
+       struct r600_pipe_context        *ctx;
+       unsigned                        index; /* in the shared bo */
+       struct list_head                head;
+};
+
+#define FENCE_BLOCK_SIZE 16
+
+struct r600_fence_block {
+       struct r600_fence               fences[FENCE_BLOCK_SIZE];
+       struct list_head                head;
+};
+
+struct r600_pipe_fences {
+       struct r600_bo                  *bo;
+       unsigned                        *data;
+       unsigned                        next_index;
+       /* linked list of preallocated blocks */
+       struct list_head                blocks;
+       /* linked list of freed fences */
+       struct list_head                pool;
+};
+
 #define R600_CONSTANT_ARRAY_SIZE 256
 #define R600_RESOURCE_ARRAY_SIZE 160
 
@@ -158,9 +182,12 @@ struct r600_pipe_context {
        bool                            flatshade;
        struct r600_textures_info       ps_samplers;
 
+       struct r600_pipe_fences         fences;
+
        struct u_vbuf_mgr               *vbuf_mgr;
        struct util_slab_mempool        pool_transfers;
        bool                            blit;
+
 };
 
 struct r600_drawl {
index e7285d624e3679a18e6900e4ad422e871f2038eb..188cea0ff882f6ab66ed728fbd29dbd78bc8566e 100644 (file)
 #include "r600d.h"
 #include <stdio.h>
 #include <errno.h>
+#include <byteswap.h>
+
+#ifdef PIPE_ARCH_BIG_ENDIAN
+#define CPU_TO_LE32(x) bswap_32(x)
+#else
+#define CPU_TO_LE32(x) (x)
+#endif
 
 int r600_find_vs_semantic_index(struct r600_shader *vs,
                                struct r600_shader *ps, int id)
@@ -52,7 +59,8 @@ static int r600_pipe_shader(struct pipe_context *ctx, struct r600_pipe_shader *s
 {
        struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
        struct r600_shader *rshader = &shader->shader;
-       void *ptr;
+       uint32_t *ptr;
+       int     i;
 
        /* copy new shader */
        if (shader->bo == NULL) {
@@ -60,8 +68,10 @@ static int r600_pipe_shader(struct pipe_context *ctx, struct r600_pipe_shader *s
                if (shader->bo == NULL) {
                        return -ENOMEM;
                }
-               ptr = r600_bo_map(rctx->radeon, shader->bo, 0, NULL);
-               memcpy(ptr, rshader->bc.bytecode, rshader->bc.ndw * 4);
+               ptr = (uint32_t*)r600_bo_map(rctx->radeon, shader->bo, 0, NULL);
+               for(i = 0; i < rshader->bc.ndw; i++) {
+                       *(ptr + i) = CPU_TO_LE32(*(rshader->bc.bytecode + i));
+               }
                r600_bo_unmap(rctx->radeon, shader->bo);
        }
        /* build state */
@@ -467,6 +477,11 @@ static int tgsi_fetch_rel_const(struct r600_shader_ctx *ctx, unsigned int offset
        vtx.num_format_all = 2;         /* NUM_FORMAT_SCALED */
        vtx.format_comp_all = 1;        /* FORMAT_COMP_SIGNED */
        vtx.srf_mode_all = 1;           /* SRF_MODE_NO_ZERO */
+#ifdef PIPE_ARCH_BIG_ENDIAN
+       vtx.endian = ENDIAN_8IN32;
+#else
+       vtx.endian = ENDIAN_NONE;
+#endif
 
        if ((r = r600_bc_add_vtx(ctx->bc, &vtx)))
                return r;
@@ -1526,9 +1541,13 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
        unsigned src_gpr;
        int r, i;
        int opcode;
-       boolean src_not_temp =
-               inst->Src[0].Register.File != TGSI_FILE_TEMPORARY &&
-               inst->Src[0].Register.File != TGSI_FILE_INPUT;
+       /* Texture fetch instructions can only use gprs as source.
+        * Also they cannot negate the source or take the absolute value */
+       const boolean src_requires_loading =
+               (inst->Src[0].Register.File != TGSI_FILE_TEMPORARY &&
+               inst->Src[0].Register.File != TGSI_FILE_INPUT) ||
+               ctx->src[0].neg || ctx->src[0].abs;
+       boolean src_loaded = FALSE;
 
        src_gpr = ctx->file_offset[inst->Src[0].Register.File] + inst->Src[0].Register.Index;
 
@@ -1570,7 +1589,7 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
                r = r600_bc_add_alu(ctx->bc, &alu);
                if (r)
                        return r;
-               src_not_temp = FALSE;
+               src_loaded = TRUE;
                src_gpr = ctx->temp_reg;
        }
 
@@ -1655,11 +1674,11 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
                if (r)
                        return r;
 
-               src_not_temp = FALSE;
+               src_loaded = TRUE;
                src_gpr = ctx->temp_reg;
        }
 
-       if (src_not_temp) {
+       if (src_requires_loading && !src_loaded) {
                for (i = 0; i < 4; i++) {
                        memset(&alu, 0, sizeof(struct r600_bc_alu));
                        alu.inst = CTX_INST(V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOV);
@@ -1673,6 +1692,7 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
                        if (r)
                                return r;
                }
+               src_loaded = TRUE;
                src_gpr = ctx->temp_reg;
        }
 
@@ -1691,10 +1711,18 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
        tex.dst_sel_y = (inst->Dst[0].Register.WriteMask & 2) ? 1 : 7;
        tex.dst_sel_z = (inst->Dst[0].Register.WriteMask & 4) ? 2 : 7;
        tex.dst_sel_w = (inst->Dst[0].Register.WriteMask & 8) ? 3 : 7;
-       tex.src_sel_x = 0;
-       tex.src_sel_y = 1;
-       tex.src_sel_z = 2;
-       tex.src_sel_w = 3;
+       if (src_loaded) {
+               tex.src_sel_x = 0;
+               tex.src_sel_y = 1;
+               tex.src_sel_z = 2;
+               tex.src_sel_w = 3;
+       } else {
+               tex.src_sel_x = ctx->src[0].swizzle[0];
+               tex.src_sel_y = ctx->src[0].swizzle[1];
+               tex.src_sel_z = ctx->src[0].swizzle[2];
+               tex.src_sel_w = ctx->src[0].swizzle[3];
+               tex.src_rel = ctx->src[0].rel;
+       }
 
        if (inst->Texture.Texture == TGSI_TEXTURE_CUBE) {
                tex.src_sel_x = 1;
@@ -1712,12 +1740,12 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
 
        if (inst->Texture.Texture == TGSI_TEXTURE_1D_ARRAY) {
                tex.coord_type_z = 0;
-               tex.src_sel_z = 1;
+               tex.src_sel_z = tex.src_sel_y;
        } else if (inst->Texture.Texture == TGSI_TEXTURE_2D_ARRAY)
                tex.coord_type_z = 0;
 
        if (inst->Texture.Texture == TGSI_TEXTURE_SHADOW1D || inst->Texture.Texture == TGSI_TEXTURE_SHADOW2D)
-               tex.src_sel_w = 2;
+               tex.src_sel_w = tex.src_sel_z;
 
        r = r600_bc_add_tex(ctx->bc, &tex);
        if (r)
index efb68cbd1396b5d12364d375e8c259a9bacb0d38..ac2e8986b97dccfdbb32744126763262363d603f 100644 (file)
@@ -161,16 +161,19 @@ static void *r600_create_blend_state(struct pipe_context *ctx,
                                color_control, 0xFFFFFFFD, NULL);
 
        for (int i = 0; i < 8; i++) {
-               unsigned eqRGB = state->rt[i].rgb_func;
-               unsigned srcRGB = state->rt[i].rgb_src_factor;
-               unsigned dstRGB = state->rt[i].rgb_dst_factor;
+               /* state->rt entries > 0 only written if independent blending */
+               const int j = state->independent_blend_enable ? i : 0;
 
-               unsigned eqA = state->rt[i].alpha_func;
-               unsigned srcA = state->rt[i].alpha_src_factor;
-               unsigned dstA = state->rt[i].alpha_dst_factor;
+               unsigned eqRGB = state->rt[j].rgb_func;
+               unsigned srcRGB = state->rt[j].rgb_src_factor;
+               unsigned dstRGB = state->rt[j].rgb_dst_factor;
+
+               unsigned eqA = state->rt[j].alpha_func;
+               unsigned srcA = state->rt[j].alpha_src_factor;
+               unsigned dstA = state->rt[j].alpha_dst_factor;
                uint32_t bc = 0;
 
-               if (!state->rt[i].blend_enable)
+               if (!state->rt[j].blend_enable)
                        continue;
 
                bc |= S_028804_COLOR_COMB_FCN(r600_translate_blend_function(eqRGB));
@@ -410,7 +413,7 @@ static struct pipe_sampler_view *r600_create_sampler_view(struct pipe_context *c
        const struct util_format_description *desc;
        struct r600_resource_texture *tmp;
        struct r600_resource *rbuffer;
-       unsigned format;
+       unsigned format, endian;
        uint32_t word4 = 0, yuv_format = 0, pitch = 0;
        unsigned char swizzle[4], array_mode = 0, tile_type = 0;
        struct r600_bo *bo[2];
@@ -447,6 +450,7 @@ static struct pipe_sampler_view *r600_create_sampler_view(struct pipe_context *c
                r600_texture_depth_flush(ctx, texture, TRUE);
                tmp = tmp->flushed_depth_texture;
        }
+       endian = r600_colorformat_endian_swap(format);
 
        if (tmp->force_int_type) {
                word4 &= C_038010_NUM_FORMAT_ALL;
@@ -487,6 +491,7 @@ static struct pipe_sampler_view *r600_create_sampler_view(struct pipe_context *c
                                word4 |
                                S_038010_SRF_MODE_ALL(V_038010_SRF_MODE_NO_ZERO) |
                                S_038010_REQUEST_SIZE(1) |
+                               S_038010_ENDIAN_SWAP(endian) |
                                S_038010_BASE_LEVEL(state->u.tex.first_level), 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_038014_RESOURCE0_WORD5,
                                S_038014_LAST_LEVEL(state->u.tex.last_level) |
@@ -715,7 +720,7 @@ static void r600_cb(struct r600_pipe_context *rctx, struct r600_pipe_state *rsta
        unsigned level = state->cbufs[cb]->u.tex.level;
        unsigned pitch, slice;
        unsigned color_info;
-       unsigned format, swap, ntype;
+       unsigned format, swap, ntype, endian;
        unsigned offset;
        const struct util_format_description *desc;
        struct r600_bo *bo[3];
@@ -739,40 +744,37 @@ static void r600_cb(struct r600_pipe_context *rctx, struct r600_pipe_state *rsta
                                         level, state->cbufs[cb]->u.tex.first_layer);
        pitch = rtex->pitch_in_blocks[level] / 8 - 1;
        slice = rtex->pitch_in_blocks[level] * surf->aligned_height / 64 - 1;
-       ntype = 0;
        desc = util_format_description(surf->base.format);
-       if (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB)
-               ntype = V_0280A0_NUMBER_SRGB;
-        else if (desc->layout == UTIL_FORMAT_LAYOUT_PLAIN) {
-               switch(desc->channel[0].type) {
-               case UTIL_FORMAT_TYPE_UNSIGNED:
-                       ntype = V_0280A0_NUMBER_UNORM;
-                       break;
-
-               case UTIL_FORMAT_TYPE_SIGNED:
-                       ntype = V_0280A0_NUMBER_SNORM;
-                       break;
-               }
-       }
 
        for (i = 0; i < 4; i++) {
                if (desc->channel[i].type != UTIL_FORMAT_TYPE_VOID) {
                        break;
                }
        }
+       ntype = V_0280A0_NUMBER_UNORM;
+       if (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB)
+               ntype = V_0280A0_NUMBER_SRGB;
+       else if (desc->channel[i].type == UTIL_FORMAT_TYPE_SIGNED)
+               ntype = V_0280A0_NUMBER_SNORM;
 
        format = r600_translate_colorformat(surf->base.format);
        swap = r600_translate_colorswap(surf->base.format);
+       if(rbuffer->b.b.b.usage == PIPE_USAGE_STAGING) {
+               endian = ENDIAN_NONE;
+       } else {
+               endian = r600_colorformat_endian_swap(format);
+       }
 
        /* disable when gallium grows int textures */
        if ((format == FMT_32_32_32_32 || format == FMT_16_16_16_16) && rtex->force_int_type)
-               ntype = 4;
+               ntype = V_0280A0_NUMBER_UINT;
 
        color_info = S_0280A0_FORMAT(format) |
                S_0280A0_COMP_SWAP(swap) |
                S_0280A0_ARRAY_MODE(rtex->array_mode[level]) |
                S_0280A0_BLEND_CLAMP(1) |
-               S_0280A0_NUMBER_TYPE(ntype);
+               S_0280A0_NUMBER_TYPE(ntype) |
+               S_0280A0_ENDIAN(endian);
 
        /* on R600 this can't be set if BLEND_CLAMP isn't set,
           if BLEND_FLOAT32 is set of > 11 bits in a UNORM or SNORM */
@@ -855,6 +857,9 @@ static void r600_set_framebuffer_state(struct pipe_context *ctx,
        if (rstate == NULL)
                return;
 
+       r600_context_flush_dest_caches(&rctx->ctx);
+       rctx->ctx.num_dest_buffers = state->nr_cbufs;
+
        /* unreference old buffer and reference new one */
        rstate->id = R600_PIPE_STATE_FRAMEBUFFER;
 
@@ -866,6 +871,7 @@ static void r600_set_framebuffer_state(struct pipe_context *ctx,
        }
        if (state->zsbuf) {
                r600_db(rctx, rstate, state);
+               rctx->ctx.num_dest_buffers++;
        }
 
        target_mask = 0x00000000;
@@ -945,6 +951,17 @@ static void r600_set_framebuffer_state(struct pipe_context *ctx,
        }
 }
 
+static void r600_texture_barrier(struct pipe_context *ctx)
+{
+       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+
+       r600_context_flush_all(&rctx->ctx, S_0085F0_TC_ACTION_ENA(1) | S_0085F0_CB_ACTION_ENA(1) |
+                       S_0085F0_CB0_DEST_BASE_ENA(1) | S_0085F0_CB1_DEST_BASE_ENA(1) |
+                       S_0085F0_CB2_DEST_BASE_ENA(1) | S_0085F0_CB3_DEST_BASE_ENA(1) |
+                       S_0085F0_CB4_DEST_BASE_ENA(1) | S_0085F0_CB5_DEST_BASE_ENA(1) |
+                       S_0085F0_CB6_DEST_BASE_ENA(1) | S_0085F0_CB7_DEST_BASE_ENA(1));
+}
+
 void r600_init_state_functions(struct r600_pipe_context *rctx)
 {
        rctx->context.create_blend_state = r600_create_blend_state;
@@ -985,6 +1002,7 @@ void r600_init_state_functions(struct r600_pipe_context *rctx)
        rctx->context.set_viewport_state = r600_set_viewport_state;
        rctx->context.sampler_view_destroy = r600_sampler_view_destroy;
        rctx->context.redefine_user_buffer = u_default_redefine_user_buffer;
+       rctx->context.texture_barrier = r600_texture_barrier;
 }
 
 void r600_init_config(struct r600_pipe_context *rctx)
@@ -1443,8 +1461,10 @@ void r600_pipe_set_buffer_resource(struct r600_pipe_context *rctx,
        r600_pipe_state_add_reg(rstate, R_038004_RESOURCE0_WORD1,
                                rbuffer->bo_size - offset - 1, 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_038008_RESOURCE0_WORD2,
-                               S_038008_STRIDE(stride),
-                               0xFFFFFFFF, NULL);
+#ifdef PIPE_ARCH_BIG_ENDIAN
+                               S_038008_ENDIAN_SWAP(ENDIAN_8IN32) |
+#endif
+                               S_038008_STRIDE(stride), 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_03800C_RESOURCE0_WORD3,
                                0x00000000, 0xFFFFFFFF, NULL);
        r600_pipe_state_add_reg(rstate, R_038010_RESOURCE0_WORD4,
index 43dad0c8023bdd81597686844ea2f1d26e60bdbd..997c9a597ee9f4c124ec93df5c983c841fb6f452 100644 (file)
@@ -435,7 +435,7 @@ void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
 {
        struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
        struct r600_resource *rbuffer;
-       u32 vgt_dma_index_type, vgt_draw_initiator, mask;
+       u32 vgt_dma_index_type, vgt_dma_swap_mode, vgt_draw_initiator, mask;
        struct r600_draw rdraw;
        struct r600_pipe_state vgt;
        struct r600_drawl draw = {};
@@ -467,14 +467,21 @@ void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
                draw.info.index_bias = info->start;
        }
 
+       vgt_dma_swap_mode = 0;
        switch (draw.index_size) {
        case 2:
                vgt_draw_initiator = 0;
                vgt_dma_index_type = 0;
+#ifdef PIPE_ARCH_BIG_ENDIAN
+               vgt_dma_swap_mode = ENDIAN_8IN16;
+#endif
                break;
        case 4:
                vgt_draw_initiator = 0;
                vgt_dma_index_type = 1;
+#ifdef PIPE_ARCH_BIG_ENDIAN
+               vgt_dma_swap_mode = ENDIAN_8IN32;
+#endif
                break;
        case 0:
                vgt_draw_initiator = 2;
@@ -521,7 +528,7 @@ void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
 
        rdraw.vgt_num_indices = draw.info.count;
        rdraw.vgt_num_instances = draw.info.instance_count;
-       rdraw.vgt_index_type = vgt_dma_index_type;
+       rdraw.vgt_index_type = vgt_dma_index_type | (vgt_dma_swap_mode << 2);
        rdraw.vgt_draw_initiator = vgt_draw_initiator;
        rdraw.indices = NULL;
        if (draw.index_buffer) {
index 2a40f41bbf553f51b6028297cac1a774b67a3971..5eabfdc2bc60b022572a600d32da5d663325d917 100644 (file)
@@ -363,9 +363,12 @@ static inline uint32_t r600_translate_colorswap(enum pipe_format format)
                return V_0280A0_SWAP_ALT;
 
        case PIPE_FORMAT_R16G16_UNORM:
+       case PIPE_FORMAT_R16G16_FLOAT:
+       case PIPE_FORMAT_R32_FLOAT:
                return V_0280A0_SWAP_STD;
 
                /* 64-bit buffers. */
+       case PIPE_FORMAT_R32G32_FLOAT:
        case PIPE_FORMAT_R16G16B16A16_UNORM:
        case PIPE_FORMAT_R16G16B16A16_SNORM:
        case PIPE_FORMAT_R16G16B16A16_SSCALED:
@@ -501,6 +504,57 @@ static INLINE uint32_t r600_translate_colorformat(enum pipe_format format)
        }
 }
 
+static INLINE uint32_t r600_colorformat_endian_swap(uint32_t colorformat)
+{
+#ifdef PIPE_ARCH_BIG_ENDIAN
+       switch(colorformat) {
+       case V_0280A0_COLOR_4_4:
+               return(ENDIAN_NONE);
+
+               /* 8-bit buffers. */
+       case V_0280A0_COLOR_8:
+               return(ENDIAN_NONE);
+
+               /* 16-bit buffers. */
+       case V_0280A0_COLOR_5_6_5:
+       case V_0280A0_COLOR_1_5_5_5:
+       case V_0280A0_COLOR_4_4_4_4:
+       case V_0280A0_COLOR_16:
+       case V_0280A0_COLOR_8_8:
+               return(ENDIAN_8IN16);
+
+               /* 32-bit buffers. */
+       case V_0280A0_COLOR_8_8_8_8:
+       case V_0280A0_COLOR_2_10_10_10:
+       case V_0280A0_COLOR_8_24:
+       case V_0280A0_COLOR_24_8:
+       case V_0280A0_COLOR_32_FLOAT:
+       case V_0280A0_COLOR_16_16_FLOAT:
+       case V_0280A0_COLOR_16_16:
+               return(ENDIAN_8IN32);
+
+               /* 64-bit buffers. */
+       case V_0280A0_COLOR_16_16_16_16:
+       case V_0280A0_COLOR_16_16_16_16_FLOAT:
+               return(ENDIAN_8IN16);
+
+       case V_0280A0_COLOR_32_32_FLOAT:
+       case V_0280A0_COLOR_32_32:
+               return(ENDIAN_8IN32);
+
+               /* 128-bit buffers. */
+       case V_0280A0_COLOR_32_32_32_FLOAT:
+       case V_0280A0_COLOR_32_32_32_32_FLOAT:
+       case V_0280A0_COLOR_32_32_32_32:
+               return(ENDIAN_8IN32);
+       default:
+               return ENDIAN_NONE; /* Unsupported. */
+       }
+#else
+       return ENDIAN_NONE;
+#endif
+}
+
 static INLINE boolean r600_is_sampler_format_supported(struct pipe_screen *screen, enum pipe_format format)
 {
        return r600_translate_texformat(screen, format, NULL, NULL, NULL) != ~0;
index df70e2889e2f6f66bc8b972185336a43b4fce662..2bff52bec8c69ab6de7c3a2b911538acab807fb8 100644 (file)
 #define SQ_TEX_INST_SAMPLE 0x10
 #define SQ_TEX_INST_SAMPLE_L 0x11
 #define SQ_TEX_INST_SAMPLE_C 0x18
+
+#define ENDIAN_NONE            0
+#define ENDIAN_8IN16   1
+#define ENDIAN_8IN32   2
+#define ENDIAN_8IN64   3
+
 #endif
index c09ce19559cf32eea9c989eb6436f9eec2380a58..02892c16bde4103cb2d6c71a3e683b7d08e7ef31 100644 (file)
@@ -566,7 +566,7 @@ compute_lambda_1d(const struct sp_sampler_variant *samp,
    const struct pipe_resource *texture = samp->view->texture;
    float dsdx = fabsf(s[QUAD_BOTTOM_RIGHT] - s[QUAD_BOTTOM_LEFT]);
    float dsdy = fabsf(s[QUAD_TOP_LEFT]     - s[QUAD_BOTTOM_LEFT]);
-   float rho = MAX2(dsdx, dsdy) * texture->width0;
+   float rho = MAX2(dsdx, dsdy) * u_minify(texture->width0, samp->view->u.tex.first_level);
 
    return util_fast_log2(rho);
 }
@@ -583,8 +583,8 @@ compute_lambda_2d(const struct sp_sampler_variant *samp,
    float dsdy = fabsf(s[QUAD_TOP_LEFT]     - s[QUAD_BOTTOM_LEFT]);
    float dtdx = fabsf(t[QUAD_BOTTOM_RIGHT] - t[QUAD_BOTTOM_LEFT]);
    float dtdy = fabsf(t[QUAD_TOP_LEFT]     - t[QUAD_BOTTOM_LEFT]);
-   float maxx = MAX2(dsdx, dsdy) * texture->width0;
-   float maxy = MAX2(dtdx, dtdy) * texture->height0;
+   float maxx = MAX2(dsdx, dsdy) * u_minify(texture->width0, samp->view->u.tex.first_level);
+   float maxy = MAX2(dtdx, dtdy) * u_minify(texture->height0, samp->view->u.tex.first_level);
    float rho  = MAX2(maxx, maxy);
 
    return util_fast_log2(rho);
@@ -604,9 +604,9 @@ compute_lambda_3d(const struct sp_sampler_variant *samp,
    float dtdy = fabsf(t[QUAD_TOP_LEFT]     - t[QUAD_BOTTOM_LEFT]);
    float dpdx = fabsf(p[QUAD_BOTTOM_RIGHT] - p[QUAD_BOTTOM_LEFT]);
    float dpdy = fabsf(p[QUAD_TOP_LEFT]     - p[QUAD_BOTTOM_LEFT]);
-   float maxx = MAX2(dsdx, dsdy) * texture->width0;
-   float maxy = MAX2(dtdx, dtdy) * texture->height0;
-   float maxz = MAX2(dpdx, dpdy) * texture->depth0;
+   float maxx = MAX2(dsdx, dsdy) * u_minify(texture->width0, samp->view->u.tex.first_level);
+   float maxy = MAX2(dtdx, dtdy) * u_minify(texture->height0, samp->view->u.tex.first_level);
+   float maxz = MAX2(dpdx, dpdy) * u_minify(texture->depth0, samp->view->u.tex.first_level);
    float rho;
 
    rho = MAX2(maxx, maxy);
@@ -1590,10 +1590,10 @@ mip_filter_linear(struct tgsi_sampler *tgsi_sampler,
    /* XXX: Take into account all lod values.
     */
    lambda = lod[0];
-   level0 = (int)lambda;
+   level0 = samp->view->u.tex.first_level + (int)lambda;
 
    if (lambda < 0.0) { 
-      samp->level = 0;
+      samp->level = samp->view->u.tex.first_level;
       samp->mag_img_filter(tgsi_sampler, s, t, p, NULL, tgsi_sampler_lod_bias, rgba);
    }
    else if (level0 >= texture->last_level) {
@@ -1601,7 +1601,7 @@ mip_filter_linear(struct tgsi_sampler *tgsi_sampler,
       samp->min_img_filter(tgsi_sampler, s, t, p, NULL, tgsi_sampler_lod_bias, rgba);
    }
    else {
-      float levelBlend = lambda - level0;
+      float levelBlend = frac(lambda);
       float rgba0[4][4];
       float rgba1[4][4];
       int c,j;
@@ -1658,11 +1658,11 @@ mip_filter_nearest(struct tgsi_sampler *tgsi_sampler,
    lambda = lod[0];
 
    if (lambda < 0.0) { 
-      samp->level = 0;
+      samp->level = samp->view->u.tex.first_level;
       samp->mag_img_filter(tgsi_sampler, s, t, p, NULL, tgsi_sampler_lod_bias, rgba);
    }
    else {
-      samp->level = (int)(lambda + 0.5) ;
+      samp->level = samp->view->u.tex.first_level + (int)(lambda + 0.5) ;
       samp->level = MIN2(samp->level, (int)texture->last_level);
       samp->min_img_filter(tgsi_sampler, s, t, p, NULL, tgsi_sampler_lod_bias, rgba);
    }
@@ -1699,6 +1699,7 @@ mip_filter_none(struct tgsi_sampler *tgsi_sampler,
     */
    lambda = lod[0];
 
+   samp->level = samp->view->u.tex.first_level;
    if (lambda < 0.0) { 
       samp->mag_img_filter(tgsi_sampler, s, t, p, NULL, tgsi_sampler_lod_bias, rgba);
    }
@@ -1741,20 +1742,20 @@ mip_filter_linear_2d_linear_repeat_POT(
    /* XXX: Take into account all lod values.
     */
    lambda = lod[0];
-   level0 = (int)lambda;
+   level0 = samp->view->u.tex.first_level + (int)lambda;
 
    /* Catches both negative and large values of level0:
     */
    if ((unsigned)level0 >= texture->last_level) { 
       if (level0 < 0)
-         samp->level = 0;
+         samp->level = samp->view->u.tex.first_level;
       else
          samp->level = texture->last_level;
 
       img_filter_2d_linear_repeat_POT(tgsi_sampler, s, t, p, NULL, tgsi_sampler_lod_bias, rgba);
    }
    else {
-      float levelBlend = lambda - level0;
+      float levelBlend = frac(lambda);
       float rgba0[4][4];
       float rgba1[4][4];
       int c,j;
@@ -2238,14 +2239,13 @@ sp_sampler_variant_bind_view( struct sp_sampler_variant *samp,
                               struct softpipe_tex_tile_cache *tex_cache,
                               const struct pipe_sampler_view *view )
 {
-   const struct pipe_sampler_state *sampler = samp->sampler;
    const struct pipe_resource *texture = view->texture;
 
    samp->view = view;
    samp->cache = tex_cache;
    samp->xpot = util_unsigned_logbase2( texture->width0 );
    samp->ypot = util_unsigned_logbase2( texture->height0 );
-   samp->level = CLAMP((int) sampler->min_lod, 0, (int) texture->last_level);
+   samp->level = view->u.tex.first_level;
 }
 
 
index 77cb453310009e65ef7fd955c580d4b1ba3938b2..a527d7dcf20bb69cd05c7e8bda17fde6ba5d7975 100644 (file)
@@ -968,11 +968,17 @@ typedef enum {
 } SVGA3dTransferType;
 
 /*
- * The maximum number vertex arrays we're guaranteed to support in
+ * The maximum number of vertex arrays we're guaranteed to support in
  * SVGA_3D_CMD_DRAWPRIMITIVES.
  */
 #define SVGA3D_MAX_VERTEX_ARRAYS   32
 
+/*
+ * The maximum number of primitive ranges we're guaranteed to support
+ * in SVGA_3D_CMD_DRAWPRIMITIVES.
+ */
+#define SVGA3D_MAX_DRAW_PRIMITIVE_RANGES 32
+
 /*
  * Identifiers for commands in the command FIFO.
  *
@@ -1474,10 +1480,12 @@ struct {
     * SVGA3dCmdDrawPrimitives structure. In order,
     * they are:
     *
-    * 1. SVGA3dVertexDecl, quantity 'numVertexDecls'
-    * 2. SVGA3dPrimitiveRange, quantity 'numRanges'
+    * 1. SVGA3dVertexDecl, quantity 'numVertexDecls', but no more than
+    *    SVGA3D_MAX_VERTEX_ARRAYS;
+    * 2. SVGA3dPrimitiveRange, quantity 'numRanges', but no more than
+    *    SVGA3D_MAX_DRAW_PRIMITIVE_RANGES;
     * 3. Optionally, SVGA3dVertexDivisor, quantity 'numVertexDecls' (contains
-    *    the frequency divisor for this the corresponding vertex decl)
+    *    the frequency divisor for the corresponding vertex decl).
     */
 } SVGA3dCmdDrawPrimitives;      /* SVGA_3D_CMD_DRAWPRIMITIVES */
 
index 4782b4bf70ebc6208c3b20763dfdfcababb97cbf..dbbc249258d41471ce358d1f9aedb3913fee31e7 100644 (file)
@@ -204,7 +204,6 @@ void svga_context_flush( struct svga_context *svga,
 {
    struct svga_screen *svgascreen = svga_screen(svga->pipe.screen);
    struct pipe_fence_handle *fence = NULL;
-   enum pipe_error ret;
 
    svga->curr.nr_fbs = 0;
 
@@ -219,25 +218,11 @@ void svga_context_flush( struct svga_context *svga,
 
    svga_screen_cache_flush(svgascreen, fence);
 
-   /* To force the reemission of rendertargets and texture bindings at
-    * the beginning of every command buffer.
-    */
-   svga->dirty |= SVGA_NEW_COMMAND_BUFFER;
-
-   /*
-    * We must reemit the surface bindings here, because svga_update_state
-    * will always flush the primitives before processing the
-    * SVGA_NEW_COMMAND_BUFFER state change.
-    *
-    * TODO: Refactor this.
+   /* To force the re-emission of rendertargets and texture sampler bindings on
+    * the next command buffer.
     */
-   ret = svga_reemit_framebuffer_bindings(svga);
-   assert(ret == PIPE_OK);
-
-   ret = svga_reemit_tss_bindings(svga);
-   assert(ret == PIPE_OK);
-
-   svga->dirty &= ~SVGA_NEW_COMMAND_BUFFER;
+   svga->rebind.rendertargets = TRUE;
+   svga->rebind.texture_samplers = TRUE;
 
    if (SVGA_DEBUG & DEBUG_SYNC) {
       if (fence)
index 7b36a3606e06c23e3db4dac13151bd7c1f961637..eca529d262e37aa375de49189698d1f255b1940d 100644 (file)
@@ -358,6 +358,11 @@ struct svga_context
    struct svga_state curr;      /* state from the state tracker */
    unsigned dirty;              /* statechanges since last update_state() */
 
+   struct {
+      unsigned rendertargets:1;
+      unsigned texture_samplers:1;
+   } rebind;
+
    struct u_upload_mgr *upload_ib;
    struct u_upload_mgr *upload_vb;
    struct svga_hwtnl *hwtnl;
@@ -402,7 +407,6 @@ struct svga_context
 #define SVGA_NEW_ZERO_STRIDE         0x2000000
 #define SVGA_NEW_TEXTURE_FLAGS       0x4000000
 #define SVGA_NEW_STENCIL_REF         0x8000000
-#define SVGA_NEW_COMMAND_BUFFER      0x10000000
 
 
 
index 2c873a0f7ac276fc65ccb80c0c12df6ef20fecb2..d8af615ede153a35a95bc2df4b92ee992e168119 100644 (file)
@@ -170,6 +170,20 @@ svga_hwtnl_flush( struct svga_hwtnl *hwtnl )
          ib_handle[i] = handle;
       }
 
+      if (svga->rebind.rendertargets) {
+         ret = svga_reemit_framebuffer_bindings(svga);
+         if (ret != PIPE_OK) {
+            return ret;
+         }
+      }
+
+      if (svga->rebind.texture_samplers) {
+         ret = svga_reemit_tss_bindings(svga);
+         if (ret != PIPE_OK) {
+            return ret;
+         }
+      }
+
       SVGA_DBG(DEBUG_DMA, "draw to sid %p, %d prims\n",
                svga->curr.framebuffer.cbufs[0] ?
                svga_surface(svga->curr.framebuffer.cbufs[0])->handle : NULL,
index 11afb59875bdc36add1807e0727cbbd7717dde1b..ca658ac6745dafacaa65401032811356704ce424 100644 (file)
@@ -93,7 +93,9 @@ struct index_cache {
    struct pipe_resource *buffer;
 };
 
-#define QSZ 32
+
+/** Max number of primitives per draw call */
+#define QSZ SVGA3D_MAX_DRAW_PRIMITIVE_RANGES
 
 struct draw_cmd {
    struct svga_winsys_context *swc;
index c87afb6946c9f2161fae8be21d0b9b1b71865ec7..c4f122f4f789f72e4c2e73483f06ee83d1d51736 100644 (file)
@@ -29,6 +29,8 @@
 #include "svga_cmd.h"
 #include "svga_surface.h"
 
+#include "util/u_surface.h"
+
 #define FILE_DEBUG_FLAG DEBUG_BLIT
 
 
@@ -54,6 +56,13 @@ static void svga_surface_copy(struct pipe_context *pipe,
     */
    svga_surfaces_flush( svga );
 
+   /* Fallback for buffers. */
+   if (dst_tex->target == PIPE_BUFFER && src_tex->target == PIPE_BUFFER) {
+      util_resource_copy_region(pipe, dst_tex, dst_level, dstx, dsty, dstz,
+                                src_tex, src_level, src_box);
+      return;
+   }
+
 #if 0
    srcsurf = screen->get_tex_surface(screen, src_tex,
                                      src_level, src_box->z, src_box->z,
index 41f239c1a85ce63b10baa372fee01cf68577eedf..b288c3eb2a6d73c502a13424fbcca4a3c1872802 100644 (file)
@@ -52,6 +52,13 @@ try_clear(struct svga_context *svga,
    if (ret)
       return ret;
 
+   if (svga->rebind.rendertargets) {
+      ret = svga_reemit_framebuffer_bindings(svga);
+      if (ret != PIPE_OK) {
+         return ret;
+      }
+   }
+
    if ((buffers & PIPE_CLEAR_COLOR) && fb->cbufs[0]) {
       flags |= SVGA3D_CLEAR_COLOR;
       util_pack_color(rgba, PIPE_FORMAT_B8G8R8A8_UNORM, &uc);
index e5fcec08d6e3525d71b78dff6c43a457024ba524..923958674b477eb8dac887ae2737b987d7a18528 100644 (file)
@@ -40,9 +40,6 @@
 #include "svga_debug.h"
 
 
-#define MAX_DMA_SIZE (4 * 1024 * 1024)
-
-
 /**
  * Allocate a winsys_buffer (ie. DMA, aka GMR memory).
  *
@@ -60,18 +57,10 @@ svga_winsys_buffer_create( struct svga_context *svga,
    struct svga_winsys_screen *sws = svgascreen->sws;
    struct svga_winsys_buffer *buf;
    
-   /* XXX this shouldn't be a hard-coded number; it should be queried
-    * somehow.
-    */
-   if (size > MAX_DMA_SIZE) {
-      return NULL;
-   }
-
    /* Just try */
    buf = sws->buffer_create(sws, alignment, usage, size);
-   if(!buf) {
-
-      SVGA_DBG(DEBUG_DMA|DEBUG_PERF, "flushing screen to find %d bytes GMR\n", 
+   if (!buf) {
+      SVGA_DBG(DEBUG_DMA|DEBUG_PERF, "flushing context to find %d bytes GMR\n",
                size); 
       
       /* Try flushing all pending DMAs */
index b61f85955a2424d766f71907cd49298f51d7a7cc..f9eb4949b2c1459ecb1a71be58c4baf093726d80 100644 (file)
@@ -231,18 +231,19 @@ svga_transfer_dma(struct svga_context *svga,
 
          sw = (uint8_t *)st->swbuf + offset;
 
-         if(transfer == SVGA3D_WRITE_HOST_VRAM) {
+         if (transfer == SVGA3D_WRITE_HOST_VRAM) {
+            unsigned usage = PIPE_TRANSFER_WRITE;
+
             /* Wait for the previous DMAs to complete */
             /* TODO: keep one DMA (at half the size) in the background */
-            if(y) {
-               svga_context_flush(svga, &fence);
-               sws->fence_finish(sws, fence, 0);
-               sws->fence_reference(sws, &fence, NULL);
+            if (y) {
+               svga_context_flush(svga, NULL);
+               usage |= PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE;
             }
 
-            hw = sws->buffer_map(sws, st->hwbuf, PIPE_TRANSFER_WRITE);
+            hw = sws->buffer_map(sws, st->hwbuf, usage);
             assert(hw);
-            if(hw) {
+            if (hw) {
                memcpy(hw, sw, length);
                sws->buffer_unmap(sws, st->hwbuf);
             }
index 6c987abe0564e3c351769fa3ed0c9d48cea77ac1..b847cf331b3a7faf84264c969e0f6ca94587b870 100644 (file)
@@ -181,6 +181,8 @@ svga_get_paramf(struct pipe_screen *screen, enum pipe_cap param)
 
    case PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE:
       return 1;
+   case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
+      return 0;
 
    default:
       return 0;
index cdadb20c178517816db701aa2fec9c49bb7d3944..cc4819431add5e02b4414be95aec062935edc038 100644 (file)
@@ -43,7 +43,7 @@ static int emit_framebuffer( struct svga_context *svga,
 {
    const struct pipe_framebuffer_state *curr = &svga->curr.framebuffer;
    struct pipe_framebuffer_state *hw = &svga->state.hw_clear.framebuffer;
-   boolean reemit = !!(dirty & SVGA_NEW_COMMAND_BUFFER);
+   boolean reemit = svga->rebind.rendertargets;
    unsigned i;
    enum pipe_error ret;
 
@@ -88,6 +88,7 @@ static int emit_framebuffer( struct svga_context *svga,
       pipe_surface_reference(&hw->zsbuf, curr->zsbuf);
    }
 
+   svga->rebind.rendertargets = FALSE;
 
    return 0;
 }
@@ -108,6 +109,8 @@ svga_reemit_framebuffer_bindings(struct svga_context *svga)
    unsigned i;
    enum pipe_error ret;
 
+   assert(svga->rebind.rendertargets);
+
    for (i = 0; i < MIN2(PIPE_MAX_COLOR_BUFS, 8); ++i) {
       if (hw->cbufs[i]) {
          ret = SVGA3D_SetRenderTarget(svga->swc, SVGA3D_RT_COLOR0 + i, hw->cbufs[i]);
@@ -138,6 +141,8 @@ svga_reemit_framebuffer_bindings(struct svga_context *svga)
       }
    }
 
+   svga->rebind.rendertargets = FALSE;
+
    return PIPE_OK;
 }
 
@@ -145,8 +150,7 @@ svga_reemit_framebuffer_bindings(struct svga_context *svga)
 struct svga_tracked_state svga_hw_framebuffer = 
 {
    "hw framebuffer state",
-   SVGA_NEW_FRAME_BUFFER |
-   SVGA_NEW_COMMAND_BUFFER,
+   SVGA_NEW_FRAME_BUFFER,
    emit_framebuffer
 };
 
@@ -296,7 +300,7 @@ static int emit_viewport( struct svga_context *svga,
          break;
       case PIPE_PRIM_POINTS:
       case PIPE_PRIM_TRIANGLES:
-         adjust_x = -0.375;
+         adjust_x = -0.5;
          adjust_y = -0.5;
          break;
       }
index c502506b93bd444258514cd6f98c8172f55055d5..8b11a2a425ed452ebe92d84a6bec38dd28500d11 100644 (file)
@@ -66,7 +66,7 @@ static int
 update_tss_binding(struct svga_context *svga, 
                    unsigned dirty )
 {
-   boolean reemit = !!(dirty & SVGA_NEW_COMMAND_BUFFER);
+   boolean reemit = svga->rebind.texture_samplers;
    unsigned i;
    unsigned count = MAX2( svga->curr.num_sampler_views,
                           svga->state.hw_draw.num_views );
@@ -159,6 +159,8 @@ update_tss_binding(struct svga_context *svga,
       SVGA_FIFOCommitAll( svga->swc );
    }
 
+   svga->rebind.texture_samplers = FALSE;
+
    return 0;
 
 fail:
@@ -181,6 +183,8 @@ svga_reemit_tss_bindings(struct svga_context *svga)
    enum pipe_error ret;
    struct bind_queue queue;
 
+   assert(svga->rebind.texture_samplers);
+
    queue.bind_count = 0;
 
    for (i = 0; i < svga->state.hw_draw.num_views; i++) {
@@ -220,6 +224,8 @@ svga_reemit_tss_bindings(struct svga_context *svga)
       SVGA_FIFOCommitAll(svga->swc);
    }
 
+   svga->rebind.texture_samplers = FALSE;
+
    return PIPE_OK;
 }
 
@@ -227,8 +233,7 @@ svga_reemit_tss_bindings(struct svga_context *svga)
 struct svga_tracked_state svga_hw_tss_binding = {
    "texture binding emit",
    SVGA_NEW_TEXTURE_BINDING |
-   SVGA_NEW_SAMPLER |
-   SVGA_NEW_COMMAND_BUFFER,
+   SVGA_NEW_SAMPLER,
    update_tss_binding
 };
 
index c210cba032a2acd4e9b8048075f4c37a87456eb8..cacd2e17498d16c7aa3a2d59e821210aa959242a 100644 (file)
@@ -13,12 +13,17 @@ It can traces all incoming calls.
 
 For tracing then do
 
- GALLIUM_TRACE=tri.trace progs/trivial/tri
+ GALLIUM_TRACE=tri.trace trivial/tri
 
 which should create a tri.trace file, which is an XML file. You can view copying 
 trace.xsl to the same directory, and opening with a XSLT capable browser such as 
 Firefox or Internet Explorer.
 
+For long traces you can use the
+
+  src/gallium/tools/trace/dump.py tri.trace | less -R
+
+
 == Remote debugging ==
 
 For remote debugging see:
index 4db7619c4248b0eeb7bb9f2789ebaca1171ea181..4f0d6c4b97acfc2312689fd45fb29a8426f4823a 100644 (file)
@@ -47,15 +47,15 @@ static INLINE struct pipe_resource *
 trace_resource_unwrap(struct trace_context *tr_ctx,
                      struct pipe_resource *resource)
 {
-   struct trace_resource *tr_tex;
+   struct trace_resource *tr_res;
 
    if(!resource)
       return NULL;
 
-   tr_tex = trace_resource(resource);
+   tr_res = trace_resource(resource);
 
-   assert(tr_tex->resource);
-   return tr_tex->resource;
+   assert(tr_res->resource);
+   return tr_res->resource;
 }
 
 
@@ -832,19 +832,22 @@ trace_create_sampler_view(struct pipe_context *_pipe,
                           const struct pipe_sampler_view *templ)
 {
    struct trace_context *tr_ctx = trace_context(_pipe);
-   struct trace_resource *tr_tex = trace_resource(_resource);
+   struct trace_resource *tr_res = trace_resource(_resource);
    struct pipe_context *pipe = tr_ctx->pipe;
-   struct pipe_resource *texture = tr_tex->resource;
+   struct pipe_resource *resource = tr_res->resource;
    struct pipe_sampler_view *result;
    struct trace_sampler_view *tr_view;
 
    trace_dump_call_begin("pipe_context", "create_sampler_view");
 
    trace_dump_arg(ptr, pipe);
-   trace_dump_arg(ptr, texture);
-   trace_dump_arg(sampler_view_template, templ);
+   trace_dump_arg(ptr, resource);
+
+   trace_dump_arg_begin("templ");
+   trace_dump_sampler_view_template(templ, resource->target);
+   trace_dump_arg_end();
 
-   result = pipe->create_sampler_view(pipe, texture, templ);
+   result = pipe->create_sampler_view(pipe, resource, templ);
 
    trace_dump_ret(ptr, result);
 
@@ -895,29 +898,32 @@ trace_sampler_view_destroy(struct pipe_context *_pipe,
 
 static struct pipe_surface *
 trace_create_surface(struct pipe_context *_pipe,
-                     struct pipe_resource *_texture,
+                     struct pipe_resource *_resource,
                      const struct pipe_surface *surf_tmpl)
 {
    struct trace_context *tr_ctx = trace_context(_pipe);
-   struct trace_resource *tr_tex = trace_resource(_texture);
+   struct trace_resource *tr_res = trace_resource(_resource);
    struct pipe_context *pipe = tr_ctx->pipe;
-   struct pipe_resource *texture = tr_tex->resource;
+   struct pipe_resource *resource = tr_res->resource;
    struct pipe_surface *result = NULL;
 
    trace_dump_call_begin("pipe_context", "create_surface");
 
    trace_dump_arg(ptr, pipe);
-   trace_dump_arg(ptr, texture);
-   /* hmm some values unitialized there */
-   trace_dump_arg(surface, surf_tmpl);
+   trace_dump_arg(ptr, resource);
+   
+   trace_dump_arg_begin("surf_tmpl");
+   trace_dump_surface_template(surf_tmpl, resource->target);
+   trace_dump_arg_end();
+
 
-   result = pipe->create_surface(pipe, texture, surf_tmpl);
+   result = pipe->create_surface(pipe, resource, surf_tmpl);
 
    trace_dump_ret(ptr, result);
 
    trace_dump_call_end();
 
-   result = trace_surf_create(tr_tex, result);
+   result = trace_surf_create(tr_res, result);
 
    return result;
 }
@@ -1231,9 +1237,9 @@ trace_context_get_transfer(struct pipe_context *_context,
                            const struct pipe_box *box)
 {
    struct trace_context *tr_context = trace_context(_context);
-   struct trace_resource *tr_tex = trace_resource(_resource);
+   struct trace_resource *tr_res = trace_resource(_resource);
    struct pipe_context *context = tr_context->pipe;
-   struct pipe_resource *texture = tr_tex->resource;
+   struct pipe_resource *texture = tr_res->resource;
    struct pipe_transfer *result = NULL;
 
    assert(texture->screen == context->screen);
@@ -1246,7 +1252,7 @@ trace_context_get_transfer(struct pipe_context *_context,
    result = context->get_transfer(context, texture, level, usage, box);
 
    if (result)
-      result = trace_transfer_create(tr_context, tr_tex, result);
+      result = trace_transfer_create(tr_context, tr_res, result);
 
    return result;
 }
@@ -1360,9 +1366,9 @@ trace_context_transfer_inline_write(struct pipe_context *_context,
                                     unsigned layer_stride)
 {
    struct trace_context *tr_context = trace_context(_context);
-   struct trace_resource *tr_tex = trace_resource(_resource);
+   struct trace_resource *tr_res = trace_resource(_resource);
    struct pipe_context *context = tr_context->pipe;
-   struct pipe_resource *resource = tr_tex->resource;
+   struct pipe_resource *resource = tr_res->resource;
 
    assert(resource->screen == context->screen);
 
@@ -1397,9 +1403,9 @@ static void trace_redefine_user_buffer(struct pipe_context *_context,
                                        unsigned offset, unsigned size)
 {
    struct trace_context *tr_context = trace_context(_context);
-   struct trace_resource *tr_tex = trace_resource(_resource);
+   struct trace_resource *tr_res = trace_resource(_resource);
    struct pipe_context *context = tr_context->pipe;
-   struct pipe_resource *resource = tr_tex->resource;
+   struct pipe_resource *resource = tr_res->resource;
 
    assert(resource->screen == context->screen);
 
index 18805655bd77b56a59236a0e1076949713011d44..291a6a29ca5ead138c0ef1ea0f0b5a940e0514e7 100644 (file)
@@ -321,8 +321,29 @@ void trace_dump_depth_stencil_alpha_state(const struct pipe_depth_stencil_alpha_
    trace_dump_struct_end();
 }
 
+static void trace_dump_rt_blend_state(const struct pipe_rt_blend_state *state)
+{
+   trace_dump_struct_begin("pipe_rt_blend_state");
+
+   trace_dump_member(uint, state, blend_enable);
+
+   trace_dump_member(uint, state, rgb_func);
+   trace_dump_member(uint, state, rgb_src_factor);
+   trace_dump_member(uint, state, rgb_dst_factor);
+
+   trace_dump_member(uint, state, alpha_func);
+   trace_dump_member(uint, state, alpha_src_factor);
+   trace_dump_member(uint, state, alpha_dst_factor);
+
+   trace_dump_member(uint, state, colormask);
+
+   trace_dump_struct_end();
+}
+
 void trace_dump_blend_state(const struct pipe_blend_state *state)
 {
+   unsigned valid_entries = 1;
+
    if (!trace_dumping_enabled_locked())
       return;
 
@@ -331,7 +352,22 @@ void trace_dump_blend_state(const struct pipe_blend_state *state)
       return;
    }
 
-   trace_dump_bytes(state, sizeof *state);
+   trace_dump_struct_begin("pipe_blend_state");
+
+   trace_dump_member(bool, state, dither);
+
+   trace_dump_member(bool, state, logicop_enable);
+   trace_dump_member(uint, state, logicop_func);
+
+   trace_dump_member(bool, state, independent_blend_enable);
+
+   trace_dump_member_begin("rt");
+   if (state->independent_blend_enable)
+      valid_entries = PIPE_MAX_COLOR_BUFS;
+   trace_dump_struct_array(rt_blend_state, state->rt, valid_entries);
+   trace_dump_member_end();
+
+   trace_dump_struct_end();
 }
 
 
@@ -417,7 +453,8 @@ void trace_dump_sampler_state(const struct pipe_sampler_state *state)
 }
 
 
-void trace_dump_sampler_view_template(const struct pipe_sampler_view *state)
+void trace_dump_sampler_view_template(const struct pipe_sampler_view *state,
+                                      enum pipe_texture_target target)
 {
    if (!trace_dumping_enabled_locked())
       return;
@@ -430,13 +467,29 @@ void trace_dump_sampler_view_template(const struct pipe_sampler_view *state)
    trace_dump_struct_begin("pipe_sampler_view");
 
    trace_dump_member(format, state, format);
-   /* XXX */
-   trace_dump_member(uint, state, u.tex.first_level);
-   trace_dump_member(uint, state, u.tex.last_level);
-   trace_dump_member(uint, state, u.tex.first_layer);
-   trace_dump_member(uint, state, u.tex.last_layer);
-   trace_dump_member(uint, state, u.buf.first_element);
-   trace_dump_member(uint, state, u.buf.last_element);
+
+   trace_dump_member_begin("u");
+   trace_dump_struct_begin(""); /* anonymous */
+   if (target == PIPE_BUFFER) {
+      trace_dump_member_begin("buf");
+      trace_dump_struct_begin(""); /* anonymous */
+      trace_dump_member(uint, &state->u.buf, first_element);
+      trace_dump_member(uint, &state->u.buf, last_element);
+      trace_dump_struct_end(); /* anonymous */
+      trace_dump_member_end(); /* buf */
+   } else {
+      trace_dump_member_begin("tex");
+      trace_dump_struct_begin(""); /* anonymous */
+      trace_dump_member(uint, &state->u.tex, first_layer);
+      trace_dump_member(uint, &state->u.tex, last_layer);
+      trace_dump_member(uint, &state->u.tex, first_level);
+      trace_dump_member(uint, &state->u.tex, last_level);
+      trace_dump_struct_end(); /* anonymous */
+      trace_dump_member_end(); /* tex */
+   }
+   trace_dump_struct_end(); /* anonymous */
+   trace_dump_member_end(); /* u */
+
    trace_dump_member(uint, state, swizzle_r);
    trace_dump_member(uint, state, swizzle_g);
    trace_dump_member(uint, state, swizzle_b);
@@ -446,7 +499,8 @@ void trace_dump_sampler_view_template(const struct pipe_sampler_view *state)
 }
 
 
-void trace_dump_surface(const struct pipe_surface *state)
+void trace_dump_surface_template(const struct pipe_surface *state,
+                                 enum pipe_texture_target target)
 {
    if (!trace_dumping_enabled_locked())
       return;
@@ -464,12 +518,26 @@ void trace_dump_surface(const struct pipe_surface *state)
 
    trace_dump_member(uint, state, usage);
 
-   trace_dump_member(ptr, state, texture);
-   trace_dump_member(uint, state, u.tex.level);
-   trace_dump_member(uint, state, u.tex.first_layer);
-   trace_dump_member(uint, state, u.tex.last_layer);
-   trace_dump_member(uint, state, u.buf.first_element);
-   trace_dump_member(uint, state, u.buf.last_element);
+   trace_dump_member_begin("u");
+   trace_dump_struct_begin(""); /* anonymous */
+   if (target == PIPE_BUFFER) {
+      trace_dump_member_begin("buf");
+      trace_dump_struct_begin(""); /* anonymous */
+      trace_dump_member(uint, &state->u.buf, first_element);
+      trace_dump_member(uint, &state->u.buf, last_element);
+      trace_dump_struct_end(); /* anonymous */
+      trace_dump_member_end(); /* buf */
+   } else {
+      trace_dump_member_begin("tex");
+      trace_dump_struct_begin(""); /* anonymous */
+      trace_dump_member(uint, &state->u.tex, level);
+      trace_dump_member(uint, &state->u.tex, first_layer);
+      trace_dump_member(uint, &state->u.tex, last_layer);
+      trace_dump_struct_end(); /* anonymous */
+      trace_dump_member_end(); /* tex */
+   }
+   trace_dump_struct_end(); /* anonymous */
+   trace_dump_member_end(); /* u */
 
    trace_dump_struct_end();
 }
index fe8ece78d437e00bbd9535fb31ca6bb139491e2d..a6e7ccdb864f9fd3d4c6d75aa2961610e9abe563 100644 (file)
@@ -65,9 +65,11 @@ void trace_dump_framebuffer_state(const struct pipe_framebuffer_state *state);
 
 void trace_dump_sampler_state(const struct pipe_sampler_state *state);
 
-void trace_dump_sampler_view_template(const struct pipe_sampler_view *view);
+void trace_dump_sampler_view_template(const struct pipe_sampler_view *view,
+                                      enum pipe_texture_target target);
 
-void trace_dump_surface(const struct pipe_surface *state);
+void trace_dump_surface_template(const struct pipe_surface *state,
+                                 enum pipe_texture_target target);
 
 void trace_dump_transfer(const struct pipe_transfer *state);
 
index 42180c4f19e0916230f2da33eacfb8bc665ffbb3..a7d33661838edc1f1d9129867c82220b02ff7f9a 100644 (file)
@@ -117,7 +117,7 @@ trace_screen_get_shader_param(struct pipe_screen *_screen, unsigned shader,
    trace_dump_call_begin("pipe_screen", "get_shader_param");
 
    trace_dump_arg(ptr, screen);
-   trace_dump_arg(int, shader);
+   trace_dump_arg(uint, shader);
    trace_dump_arg(int, param);
 
    result = screen->get_shader_param(screen, shader, param);
@@ -282,40 +282,40 @@ trace_screen_resource_from_handle(struct pipe_screen *_screen,
 
 static boolean
 trace_screen_resource_get_handle(struct pipe_screen *_screen,
-                                struct pipe_resource *_texture,
+                                struct pipe_resource *_resource,
                                 struct winsys_handle *handle)
 {
    struct trace_screen *tr_screen = trace_screen(_screen);
-   struct trace_resource *tr_texture = trace_resource(_texture);
+   struct trace_resource *tr_resource = trace_resource(_resource);
    struct pipe_screen *screen = tr_screen->screen;
-   struct pipe_resource *texture = tr_texture->resource;
+   struct pipe_resource *resource = tr_resource->resource;
 
    /* TODO trace call */
 
-   return screen->resource_get_handle(screen, texture, handle);
+   return screen->resource_get_handle(screen, resource, handle);
 }
 
 
 
 static void
 trace_screen_resource_destroy(struct pipe_screen *_screen,
-                             struct pipe_resource *_texture)
+                             struct pipe_resource *_resource)
 {
    struct trace_screen *tr_scr = trace_screen(_screen);
-   struct trace_resource *tr_tex = trace_resource(_texture);
+   struct trace_resource *tr_res = trace_resource(_resource);
    struct pipe_screen *screen = tr_scr->screen;
-   struct pipe_resource *texture = tr_tex->resource;
+   struct pipe_resource *resource = tr_res->resource;
 
-   assert(texture->screen == screen);
+   assert(resource->screen == screen);
 
-   trace_dump_call_begin("pipe_screen", "texture_destroy");
+   trace_dump_call_begin("pipe_screen", "resource_destroy");
 
    trace_dump_arg(ptr, screen);
-   trace_dump_arg(ptr, texture);
+   trace_dump_arg(ptr, resource);
 
    trace_dump_call_end();
 
-   trace_resource_destroy(tr_scr, tr_tex);
+   trace_resource_destroy(tr_scr, tr_res);
 }
 
 
index 2799734647104c7470ec434fe06982065c2e786b..648b7a4f1ccf7fa98ca7f250f19bd70d1482dd76 100644 (file)
@@ -39,24 +39,24 @@ struct pipe_resource *
 trace_resource_create(struct trace_screen *tr_scr,
                      struct pipe_resource *texture)
 {
-   struct trace_resource *tr_tex;
+   struct trace_resource *tr_res;
 
    if(!texture)
       goto error;
 
    assert(texture->screen == tr_scr->screen);
 
-   tr_tex = CALLOC_STRUCT(trace_resource);
-   if(!tr_tex)
+   tr_res = CALLOC_STRUCT(trace_resource);
+   if(!tr_res)
       goto error;
 
-   memcpy(&tr_tex->base, texture, sizeof(struct pipe_resource));
+   memcpy(&tr_res->base, texture, sizeof(struct pipe_resource));
 
-   pipe_reference_init(&tr_tex->base.reference, 1);
-   tr_tex->base.screen = &tr_scr->base;
-   tr_tex->resource = texture;
+   pipe_reference_init(&tr_res->base.reference, 1);
+   tr_res->base.screen = &tr_scr->base;
+   tr_res->resource = texture;
 
-   return &tr_tex->base;
+   return &tr_res->base;
 
 error:
    pipe_resource_reference(&texture, NULL);
@@ -66,15 +66,15 @@ error:
 
 void
 trace_resource_destroy(struct trace_screen *tr_scr,
-                      struct trace_resource *tr_tex)
+                      struct trace_resource *tr_res)
 {
-   pipe_resource_reference(&tr_tex->resource, NULL);
-   FREE(tr_tex);
+   pipe_resource_reference(&tr_res->resource, NULL);
+   FREE(tr_res);
 }
 
 
 struct pipe_surface *
-trace_surf_create(struct trace_resource *tr_tex,
+trace_surf_create(struct trace_resource *tr_res,
                   struct pipe_surface *surface)
 {
    struct trace_surface *tr_surf;
@@ -82,7 +82,7 @@ trace_surf_create(struct trace_resource *tr_tex,
    if(!surface)
       goto error;
 
-   assert(surface->texture == tr_tex->resource);
+   assert(surface->texture == tr_res->resource);
 
    tr_surf = CALLOC_STRUCT(trace_surface);
    if(!tr_surf)
@@ -92,7 +92,7 @@ trace_surf_create(struct trace_resource *tr_tex,
 
    pipe_reference_init(&tr_surf->base.reference, 1);
    tr_surf->base.texture = NULL;
-   pipe_resource_reference(&tr_surf->base.texture, &tr_tex->base);
+   pipe_resource_reference(&tr_surf->base.texture, &tr_res->base);
    tr_surf->surface = surface;
 
    return &tr_surf->base;
@@ -114,7 +114,7 @@ trace_surf_destroy(struct trace_surface *tr_surf)
 
 struct pipe_transfer *
 trace_transfer_create(struct trace_context *tr_ctx,
-                     struct trace_resource *tr_tex,
+                     struct trace_resource *tr_res,
                      struct pipe_transfer *transfer)
 {
    struct trace_transfer *tr_trans;
@@ -122,7 +122,7 @@ trace_transfer_create(struct trace_context *tr_ctx,
    if(!transfer)
       goto error;
 
-   assert(transfer->resource == tr_tex->resource);
+   assert(transfer->resource == tr_res->resource);
 
    tr_trans = CALLOC_STRUCT(trace_transfer);
    if(!tr_trans)
@@ -133,8 +133,8 @@ trace_transfer_create(struct trace_context *tr_ctx,
    tr_trans->base.resource = NULL;
    tr_trans->transfer = transfer;
 
-   pipe_resource_reference(&tr_trans->base.resource, &tr_tex->base);
-   assert(tr_trans->base.resource == &tr_tex->base);
+   pipe_resource_reference(&tr_trans->base.resource, &tr_res->base);
+   assert(tr_trans->base.resource == &tr_res->base);
 
    return &tr_trans->base;
 
index 3352c96e59ab021293e427ca2cf3108a1342ecdb..bf3c16e8cd21f2d20a6207905b8786e55dd56652 100644 (file)
@@ -122,10 +122,10 @@ trace_resource_create(struct trace_screen *tr_scr,
 
 void
 trace_resource_destroy(struct trace_screen *tr_scr,
-                      struct trace_resource *tr_tex);
+                      struct trace_resource *tr_res);
 
 struct pipe_surface *
-trace_surf_create(struct trace_resource *tr_tex,
+trace_surf_create(struct trace_resource *tr_res,
                      struct pipe_surface *surface);
 
 void
@@ -133,7 +133,7 @@ trace_surf_destroy(struct trace_surface *tr_surf);
 
 struct pipe_transfer *
 trace_transfer_create(struct trace_context *tr_ctx,
-                     struct trace_resource *tr_tex,
+                     struct trace_resource *tr_res,
                      struct pipe_transfer *transfer);
 
 void
index 3441db685ce44c3f5fbb9957db40c5b571d25d1b..8c788f4bb0e375dec3a8d2ff9aa59dadcbed2362 100644 (file)
@@ -292,12 +292,14 @@ void _ReadWriteBarrier(void);
  * Note that profile guided optimization can offer better results, but
  * needs an appropriate coverage suite and does not inform human readers.
  */
-#ifdef __GNUC__
-#define likely(x) __builtin_expect(!!(x), 1)
-#define unlikely(x) __builtin_expect(!!(x), 0)
-#else
-#define likely(x) !!(x)
-#define unlikely(x) !!(x)
+#ifndef likely
+#  if defined(__GNUC__)
+#    define likely(x)   __builtin_expect(!!(x), 1)
+#    define unlikely(x) __builtin_expect(!!(x), 0)
+#  else
+#    define likely(x)   (x)
+#    define unlikely(x) (x)
+#  endif
 #endif
 
 
index e3cc28ba476b3419c53dbec36cd9455bdee396ed..75df89f2acb8240232212cf6ef01331f5a19cb2a 100644 (file)
@@ -414,78 +414,80 @@ enum pipe_transfer_usage {
  * pipe_screen::get_param() and pipe_screen::get_paramf().
  */
 enum pipe_cap {
-   PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS,
-   PIPE_CAP_NPOT_TEXTURES,
-   PIPE_CAP_TWO_SIDED_STENCIL,
-   PIPE_CAP_GLSL,  /* XXX need something better */
-   PIPE_CAP_DUAL_SOURCE_BLEND,
-   PIPE_CAP_ANISOTROPIC_FILTER,
-   PIPE_CAP_POINT_SPRITE,
-   PIPE_CAP_MAX_RENDER_TARGETS,
-   PIPE_CAP_OCCLUSION_QUERY,
-   PIPE_CAP_TIMER_QUERY,
-   PIPE_CAP_TEXTURE_SHADOW_MAP,
-   PIPE_CAP_TEXTURE_SWIZZLE,
-   PIPE_CAP_MAX_TEXTURE_2D_LEVELS,
-   PIPE_CAP_MAX_TEXTURE_3D_LEVELS,
-   PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS,
-   PIPE_CAP_MAX_LINE_WIDTH,
-   PIPE_CAP_MAX_LINE_WIDTH_AA,
-   PIPE_CAP_MAX_POINT_WIDTH,
-   PIPE_CAP_MAX_POINT_WIDTH_AA,
-   PIPE_CAP_MAX_TEXTURE_ANISOTROPY,
-   PIPE_CAP_MAX_TEXTURE_LOD_BIAS,
-   PIPE_CAP_GUARD_BAND_LEFT,  /*< float */
-   PIPE_CAP_GUARD_BAND_TOP,  /*< float */
-   PIPE_CAP_GUARD_BAND_RIGHT,  /*< float */
-   PIPE_CAP_GUARD_BAND_BOTTOM,  /*< float */
-   PIPE_CAP_TEXTURE_MIRROR_CLAMP,
-   PIPE_CAP_TEXTURE_MIRROR_REPEAT,
-   PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS,
-   PIPE_CAP_BLEND_EQUATION_SEPARATE,
-   PIPE_CAP_SM3,  /*< Shader Model, supported */
-   PIPE_CAP_STREAM_OUTPUT,
-   PIPE_CAP_PRIMITIVE_RESTART,
+   PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS = 0,
+   PIPE_CAP_NPOT_TEXTURES = 1,
+   PIPE_CAP_TWO_SIDED_STENCIL = 2,
+   PIPE_CAP_GLSL = 3,  /* XXX need something better */
+   PIPE_CAP_DUAL_SOURCE_BLEND = 4,
+   PIPE_CAP_ANISOTROPIC_FILTER = 5,
+   PIPE_CAP_POINT_SPRITE = 6,
+   PIPE_CAP_MAX_RENDER_TARGETS = 7,
+   PIPE_CAP_OCCLUSION_QUERY = 8,
+   PIPE_CAP_TIMER_QUERY = 9,
+   PIPE_CAP_TEXTURE_SHADOW_MAP = 10,
+   PIPE_CAP_TEXTURE_SWIZZLE = 11,
+   PIPE_CAP_MAX_TEXTURE_2D_LEVELS = 12,
+   PIPE_CAP_MAX_TEXTURE_3D_LEVELS = 13,
+   PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS = 14,
+   PIPE_CAP_MAX_LINE_WIDTH = 15,
+   PIPE_CAP_MAX_LINE_WIDTH_AA = 16,
+   PIPE_CAP_MAX_POINT_WIDTH = 17,
+   PIPE_CAP_MAX_POINT_WIDTH_AA = 18,
+   PIPE_CAP_MAX_TEXTURE_ANISOTROPY = 19,
+   PIPE_CAP_MAX_TEXTURE_LOD_BIAS = 20,
+   PIPE_CAP_GUARD_BAND_LEFT = 21,  /*< float */
+   PIPE_CAP_GUARD_BAND_TOP = 22,  /*< float */
+   PIPE_CAP_GUARD_BAND_RIGHT = 23,  /*< float */
+   PIPE_CAP_GUARD_BAND_BOTTOM = 24,  /*< float */
+   PIPE_CAP_TEXTURE_MIRROR_CLAMP = 25,
+   PIPE_CAP_TEXTURE_MIRROR_REPEAT = 26,
+   PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS = 27,
+   PIPE_CAP_BLEND_EQUATION_SEPARATE = 28,
+   PIPE_CAP_SM3 = 29,  /*< Shader Model, supported */
+   PIPE_CAP_STREAM_OUTPUT = 30,
+   PIPE_CAP_PRIMITIVE_RESTART = 31,
    /** Maximum texture image units accessible from vertex and fragment shaders
     * combined */
-   PIPE_CAP_MAX_COMBINED_SAMPLERS,
+   PIPE_CAP_MAX_COMBINED_SAMPLERS = 32,
    /** blend enables and write masks per rendertarget */
-   PIPE_CAP_INDEP_BLEND_ENABLE,
+   PIPE_CAP_INDEP_BLEND_ENABLE = 33,
    /** different blend funcs per rendertarget */
-   PIPE_CAP_INDEP_BLEND_FUNC,
-   PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE,
-   PIPE_CAP_ARRAY_TEXTURES,
-   PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT,
-   PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT,
-   PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER,
-   PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER,
-   PIPE_CAP_DEPTH_CLAMP,
-   PIPE_CAP_SHADER_STENCIL_EXPORT,
-   PIPE_CAP_TGSI_INSTANCEID,
-   PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR,
+   PIPE_CAP_INDEP_BLEND_FUNC = 34,
+   PIPE_CAP_DEPTHSTENCIL_CLEAR_SEPARATE = 35,
+   PIPE_CAP_ARRAY_TEXTURES = 36,
+   PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT = 37,
+   PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT = 38,
+   PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER = 39,
+   PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER = 40,
+   PIPE_CAP_DEPTH_CLAMP = 41,
+   PIPE_CAP_SHADER_STENCIL_EXPORT = 42,
+   PIPE_CAP_TGSI_INSTANCEID = 43,
+   PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR = 44,
+   PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL = 45,
+   PIPE_CAP_MIXED_COLORBUFFER_FORMATS = 46,
 };
 
 /* Shader caps not specific to any single stage */
 enum pipe_shader_cap
 {
-   PIPE_SHADER_CAP_MAX_INSTRUCTIONS, /* if 0, it means the stage is unsupported */
-   PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS,
-   PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS,
-   PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS,
-   PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH,
-   PIPE_SHADER_CAP_MAX_INPUTS,
-   PIPE_SHADER_CAP_MAX_CONSTS,
-   PIPE_SHADER_CAP_MAX_CONST_BUFFERS,
-   PIPE_SHADER_CAP_MAX_TEMPS,
-   PIPE_SHADER_CAP_MAX_ADDRS,
-   PIPE_SHADER_CAP_MAX_PREDS,
+   PIPE_SHADER_CAP_MAX_INSTRUCTIONS = 0, /* if 0, it means the stage is unsupported */
+   PIPE_SHADER_CAP_MAX_ALU_INSTRUCTIONS = 1,
+   PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS = 2,
+   PIPE_SHADER_CAP_MAX_TEX_INDIRECTIONS = 3,
+   PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH = 4,
+   PIPE_SHADER_CAP_MAX_INPUTS = 5,
+   PIPE_SHADER_CAP_MAX_CONSTS = 6,
+   PIPE_SHADER_CAP_MAX_CONST_BUFFERS = 7,
+   PIPE_SHADER_CAP_MAX_TEMPS = 8,
+   PIPE_SHADER_CAP_MAX_ADDRS = 9,
+   PIPE_SHADER_CAP_MAX_PREDS = 10,
    /* boolean caps */
-   PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED,
-   PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR,
-   PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR,
-   PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR,
-   PIPE_SHADER_CAP_INDIRECT_CONST_ADDR,
-   PIPE_SHADER_CAP_SUBROUTINES, /* BGNSUB, ENDSUB, CAL, RET */
+   PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED = 11,
+   PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR = 12,
+   PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR = 13,
+   PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR = 14,
+   PIPE_SHADER_CAP_INDIRECT_CONST_ADDR = 15,
+   PIPE_SHADER_CAP_SUBROUTINES = 16, /* BGNSUB, ENDSUB, CAL, RET */
 };
 
 
index 542931ec1d894cbd57644379b1dbfe4d827b01fe..c9f75c019ef1df8bd4beb52d5ed9d2799877d3bd 100644 (file)
@@ -211,17 +211,35 @@ enum pipe_format {
    PIPE_FORMAT_LATC2_UNORM             = 145,
    PIPE_FORMAT_LATC2_SNORM             = 146,
 
-   PIPE_FORMAT_YV12                    = 147,
-   PIPE_FORMAT_YV16                    = 148,
-   PIPE_FORMAT_IYUV                    = 149,  /**< aka I420 */
-   PIPE_FORMAT_NV12                    = 150,
-   PIPE_FORMAT_NV21                    = 151,
+   PIPE_FORMAT_A8_SNORM                = 147,
+   PIPE_FORMAT_L8_SNORM                = 148,
+   PIPE_FORMAT_L8A8_SNORM              = 149,
+   PIPE_FORMAT_I8_SNORM                = 150,
+   PIPE_FORMAT_A16_SNORM               = 151,
+   PIPE_FORMAT_L16_SNORM               = 152,
+   PIPE_FORMAT_L16A16_SNORM            = 153,
+   PIPE_FORMAT_I16_SNORM               = 154,
+
+   PIPE_FORMAT_A16_FLOAT               = 155,
+   PIPE_FORMAT_L16_FLOAT               = 156,
+   PIPE_FORMAT_L16A16_FLOAT            = 157,
+   PIPE_FORMAT_I16_FLOAT               = 158,
+   PIPE_FORMAT_A32_FLOAT               = 159,
+   PIPE_FORMAT_L32_FLOAT               = 160,
+   PIPE_FORMAT_L32A32_FLOAT            = 161,
+   PIPE_FORMAT_I32_FLOAT               = 162,
+
+   PIPE_FORMAT_YV12                    = 163,
+   PIPE_FORMAT_YV16                    = 164,
+   PIPE_FORMAT_IYUV                    = 165,  /**< aka I420 */
+   PIPE_FORMAT_NV12                    = 166,
+   PIPE_FORMAT_NV21                    = 167,
    PIPE_FORMAT_AYUV                    = PIPE_FORMAT_A8R8G8B8_UNORM,
    PIPE_FORMAT_VUYA                    = PIPE_FORMAT_B8G8R8A8_UNORM,
    PIPE_FORMAT_XYUV                    = PIPE_FORMAT_X8R8G8B8_UNORM,
    PIPE_FORMAT_VUYX                    = PIPE_FORMAT_B8G8R8X8_UNORM,
-   PIPE_FORMAT_IA44                    = 152,
-   PIPE_FORMAT_AI44                    = 153,
+   PIPE_FORMAT_IA44                    = 168,
+   PIPE_FORMAT_AI44                    = 169,
 
    PIPE_FORMAT_COUNT
 };
index cf6c5b50268d3cb85f938893a4a474f8bfb5291f..f6ad4560f16500598d8f254078b8705f9d96dabd 100644 (file)
@@ -81,6 +81,8 @@ struct pipe_rasterizer_state
 {
    unsigned flatshade:1;
    unsigned light_twoside:1;
+   unsigned clamp_vertex_color:1;
+   unsigned clamp_fragment_color:1;
    unsigned front_ccw:1;
    unsigned cull_face:2;      /**< PIPE_FACE_x */
    unsigned fill_front:2;     /**< PIPE_POLYGON_MODE_x */
index 068c3cd7c8e5f5b41fdc05a5ea156dc9e3708086..b9cf8c48f1ed7c236b587fb548416193665a7fe8 100644 (file)
@@ -33,6 +33,7 @@
 #include "state_tracker/drm_driver.h"
 
 #include "egllog.h"
+#include <errno.h>
 
 #include "native_wayland.h"
 
@@ -45,6 +46,9 @@
 #include "wayland-egl-priv.h"
 
 #include <xf86drm.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
 
 static struct native_event_handler *wayland_event_handler;
 
@@ -135,6 +139,12 @@ wayland_display_destroy(struct native_display *ndpy)
 {
    struct wayland_display *display = wayland_display(ndpy);
 
+   if (display->fd)
+      close(display->fd);
+   if (display->wl_drm)
+      wl_drm_destroy(display->wl_drm);
+   if (display->device_name)
+      FREE(display->device_name);
    if (display->config)
       FREE(display->config);
 
@@ -161,7 +171,7 @@ wayland_create_buffer(struct wayland_surface *surface,
 
    pipe_resource_reference(&resource, NULL);
 
-   return wl_drm_create_buffer(display->dpy->drm, wsh.handle,
+   return wl_drm_create_buffer(display->wl_drm, wsh.handle,
                                width, height,
                                wsh.stride, surface->win->visual);
 }
@@ -174,21 +184,24 @@ wayland_pixmap_destroy(struct wl_egl_pixmap *egl_pixmap)
    assert(resource);
 
    pipe_resource_reference(&resource, NULL);
+   if (egl_pixmap->buffer) {
+      wl_buffer_destroy(egl_pixmap->buffer);
+      egl_pixmap->buffer = NULL;
+   }
    
    egl_pixmap->driver_private = NULL;
    egl_pixmap->destroy = NULL;
-   egl_pixmap->name = 0;
 }
 
 static void
-wayland_pixmap_surface_intialize(struct wayland_surface *surface)
+wayland_pixmap_surface_initialize(struct wayland_surface *surface)
 {
    struct native_display *ndpy = &surface->display->base;
    struct pipe_resource *resource;
    struct winsys_handle wsh;
    const enum native_attachment front_natt = NATIVE_ATTACHMENT_FRONT_LEFT;
 
-   if (surface->pix->name > 0)
+   if (surface->pix->buffer != NULL)
       return;
 
    resource = resource_surface_get_single_resource(surface->rsurf, front_natt);
@@ -196,8 +209,11 @@ wayland_pixmap_surface_intialize(struct wayland_surface *surface)
    wsh.type = DRM_API_HANDLE_TYPE_SHARED;
    ndpy->screen->resource_get_handle(ndpy->screen, resource, &wsh);
 
-   surface->pix->name           = wsh.handle;
-   surface->pix->stride         = wsh.stride;
+   surface->pix->buffer =
+      wl_drm_create_buffer(surface->display->wl_drm, wsh.handle,
+                           surface->pix->width, surface->pix->height,
+                           wsh.stride, surface->pix->visual);
+
    surface->pix->destroy        = wayland_pixmap_destroy;
    surface->pix->driver_private = resource;
 }
@@ -228,12 +244,12 @@ wayland_window_surface_handle_resize(struct wayland_surface *surface)
        surface->win->width, surface->win->height)) {
 
       if (surface->pending_resource)
-         force_roundtrip(display->dpy->display);
+         force_roundtrip(display->dpy);
 
       if (front_resource) {
          surface->pending_resource = front_resource;
          front_resource = NULL;
-         wl_display_sync_callback(display->dpy->display,
+         wl_display_sync_callback(display->dpy,
                                   wayland_release_pending_resource, surface);
       }
 
@@ -274,13 +290,13 @@ wayland_surface_validate(struct native_surface *nsurf, uint attachment_mask,
    resource_surface_get_size(surface->rsurf, (uint *) width, (uint *) height);
 
    if (surface->type == WL_PIXMAP_SURFACE)
-      wayland_pixmap_surface_intialize(surface);
+      wayland_pixmap_surface_initialize(surface);
 
    return TRUE;
 }
 
 static void
-wayland_frame_callback(void *data, uint32_t time)
+wayland_frame_callback(struct wl_surface *surf, void *data, uint32_t time)
 {
    struct wayland_surface *surface = data;
 
@@ -304,11 +320,11 @@ wayland_surface_swap_buffers(struct native_surface *nsurf)
    struct wayland_display *display = surface->display;
 
    while (surface->block_swap_buffers)
-      wl_display_iterate(display->dpy->display, WL_DISPLAY_READABLE);
+      wl_display_iterate(display->dpy, WL_DISPLAY_READABLE);
 
    surface->block_swap_buffers = TRUE;
-   wl_display_frame_callback(display->dpy->display, wayland_frame_callback,
-                             surface);
+   wl_display_frame_callback(display->dpy, surface->win->surface,
+                             wayland_frame_callback, surface);
 
    if (surface->type == WL_WINDOW_SURFACE) {
       resource_surface_swap_buffers(surface->rsurf,
@@ -364,6 +380,7 @@ wayland_surface_present(struct native_surface *nsurf,
 
    if (surface->type == WL_WINDOW_SURFACE) {
       resource_surface_get_size(surface->rsurf, &width, &height);
+      wl_buffer_damage(surface->buffer[WL_BUFFER_FRONT], 0, 0, width, height);
       wl_surface_damage(surface->win->surface, 0, 0, width, height);
    }
 
@@ -397,7 +414,6 @@ wayland_create_pixmap_surface(struct native_display *ndpy,
                               const struct native_config *nconf)
 {
    struct wayland_display *display = wayland_display(ndpy);
-   struct wayland_config *config = wayland_config(nconf);
    struct wayland_surface *surface;
    struct wl_egl_pixmap *egl_pixmap = (struct wl_egl_pixmap *) pix;
    enum native_attachment natt = NATIVE_ATTACHMENT_FRONT_LEFT;
@@ -412,7 +428,7 @@ wayland_create_pixmap_surface(struct native_display *ndpy,
    surface->type = WL_PIXMAP_SURFACE;
    surface->pix = egl_pixmap;
 
-   if (surface->pix->visual == wl_display_get_rgb_visual(display->dpy->display))
+   if (surface->pix->visual == wl_display_get_rgb_visual(display->dpy))
       surface->color_format = PIPE_FORMAT_B8G8R8X8_UNORM;
    else
       surface->color_format = PIPE_FORMAT_B8G8R8A8_UNORM;
@@ -433,7 +449,7 @@ wayland_create_pixmap_surface(struct native_display *ndpy,
                              egl_pixmap->width, egl_pixmap->height);
 
    /* the pixmap is already allocated, so import it */
-   if (surface->pix->name > 0)
+   if (surface->pix->buffer != NULL)
       resource_surface_import_resource(surface->rsurf, natt,
                                        surface->pix->driver_private);
 
@@ -511,35 +527,80 @@ get_drm_screen_name(int fd, drmVersionPtr version)
    return name;
 }
 
+static void
+drm_handle_device(void *data, struct wl_drm *drm, const char *device)
+{
+   struct wayland_display *display = data;
+   drm_magic_t magic;
+
+   display->device_name = strdup(device);
+   if (!display->device_name)
+      return;
+
+   display->fd = open(display->device_name, O_RDWR);
+   if (display->fd == -1) {
+      _eglLog(_EGL_WARNING, "wayland-egl: could not open %s (%s)",
+              display->device_name, strerror(errno));
+      return;
+   }
+
+   drmGetMagic(display->fd, &magic);
+   wl_drm_authenticate(display->wl_drm, magic);
+}
+
+static void
+drm_handle_authenticated(void *data, struct wl_drm *drm)
+{
+   struct wayland_display *display = data;
+
+   display->authenticated = true;
+}
+
+static const struct wl_drm_listener drm_listener = {
+   drm_handle_device,
+   drm_handle_authenticated
+};
+
 static boolean
 wayland_display_init_screen(struct native_display *ndpy)
 {
    struct wayland_display *display = wayland_display(ndpy);
    drmVersionPtr version;
    const char *driver_name;
+   uint32_t id;
 
-   if (display->dpy->fd == -1)
-          force_roundtrip(display->dpy->display);
-   if (display->dpy->fd == -1)
-          return FALSE;
+   id = wl_display_get_global(display->dpy, "wl_drm", 1);
+   if (id == 0)
+      wl_display_iterate(display->dpy, WL_DISPLAY_READABLE);
+   id = wl_display_get_global(display->dpy, "wl_drm", 1);
+   if (id == 0)
+      return FALSE;
 
-   if (!display->dpy->authenticated)
-          force_roundtrip(display->dpy->display);
-   if (!display->dpy->authenticated)
+   display->wl_drm = wl_drm_create(display->dpy, id, 1);
+   if (!display->wl_drm)
           return FALSE;
 
-   version = drmGetVersion(display->dpy->fd);
+   wl_drm_add_listener(display->wl_drm, &drm_listener, display);
+   force_roundtrip(display->dpy);
+   if (display->fd == -1)
+      return FALSE;
+
+   force_roundtrip(display->dpy);
+   if (!display->authenticated)
+      return FALSE;
+
+   version = drmGetVersion(display->fd);
    if (!version) {
-      _eglLog(_EGL_WARNING, "invalid fd %d", display->dpy->fd);
+      _eglLog(_EGL_WARNING, "invalid fd %d", display->fd);
       return FALSE;
    }
 
    /* FIXME: share this with native_drm or egl_dri2 */
-   driver_name = get_drm_screen_name(display->dpy->fd, version);
+   driver_name = get_drm_screen_name(display->fd, version);
 
    display->base.screen =
       wayland_event_handler->new_drm_screen(&display->base,
-            driver_name, display->dpy->fd);
+            driver_name, display->fd);
    drmFreeVersion(version);
 
    if (!display->base.screen) {
@@ -592,7 +653,7 @@ wayland_display_create(void *dpy, boolean use_sw, void *user_data)
    display->base.user_data = user_data;
 
    display->dpy = dpy;
-   if (!display->dpy->display) {
+   if (!display->dpy) {
       wayland_display_destroy(&display->base);
       return NULL;
    }
index 271c10dc1136737600c2eb3df052fd829dab65d9..14fc9b0fbb262ced0d838c6bf918c5e49653ef11 100644 (file)
 #include "common/native_helper.h"
 
 #include "wayland-egl-priv.h"
+#include "wayland-drm-client-protocol.h"
 
 struct wayland_display {
    struct native_display base;
 
    struct wayland_config *config;
-   struct wl_egl_display *dpy;
+   struct wl_display *dpy;
+   struct wl_drm *wl_drm;
+   int fd;
+   char *device_name;
+   boolean authenticated;
 };
 
 enum wayland_buffer_type {
diff --git a/src/gallium/state_trackers/python/README b/src/gallium/state_trackers/python/README
deleted file mode 100644 (file)
index e24a262..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-This directory contains Python bindings to Gallium3D. It looks like a state
-tracker from the pipe driver perspective, and it looks like a pipe driver from
-the python script perspective.
-
-
-To build you'll need:
-* Python (with development packages)
-* SCons
-* SWIG, http://www.swig.org/download.html
-* Python Imaging Library with TK support, http://www.pythonware.com/products/pil/, 
-  for the samples
-
-On a debian-based distro you can simply do:
-
-  aptitude install python-dev scons swig python-imaging python-imaging-tk
-
-On a Windows machine ensure the swig command is in your PATH.
-
-Invoke scons on the top dir as
-  scons debug=yes statetrackers=python drivers=softpipe winsys=none
-
-To use it set PYTHONPATH appropriately, e.g, in Linux do:
-
-  export PYTHONPATH=$PWD/build/linux-x86-debug/gallium/state_trackers/python
-
-or (in Windows)
-
-  set PYTHONPATH=%CD%\build\windows-x86-debug\gallium\state_trackers\python
-
-and then try running
-
-  python progs/gallium/python/samples/tri.py
-
-which should show a triangle.
-
-
-This is still work in progress:
-- errors are not handled properly and almost always result in crash
-- state atoms with array members are awkward to set
-
---
-Jose Fonseca <jfonseca@vmware.com>
diff --git a/src/gallium/state_trackers/python/SConscript b/src/gallium/state_trackers/python/SConscript
deleted file mode 100644 (file)
index b837186..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-import sys
-import os.path
-
-Import('*')
-
-if env['toolchain'] == 'crossmingw':
-    # Cross-compilation not supported
-    Return()
-
-if not env.Detect(['swig']):
-    Return()
-
-env = env.Clone()
-
-env.Tool('python')
-
-env.Tool('swig')
-env.Append(SWIGPATH = ['#src/gallium/include', '#src/gallium/include/pipe'])
-env.Append(SWIGFLAGS = ['-python', '-keyword'])
-
-env.Append(CPPPATH = '.')
-
-if env['platform'] == 'windows':
-    env.Append(LIBS = [
-        'opengl32',
-        'gdi32',
-        'user32',
-        'kernel32',
-        'ws2_32',
-    ])
-else:
-    env.Append(CPPDEFINES = ['GCC_HASCLASSVISIBILITY'])
-    env.Append(LIBS = [
-        'GL',
-        'X11',
-    ])
-
-sources = [
-    'gallium.i',
-    'st_device.c',
-    'st_sample.c',
-    'st_hardpipe_winsys.c',
-    'st_softpipe_winsys.c',
-]
-
-env.Prepend(LIBS = [
-    ws_null,
-    trace,
-    gallium,
-])
-
-if env['llvm']:
-    env.Append(CPPDEFINES = ['HAVE_LLVMPIPE'])
-    env.Prepend(LIBS = [llvmpipe])
-if True:
-    env.Append(CPPDEFINES = ['HAVE_SOFTPIPE'])
-    env.Prepend(LIBS = [softpipe])
-
-env['no_import_lib'] = 1
-
-pyst = env.SharedLibrary(
-    target = '_gallium',
-    source = sources,
-)
-
-env.Alias('python', pyst)
diff --git a/src/gallium/state_trackers/python/gallium.i b/src/gallium/state_trackers/python/gallium.i
deleted file mode 100644 (file)
index c6084f7..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
- /**************************************************************************
- * 
- * Copyright 2008 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, 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 TUNGSTEN 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.
- * 
- **************************************************************************/
-
-/**
- * @file
- * SWIG interface definion for Gallium types.
- *
- * @author Jose Fonseca <jrfonseca@tungstengraphics.com>
- */
-
-%module gallium;
-
-%{
-
-#include <stdio.h>
-
-#include "pipe/p_screen.h"
-#include "pipe/p_context.h"
-#include "pipe/p_shader_tokens.h"
-#include "os/os_stream.h"
-#include "util/u_inlines.h"
-#include "util/u_draw_quad.h"
-#include "util/u_tile.h"
-#include "util/u_math.h"
-#include "util/u_format.h"
-#include "util/u_dump.h"
-#include "util/u_memory.h"
-#include "util/u_sampler.h"
-#include "cso_cache/cso_context.h"
-#include "tgsi/tgsi_text.h"
-#include "tgsi/tgsi_dump.h"
-
-#include "st_device.h"
-#include "st_sample.h"
-
-%}
-
-%include "typemaps.i"
-%include "exception.i"
-%include "cstring.i"
-
-%include "carrays.i"
-%array_class(unsigned char, ByteArray);
-%array_class(int, IntArray);
-%array_class(unsigned, UnsignedArray);
-%array_class(float, FloatArray);
-
-
-%rename(Device) st_device;
-%rename(Context) st_context;
-%rename(Resource) pipe_resource;
-%rename(Surface) st_surface;
-
-%rename(BlendColor) pipe_blend_color;
-%rename(Blend) pipe_blend_state;
-%rename(Clip) pipe_clip_state;
-%rename(Depth) pipe_depth_state;
-%rename(Stencil) pipe_stencil_state;
-%rename(Alpha) pipe_alpha_state;
-%rename(DepthStencilAlpha) pipe_depth_stencil_alpha_state;
-%rename(Framebuffer) pipe_framebuffer_state;
-%rename(PolyStipple) pipe_poly_stipple;
-%rename(Rasterizer) pipe_rasterizer_state;
-%rename(Sampler) pipe_sampler_state;
-%rename(Scissor) pipe_scissor_state;
-%rename(Shader) pipe_shader_state;
-%rename(VertexBuffer) pipe_vertex_buffer;
-%rename(VertexElement) pipe_vertex_element;
-%rename(Viewport) pipe_viewport_state;
-
-
-%include "p_compiler.i"
-%include "p_defines.h"
-%include "p_format.h"
-
-%include "p_device.i"
-%include "p_context.i"
-%include "p_texture.i"
-%include "p_state.i"
-
-%include "u_format.i"
diff --git a/src/gallium/state_trackers/python/p_compiler.i b/src/gallium/state_trackers/python/p_compiler.i
deleted file mode 100644 (file)
index 15f6ba5..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
- /**************************************************************************
- * 
- * Copyright 2008 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, 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 TUNGSTEN 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.
- * 
- **************************************************************************/
-
-
-typedef unsigned char ubyte;
diff --git a/src/gallium/state_trackers/python/p_context.i b/src/gallium/state_trackers/python/p_context.i
deleted file mode 100644 (file)
index 17d25ad..0000000
+++ /dev/null
@@ -1,756 +0,0 @@
- /**************************************************************************
- * 
- * Copyright 2008 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, 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 TUNGSTEN 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.
- * 
- **************************************************************************/
-
-/**
- * @file
- * SWIG interface definion for Gallium types.
- *
- * @author Jose Fonseca <jrfonseca@tungstengraphics.com>
- */
-
-%nodefaultctor st_context;
-%nodefaultdtor st_context;
-
-struct st_context {
-};
-
-%extend st_context {
-   
-   ~st_context() {
-      st_context_destroy($self);
-   }
-   
-   /*
-    * State functions (create/bind/destroy state objects)
-    */
-
-   void set_blend( const struct pipe_blend_state *state ) {
-      cso_set_blend($self->cso, state);
-   }
-
-   void set_fragment_sampler( unsigned index, const struct pipe_sampler_state *state ) {
-      cso_single_sampler($self->cso, index, state);
-      cso_single_sampler_done($self->cso);
-   }
-
-   void set_vertex_sampler( unsigned index, const struct pipe_sampler_state *state ) {
-      cso_single_vertex_sampler($self->cso, index, state);
-      cso_single_vertex_sampler_done($self->cso);
-   }
-
-   void set_rasterizer( const struct pipe_rasterizer_state *state ) {
-      cso_set_rasterizer($self->cso, state);
-   }
-
-   void set_depth_stencil_alpha(const struct pipe_depth_stencil_alpha_state *state) {
-      cso_set_depth_stencil_alpha($self->cso, state);
-   }
-
-   void set_fragment_shader( const struct pipe_shader_state *state ) {
-      void *fs;
-      
-      if(!state) {
-         cso_set_fragment_shader_handle($self->cso, NULL);
-         return;
-      }
-      
-      fs = $self->pipe->create_fs_state($self->pipe, state);
-      if(!fs)
-         return;
-      
-      if(cso_set_fragment_shader_handle($self->cso, fs) != PIPE_OK)
-         return;
-
-      cso_delete_fragment_shader($self->cso, $self->fs);
-      $self->fs = fs;
-   }
-
-   void set_vertex_shader( const struct pipe_shader_state *state ) {
-      void *vs;
-      
-      if(!state) {
-         cso_set_vertex_shader_handle($self->cso, NULL);
-         return;
-      }
-      
-      vs = $self->pipe->create_vs_state($self->pipe, state);
-      if(!vs)
-         return;
-      
-      if(cso_set_vertex_shader_handle($self->cso, vs) != PIPE_OK)
-         return;
-
-      cso_delete_vertex_shader($self->cso, $self->vs);
-      $self->vs = vs;
-   }
-
-   void set_geometry_shader( const struct pipe_shader_state *state ) {
-      void *gs;
-
-      if(!state) {
-         cso_set_geometry_shader_handle($self->cso, NULL);
-         return;
-      }
-
-      gs = $self->pipe->create_gs_state($self->pipe, state);
-      if(!gs)
-         return;
-
-      if(cso_set_geometry_shader_handle($self->cso, gs) != PIPE_OK)
-         return;
-
-      cso_delete_geometry_shader($self->cso, $self->gs);
-      $self->gs = gs;
-   }
-
-   struct pipe_sampler_view *
-   create_sampler_view(struct pipe_resource *texture,
-                       enum pipe_format format = PIPE_FORMAT_NONE,
-                       unsigned first_level = 0,
-                       unsigned last_level = ~0,
-                       unsigned first_layer = 0,
-                       unsigned last_layer = ~0,
-                       unsigned swizzle_r = 0,
-                       unsigned swizzle_g = 1,
-                       unsigned swizzle_b = 2,
-                       unsigned swizzle_a = 3)
-   {
-      struct pipe_context *pipe = $self->pipe;
-      struct pipe_sampler_view templat;
-
-      memset(&templat, 0, sizeof templat);
-      if (format == PIPE_FORMAT_NONE) {
-         templat.format = texture->format;
-      } else {
-         templat.format = format;
-      }
-      templat.u.tex.last_level = MIN2(last_level, texture->last_level);
-      templat.u.tex.first_level = first_level;
-      templat.u.tex.first_layer = first_layer;
-      templat.u.tex.last_layer = last_layer;
-      templat.swizzle_r = swizzle_r;
-      templat.swizzle_g = swizzle_g;
-      templat.swizzle_b = swizzle_b;
-      templat.swizzle_a = swizzle_a;
-
-      return pipe->create_sampler_view(pipe, texture, &templat);
-   }
-
-   void
-   sampler_view_destroy(struct pipe_context *ctx,
-                        struct pipe_sampler_view *view)
-   {
-      struct pipe_context *pipe = $self->pipe;
-
-      pipe->sampler_view_destroy(pipe, view);
-   }
-
-   /*
-    * Parameter-like state (or properties)
-    */
-
-   void set_blend_color(const struct pipe_blend_color *state ) {
-      cso_set_blend_color($self->cso, state);
-   }
-
-   void set_stencil_ref(const struct pipe_stencil_ref *state ) {
-      cso_set_stencil_ref($self->cso, state);
-   }
-
-   void set_clip(const struct pipe_clip_state *state ) {
-      $self->pipe->set_clip_state($self->pipe, state);
-   }
-
-   void set_constant_buffer(unsigned shader, unsigned index,
-                            struct pipe_resource *buffer ) 
-   {
-      $self->pipe->set_constant_buffer($self->pipe, shader, index, buffer);
-   }
-
-   void set_framebuffer(const struct pipe_framebuffer_state *state ) 
-   {
-      memcpy(&$self->framebuffer, state, sizeof *state);
-      cso_set_framebuffer($self->cso, state);
-   }
-
-   void set_polygon_stipple(const struct pipe_poly_stipple *state ) {
-      $self->pipe->set_polygon_stipple($self->pipe, state);
-   }
-
-   void set_scissor(const struct pipe_scissor_state *state ) {
-      $self->pipe->set_scissor_state($self->pipe, state);
-   }
-
-   void set_viewport(const struct pipe_viewport_state *state) {
-      cso_set_viewport($self->cso, state);
-   }
-
-   void set_fragment_sampler_view(unsigned index,
-                                  struct pipe_sampler_view *view)
-   {
-      pipe_sampler_view_reference(&$self->fragment_sampler_views[index], view);
-
-      $self->pipe->set_fragment_sampler_views($self->pipe,
-                                              PIPE_MAX_SAMPLERS,
-                                              $self->fragment_sampler_views);
-   }
-
-   void set_vertex_sampler_view(unsigned index,
-                                struct pipe_sampler_view *view)
-   {
-      pipe_sampler_view_reference(&$self->vertex_sampler_views[index], view);
-
-      $self->pipe->set_vertex_sampler_views($self->pipe,
-                                            PIPE_MAX_VERTEX_SAMPLERS,
-                                            $self->vertex_sampler_views);
-   }
-
-   void set_fragment_sampler_texture(unsigned index,
-                                     struct pipe_resource *texture) {
-      struct pipe_sampler_view templ;
-
-      if(!texture)
-         texture = $self->default_texture;
-      pipe_sampler_view_reference(&$self->fragment_sampler_views[index], NULL);
-      u_sampler_view_default_template(&templ,
-                                      texture,
-                                      texture->format);
-      $self->fragment_sampler_views[index] = $self->pipe->create_sampler_view($self->pipe,
-                                                                              texture,
-                                                                              &templ);
-      $self->pipe->set_fragment_sampler_views($self->pipe,
-                                              PIPE_MAX_SAMPLERS,
-                                              $self->fragment_sampler_views);
-   }
-
-   void set_vertex_sampler_texture(unsigned index,
-                                   struct pipe_resource *texture) {
-      struct pipe_sampler_view templ;
-
-      if(!texture)
-         texture = $self->default_texture;
-      pipe_sampler_view_reference(&$self->vertex_sampler_views[index], NULL);
-      u_sampler_view_default_template(&templ,
-                                      texture,
-                                      texture->format);
-      $self->vertex_sampler_views[index] = $self->pipe->create_sampler_view($self->pipe,
-                                                                            texture,
-                                                                            &templ);
-      
-      $self->pipe->set_vertex_sampler_views($self->pipe,
-                                            PIPE_MAX_VERTEX_SAMPLERS,
-                                            $self->vertex_sampler_views);
-   }
-
-   void set_vertex_buffer(unsigned index,
-                          unsigned stride, 
-                          unsigned buffer_offset,
-                          struct pipe_resource *buffer)
-   {
-      unsigned i;
-      struct pipe_vertex_buffer state;
-      
-      memset(&state, 0, sizeof(state));
-      state.stride = stride;
-      state.buffer_offset = buffer_offset;
-      state.buffer = buffer;
-
-      memcpy(&$self->vertex_buffers[index], &state, sizeof(state));
-      
-      for(i = 0; i < PIPE_MAX_ATTRIBS; ++i)
-         if(self->vertex_buffers[i].buffer)
-            $self->num_vertex_buffers = i + 1;
-      
-      $self->pipe->set_vertex_buffers($self->pipe, 
-                                      $self->num_vertex_buffers, 
-                                      $self->vertex_buffers);
-   }
-
-   void set_index_buffer(unsigned index_size,
-                         unsigned offset,
-                         struct pipe_resource *buffer)
-   {
-      struct pipe_index_buffer ib;
-
-      memset(&ib, 0, sizeof(ib));
-      ib.index_size = index_size;
-      ib.offset = offset;
-      ib.buffer = buffer;
-
-      $self->pipe->set_index_buffer($self->pipe, &ib);
-   }
-
-   void set_vertex_element(unsigned index,
-                           const struct pipe_vertex_element *element) 
-   {
-      memcpy(&$self->vertex_elements[index], element, sizeof(*element));
-   }
-
-   void set_vertex_elements(unsigned num) 
-   {
-      $self->num_vertex_elements = num;
-      cso_set_vertex_elements($self->cso,
-                              $self->num_vertex_elements, 
-                              $self->vertex_elements);
-   }
-
-   /*
-    * Draw functions
-    */
-   
-   void draw_arrays(unsigned mode, unsigned start, unsigned count) {
-      util_draw_arrays($self->pipe, mode, start, count);
-   }
-
-   void draw_vbo(const struct pipe_draw_info *info)
-   {
-      $self->pipe->draw_vbo($self->pipe, info);
-   }
-
-   void draw_vertices(unsigned prim,
-                      unsigned num_verts,
-                      unsigned num_attribs,
-                      const float *vertices) 
-   {
-      struct pipe_context *pipe = $self->pipe;
-      struct pipe_screen *screen = pipe->screen;
-      struct pipe_resource *vbuf;
-      struct pipe_transfer *transfer;
-      struct pipe_vertex_element velements[PIPE_MAX_ATTRIBS];
-      struct pipe_vertex_buffer vbuffer;
-      float *map;
-      unsigned size;
-      unsigned i;
-
-      size = num_verts * num_attribs * 4 * sizeof(float);
-
-      vbuf = pipe_buffer_create(screen,
-                                PIPE_BIND_VERTEX_BUFFER, 
-                                PIPE_USAGE_STATIC,
-                                size);
-      if(!vbuf)
-         goto error1;
-
-      map = pipe_buffer_map(pipe, vbuf, PIPE_TRANSFER_WRITE, &transfer);
-      if (!map)
-         goto error2;
-      memcpy(map, vertices, size);
-      pipe_buffer_unmap(pipe, transfer);
-
-      cso_save_vertex_elements($self->cso);
-
-      /* tell pipe about the vertex attributes */
-      for (i = 0; i < num_attribs; 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($self->cso, num_attribs, velements);
-
-      /* tell pipe about the vertex buffer */
-      memset(&vbuffer, 0, sizeof(vbuffer));
-      vbuffer.buffer = vbuf;
-      vbuffer.stride = num_attribs * 4 * sizeof(float);  /* vertex size */
-      vbuffer.buffer_offset = 0;
-      pipe->set_vertex_buffers(pipe, 1, &vbuffer);
-
-      /* draw */
-      util_draw_arrays(pipe, prim, 0, num_verts);
-
-      cso_restore_vertex_elements($self->cso);
-
-error2:
-      pipe_resource_reference(&vbuf, NULL);
-error1:
-      ;
-   }
-   
-   void
-   clear(unsigned buffers, const float *rgba, double depth = 0.0f,
-         unsigned stencil = 0)
-   {
-      $self->pipe->clear($self->pipe, buffers, rgba, depth, stencil);
-   }
-
-   void
-   flush(unsigned flags = 0) {
-      struct pipe_fence_handle *fence = NULL; 
-      $self->pipe->flush($self->pipe, &fence);
-      if(fence) {
-         /* TODO: allow asynchronous operation */ 
-         $self->pipe->screen->fence_finish( $self->pipe->screen, fence, PIPE_TIMEOUT_INFINITE );
-         $self->pipe->screen->fence_reference( $self->pipe->screen, &fence, NULL );
-      }
-   }
-
-   /*
-    * Surface functions
-    */
-
-   void resource_copy_region(struct pipe_resource *dst,
-                             unsigned dst_level,
-                             unsigned dstx, unsigned dsty, unsigned dstz,
-                             struct pipe_resource *src,
-                             unsigned src_level,
-                             const struct pipe_box *src_box)
-   {
-      $self->pipe->resource_copy_region($self->pipe,
-                                        dst, dst_level, dstx, dsty, dstz,
-                                        src, src_level, src_box);
-   }
-
-
-   void clear_render_target(struct st_surface *dst,
-                            float *rgba,
-                            unsigned x, unsigned y,
-                            unsigned width, unsigned height)
-   {
-      struct pipe_surface *_dst = NULL;
-
-     _dst = st_pipe_surface($self->pipe, dst, PIPE_BIND_RENDER_TARGET);
-      if(!_dst)
-         SWIG_exception(SWIG_ValueError, "couldn't acquire destination surface for writing");
-
-      $self->pipe->clear_render_target($self->pipe, _dst, rgba, x, y, width, height);
-
-   fail:
-      pipe_surface_reference(&_dst, NULL);
-   }
-
-   void clear_depth_stencil(struct st_surface *dst,
-                            unsigned clear_flags,
-                            double depth,
-                            unsigned stencil,
-                            unsigned x, unsigned y,
-                            unsigned width, unsigned height)
-   {
-      struct pipe_surface *_dst = NULL;
-
-     _dst = st_pipe_surface($self->pipe, dst, PIPE_BIND_DEPTH_STENCIL);
-      if(!_dst)
-         SWIG_exception(SWIG_ValueError, "couldn't acquire destination surface for writing");
-
-      $self->pipe->clear_depth_stencil($self->pipe, _dst, clear_flags, depth, stencil,
-                                       x, y, width, height);
-
-   fail:
-      pipe_surface_reference(&_dst, NULL);
-   }
-
-   %cstring_output_allocate_size(char **STRING, int *LENGTH, free(*$1));
-   void
-   surface_read_raw(struct st_surface *surface,
-                    unsigned x, unsigned y, unsigned w, unsigned h,
-                    char **STRING, int *LENGTH)
-   {
-      struct pipe_resource *texture = surface->texture;
-      struct pipe_context *pipe = $self->pipe;
-      struct pipe_transfer *transfer;
-      unsigned stride;
-
-      stride = util_format_get_stride(texture->format, w);
-      *LENGTH = util_format_get_nblocksy(texture->format, h) * stride;
-      *STRING = (char *) malloc(*LENGTH);
-      if(!*STRING)
-         return;
-
-      transfer = pipe_get_transfer(pipe,
-                                   surface->texture,
-                                   surface->level,
-                                   surface->layer,
-                                   PIPE_TRANSFER_READ,
-                                   x, y, w, h);
-      if(transfer) {
-         pipe_get_tile_raw(pipe, transfer, 0, 0, w, h, *STRING, stride);
-         pipe->transfer_destroy(pipe, transfer);
-      }
-   }
-
-   %cstring_input_binary(const char *STRING, unsigned LENGTH);
-   void
-   surface_write_raw(struct st_surface *surface,
-                     unsigned x, unsigned y, unsigned w, unsigned h,
-                     const char *STRING, unsigned LENGTH, unsigned stride = 0)
-   {
-      struct pipe_resource *texture = surface->texture;
-      struct pipe_context *pipe = $self->pipe;
-      struct pipe_transfer *transfer;
-
-      if(stride == 0)
-         stride = util_format_get_stride(texture->format, w);
-
-      if(LENGTH < util_format_get_nblocksy(texture->format, h) * stride)
-         SWIG_exception(SWIG_ValueError, "offset must be smaller than buffer size");
-
-      transfer = pipe_get_transfer(pipe,
-                                   surface->texture,
-                                   surface->level,
-                                   surface->layer,
-                                   PIPE_TRANSFER_WRITE,
-                                   x, y, w, h);
-      if(!transfer)
-         SWIG_exception(SWIG_MemoryError, "couldn't initiate transfer");
-
-      pipe_put_tile_raw(pipe, transfer, 0, 0, w, h, STRING, stride);
-      pipe->transfer_destroy(pipe, transfer);
-
-   fail:
-      return;
-   }
-
-   void
-   surface_read_rgba(struct st_surface *surface,
-                     unsigned x, unsigned y, unsigned w, unsigned h,
-                     float *rgba)
-   {
-      struct pipe_context *pipe = $self->pipe;
-      struct pipe_transfer *transfer;
-      transfer = pipe_get_transfer(pipe,
-                                   surface->texture,
-                                   surface->level,
-                                   surface->layer,
-                                   PIPE_TRANSFER_READ,
-                                   x, y, w, h);
-      if(transfer) {
-         pipe_get_tile_rgba(pipe, transfer, 0, 0, w, h, rgba);
-         pipe->transfer_destroy(pipe, transfer);
-      }
-   }
-
-   void
-   surface_write_rgba(struct st_surface *surface,
-                      unsigned x, unsigned y, unsigned w, unsigned h,
-                      const float *rgba)
-   {
-      struct pipe_context *pipe = $self->pipe;
-      struct pipe_transfer *transfer;
-      transfer = pipe_get_transfer(pipe,
-                                   surface->texture,
-                                   surface->level,
-                                   surface->layer,
-                                   PIPE_TRANSFER_WRITE,
-                                   x, y, w, h);
-      if(transfer) {
-         pipe_put_tile_rgba(pipe, transfer, 0, 0, w, h, rgba);
-         pipe->transfer_destroy(pipe, transfer);
-      }
-   }
-
-   %cstring_output_allocate_size(char **STRING, int *LENGTH, free(*$1));
-   void
-   surface_read_rgba8(struct st_surface *surface,
-                      unsigned x, unsigned y, unsigned w, unsigned h,
-                      char **STRING, int *LENGTH)
-   {
-      struct pipe_context *pipe = $self->pipe;
-      struct pipe_transfer *transfer;
-      float *rgba;
-      unsigned char *rgba8;
-      unsigned i, j, k;
-
-      *LENGTH = 0;
-      *STRING = NULL;
-
-      if (!surface)
-         return;
-
-      *LENGTH = h*w*4;
-      *STRING = (char *) malloc(*LENGTH);
-      if(!*STRING)
-         return;
-
-      rgba = malloc(h*w*4*sizeof(float));
-      if(!rgba)
-         return;
-
-      rgba8 = (unsigned char *) *STRING;
-
-      transfer = pipe_get_transfer(pipe,
-                                   surface->texture,
-                                   surface->level,
-                                   surface->layer,
-                                   PIPE_TRANSFER_READ,
-                                   x, y, w, h);
-      if(transfer) {
-         pipe_get_tile_rgba(pipe, transfer, 0, 0, w, h, rgba);
-         for(j = 0; j < h; ++j) {
-            for(i = 0; i < w; ++i)
-               for(k = 0; k <4; ++k)
-                  rgba8[j*w*4 + i*4 + k] = float_to_ubyte(rgba[j*w*4 + i*4 + k]);
-         }
-         pipe->transfer_destroy(pipe, transfer);
-      }
-
-      free(rgba);
-   }
-
-   void
-   surface_read_z(struct st_surface *surface,
-                  unsigned x, unsigned y, unsigned w, unsigned h,
-                  unsigned *z)
-   {
-      struct pipe_context *pipe = $self->pipe;
-      struct pipe_transfer *transfer;
-      transfer = pipe_get_transfer(pipe,
-                                   surface->texture,
-                                   surface->level,
-                                   surface->layer,
-                                   PIPE_TRANSFER_READ,
-                                   x, y, w, h);
-      if(transfer) {
-         pipe_get_tile_z(pipe, transfer, 0, 0, w, h, z);
-         pipe->transfer_destroy(pipe, transfer);
-      }
-   }
-
-   void
-   surface_write_z(struct st_surface *surface,
-                   unsigned x, unsigned y, unsigned w, unsigned h,
-                   const unsigned *z)
-   {
-      struct pipe_context *pipe = $self->pipe;
-      struct pipe_transfer *transfer;
-      transfer = pipe_get_transfer(pipe,
-                                   surface->texture,
-                                   surface->level,
-                                   surface->layer,
-                                   PIPE_TRANSFER_WRITE,
-                                   x, y, w, h);
-      if(transfer) {
-         pipe_put_tile_z(pipe, transfer, 0, 0, w, h, z);
-         pipe->transfer_destroy(pipe, transfer);
-      }
-   }
-
-   void
-   surface_sample_rgba(struct st_surface *surface,
-                       float *rgba,
-                       int norm = 0)
-   {
-      st_sample_surface($self->pipe, surface, rgba, norm != 0);
-   }
-
-   unsigned
-   surface_compare_rgba(struct st_surface *surface,
-                        unsigned x, unsigned y, unsigned w, unsigned h,
-                        const float *rgba, float tol = 0.0)
-   {
-      struct pipe_context *pipe = $self->pipe;
-      struct pipe_transfer *transfer;
-      float *rgba2;
-      const float *p1;
-      const float *p2;
-      unsigned i, j, n;
-
-      rgba2 = MALLOC(h*w*4*sizeof(float));
-      if(!rgba2)
-         return ~0;
-
-      transfer = pipe_get_transfer(pipe,
-                                   surface->texture,
-                                   surface->level,
-                                   surface->layer,
-                                   PIPE_TRANSFER_READ,
-                                   x, y, w, h);
-      if(!transfer) {
-         FREE(rgba2);
-         return ~0;
-      }
-
-      pipe_get_tile_rgba(pipe, transfer, 0, 0, w, h, rgba2);
-      pipe->transfer_destroy(pipe, transfer);
-
-      p1 = rgba;
-      p2 = rgba2;
-      n = 0;
-      for(i = h*w; i; --i) {
-         unsigned differs = 0;
-         for(j = 4; j; --j) {
-            float delta = *p2++ - *p1++;
-            if (delta < -tol || delta > tol)
-                differs = 1;
-         }
-         n += differs;
-      }
-
-      FREE(rgba2);
-
-      return n;
-   }
-
-   %cstring_input_binary(const char *STRING, unsigned LENGTH);
-   void
-   transfer_inline_write(struct pipe_resource *resource,
-                         unsigned level,
-                         unsigned usage,
-                         const struct pipe_box *box,
-                         const char *STRING, unsigned LENGTH,
-                         unsigned stride,
-                         unsigned layer_stride)
-   {
-      struct pipe_context *pipe = $self->pipe;
-
-      pipe->transfer_inline_write(pipe, resource, level, usage, box, STRING, stride, layer_stride);
-   }
-
-   %cstring_output_allocate_size(char **STRING, int *LENGTH, free(*$1));
-   void buffer_read(struct pipe_resource *buffer,
-                    char **STRING, int *LENGTH)
-   {
-      struct pipe_context *pipe = $self->pipe;
-
-      assert(buffer->target == PIPE_BUFFER);
-
-      *LENGTH = buffer->width0;
-      *STRING = (char *) malloc(buffer->width0);
-      if(!*STRING)
-         return;
-
-      pipe_buffer_read(pipe, buffer, 0, buffer->width0, *STRING);
-   }
-
-   void buffer_write(struct pipe_resource *buffer,
-                     const char *STRING, unsigned LENGTH, unsigned offset = 0)
-   {
-      struct pipe_context *pipe = $self->pipe;
-
-      assert(buffer->target == PIPE_BUFFER);
-
-      if(offset > buffer->width0)
-         SWIG_exception(SWIG_ValueError, "offset must be smaller than buffer size");
-
-      if(offset + LENGTH > buffer->width0)
-         SWIG_exception(SWIG_ValueError, "data length must fit inside the buffer");
-
-      pipe_buffer_write(pipe, buffer, offset, LENGTH, STRING);
-
-fail:
-      return;
-   }
-
-};
diff --git a/src/gallium/state_trackers/python/p_device.i b/src/gallium/state_trackers/python/p_device.i
deleted file mode 100644 (file)
index 61f6b3b..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
- /**************************************************************************
- * 
- * Copyright 2008 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, 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 TUNGSTEN 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.
- * 
- **************************************************************************/
-
-/**
- * @file
- * SWIG interface definion for Gallium types.
- *
- * @author Jose Fonseca <jrfonseca@tungstengraphics.com>
- */
-
-
-%nodefaultctor st_device;
-%nodefaultdtor st_device;
-
-
-struct st_device {
-};
-
-%newobject st_device::texture_create;
-%newobject st_device::context_create;
-%newobject st_device::buffer_create;
-
-%extend st_device {
-   
-   st_device(int hardware = 1) {
-      return st_device_create(hardware ? TRUE : FALSE);
-   }
-
-   ~st_device() {
-      st_device_destroy($self);
-   }
-   
-   const char * get_name( void ) {
-      return $self->screen->get_name($self->screen);
-   }
-
-   const char * get_vendor( void ) {
-      return $self->screen->get_vendor($self->screen);
-   }
-
-   /**
-    * Query an integer-valued capability/parameter/limit
-    * \param param  one of PIPE_CAP_x
-    */
-   int get_param( int param ) {
-      return $self->screen->get_param($self->screen, param);
-   }
-
-   /**
-    * Query a float-valued capability/parameter/limit
-    * \param param  one of PIPE_CAP_x
-    */
-   float get_paramf( int param ) {
-      return $self->screen->get_paramf($self->screen, param);
-   }
-
-   /**
-    * Check if the given pipe_format is supported as a texture or
-    * drawing surface.
-    * \param bind bitmask of PIPE_BIND flags
-    */
-   int is_format_supported( enum pipe_format format, 
-                            enum pipe_texture_target target,
-                            unsigned sample_count,
-                            unsigned bind ) {
-      /* We can't really display surfaces with the python statetracker so mask
-       * out that usage */
-      bind &= ~PIPE_BIND_DISPLAY_TARGET;
-
-      return $self->screen->is_format_supported( $self->screen,
-                                                 format,
-                                                 target,
-                                                 sample_count,
-                                                 bind );
-   }
-
-   struct st_context *
-   context_create(void) {
-      return st_context_create($self);
-   }
-
-   struct pipe_resource * 
-   resource_create(
-         enum pipe_format format,
-         unsigned width,
-         unsigned height,
-         unsigned depth = 1,
-         unsigned last_level = 0,
-         enum pipe_texture_target target = PIPE_TEXTURE_2D,
-         unsigned bind = 0
-      ) {
-      struct pipe_resource templat;
-
-      /* We can't really display surfaces with the python statetracker so mask
-       * out that usage */
-      bind &= ~PIPE_BIND_DISPLAY_TARGET;
-
-      memset(&templat, 0, sizeof(templat));
-      templat.format = format;
-      templat.width0 = width;
-      templat.height0 = height;
-      templat.depth0 = depth;
-      templat.last_level = last_level;
-      templat.target = target;
-      templat.bind = bind;
-
-      return $self->screen->resource_create($self->screen, &templat);
-   }
-
-   struct pipe_resource *
-   buffer_create(unsigned size, unsigned usage, unsigned bind = 0) {
-      return pipe_buffer_create($self->screen, bind, usage, size);
-   }
-};
diff --git a/src/gallium/state_trackers/python/p_state.i b/src/gallium/state_trackers/python/p_state.i
deleted file mode 100644 (file)
index 0537557..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
- /**************************************************************************
- * 
- * Copyright 2008 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, 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 TUNGSTEN 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.
- * 
- **************************************************************************/
-
-/**
- * @file
- * SWIG interface definion for Gallium types.
- *
- * @author Jose Fonseca <jrfonseca@tungstengraphics.com>
- */
-
-%module gallium;
-
-%ignore winsys;
-%ignore pipe_vertex_buffer::buffer;
-
-%include "pipe/p_compiler.h";
-%include "pipe/p_state.h";
-
-
-%array_class(struct pipe_stencil_state, StencilArray);
-
-
-%extend pipe_rt_blend_state
-{
-   struct pipe_rt_blend_state *
-   __getitem__(int index) 
-   {
-      if(index < 0 || index >= PIPE_MAX_COLOR_BUFS)
-         SWIG_exception(SWIG_ValueError, "index out of bounds");
-      return $self + index;
-   fail:
-      return NULL;
-   };
-};
-
-
-%extend pipe_blend_state
-{
-   pipe_blend_state(void)
-   {
-      return CALLOC_STRUCT(pipe_blend_state);
-   }
-
-   %cstring_input_binary(const char *STRING, unsigned LENGTH);
-   pipe_blend_state(const char *STRING, unsigned LENGTH)
-   {
-      struct pipe_blend_state *state;
-      state = CALLOC_STRUCT(pipe_blend_state);
-      if (state) {
-         LENGTH = MIN2(sizeof *state, LENGTH);
-         memcpy(state, STRING, LENGTH);
-      }
-      return state;
-   }
-
-   %cstring_output_allocate_size(char **STRING, int *LENGTH, os_free(*$1));
-   void __str__(char **STRING, int *LENGTH)
-   {
-      struct os_stream *stream;
-
-      stream = os_str_stream_create(1);
-      util_dump_blend_state(stream, $self);
-
-      *STRING = os_str_stream_get_and_close(stream);
-      *LENGTH = strlen(*STRING);
-   }
-};
-
-
-%extend pipe_framebuffer_state {
-   
-   pipe_framebuffer_state(void) {
-      return CALLOC_STRUCT(pipe_framebuffer_state);
-   }
-   
-   ~pipe_framebuffer_state() {
-      unsigned index;
-      for(index = 0; index < PIPE_MAX_COLOR_BUFS; ++index)
-         pipe_surface_reference(&$self->cbufs[index], NULL);
-      pipe_surface_reference(&$self->zsbuf, NULL);
-      FREE($self);
-   }
-   
-   void
-   set_cbuf(unsigned index, struct st_surface *surface) 
-   {
-      struct pipe_surface *_surface = NULL;
-
-      if(index >= PIPE_MAX_COLOR_BUFS)
-         SWIG_exception(SWIG_ValueError, "index out of bounds");
-      
-      if(surface) {
-         /* XXX need a context here */
-         _surface = st_pipe_surface(NULL, surface, PIPE_BIND_RENDER_TARGET);
-         if(!_surface)
-            SWIG_exception(SWIG_ValueError, "couldn't acquire surface for writing");
-      }
-
-      pipe_surface_reference(&$self->cbufs[index], _surface);
-      
-   fail:
-      return;
-   }
-   
-   void
-   set_zsbuf(struct st_surface *surface) 
-   {
-      struct pipe_surface *_surface = NULL;
-
-      if(surface) {
-         /* XXX need a context here */
-         _surface = st_pipe_surface(NULL, surface, PIPE_BIND_DEPTH_STENCIL);
-         if(!_surface)
-            SWIG_exception(SWIG_ValueError, "couldn't acquire surface for writing");
-      }
-
-      pipe_surface_reference(&$self->zsbuf, _surface);
-
-   fail:
-      return;
-   }
-   
-};
-
-
-%extend pipe_shader_state {
-   
-   pipe_shader_state(const char *text, unsigned num_tokens = 1024) {
-      struct tgsi_token *tokens;
-      struct pipe_shader_state *shader;
-      
-      tokens = MALLOC(num_tokens * sizeof(struct tgsi_token));
-      if(!tokens)
-         goto error1;
-      
-      if(tgsi_text_translate(text, tokens, num_tokens ) != TRUE)
-         goto error2;
-      
-      shader = CALLOC_STRUCT(pipe_shader_state);
-      if(!shader)
-         goto error3;
-      
-      shader->tokens = tokens;
-      
-      return shader;
-      
-error3:
-error2:
-      FREE(tokens);
-error1:      
-      return NULL;
-   }
-   
-   ~pipe_shader_state() {
-      FREE((void*)$self->tokens);
-      FREE($self);
-   }
-
-   void dump(unsigned flags = 0) {
-      tgsi_dump($self->tokens, flags);
-   }
-}
diff --git a/src/gallium/state_trackers/python/p_texture.i b/src/gallium/state_trackers/python/p_texture.i
deleted file mode 100644 (file)
index 1f4b4fd..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
- /**************************************************************************
- * 
- * Copyright 2008 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, 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 TUNGSTEN 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.
- * 
- **************************************************************************/
-
-/**
- * @file
- * SWIG interface definion for Gallium types.
- *
- * @author Jose Fonseca <jrfonseca@tungstengraphics.com>
- */
-
-
-%nodefaultctor pipe_resource;
-%nodefaultctor st_surface;
-
-%nodefaultdtor pipe_resource;
-%nodefaultdtor st_surface;
-
-%ignore pipe_resource::screen;
-
-%immutable st_surface::texture;
-%immutable st_surface::level;
-%immutable st_surface::layer;
-
-%newobject pipe_resource::get_surface;
-
-/* Avoid naming conflict with p_inlines.h's pipe_buffer_read/write */ 
-%rename(read) read_; 
-%rename(write) write_; 
-
-%extend pipe_resource {
-
-   ~pipe_resource() {
-      struct pipe_resource *ptr = $self;
-      pipe_resource_reference(&ptr, NULL);
-   }
-
-   unsigned get_width(unsigned level=0) {
-      return u_minify($self->width0, level);
-   }
-
-   unsigned get_height(unsigned level=0) {
-      return u_minify($self->height0, level);
-   }
-
-   unsigned get_depth(unsigned level=0) {
-      return u_minify($self->depth0, level);
-   }
-
-   /** Get a surface which is a "view" into a texture */
-   struct st_surface *
-   get_surface(unsigned level=0, unsigned layer=0)
-   {
-      struct st_surface *surface;
-
-      if(level > $self->last_level)
-         SWIG_exception(SWIG_ValueError, "level out of bounds");
-      if(layer >= ($self->target == PIPE_TEXTURE_3D ?
-                         u_minify($self->depth0, level) : $self->depth0))
-         SWIG_exception(SWIG_ValueError, "layer out of bounds");
-
-      surface = CALLOC_STRUCT(st_surface);
-      if(!surface)
-         return NULL;
-
-      pipe_resource_reference(&surface->texture, $self);
-      surface->level = level;
-      surface->layer = layer;
-
-      return surface;
-
-   fail:
-      return NULL;
-   }
-
-   unsigned __len__(void) 
-   {
-      assert($self->target == PIPE_BUFFER);
-      assert(p_atomic_read(&$self->reference.count) > 0);
-      return $self->width0;
-   }
-
-};
-
-struct st_surface
-{
-   %immutable;
-
-   struct pipe_resource *texture;
-   unsigned level;
-   unsigned layer;
-
-};
-
-%extend st_surface {
-
-   %immutable;
-
-   unsigned format;
-   unsigned width;
-   unsigned height;
-
-   ~st_surface() {
-      pipe_resource_reference(&$self->texture, NULL);
-      FREE($self);
-   }
-
-
-};
-
-%{
-   static enum pipe_format
-   st_surface_format_get(struct st_surface *surface)
-   {
-      return surface->texture->format;
-   }
-   
-   static unsigned
-   st_surface_width_get(struct st_surface *surface)
-   {
-      return u_minify(surface->texture->width0, surface->level);
-   }
-   
-   static unsigned
-   st_surface_height_get(struct st_surface *surface)
-   {
-      return u_minify(surface->texture->height0, surface->level);
-   }
-%}
diff --git a/src/gallium/state_trackers/python/st_device.c b/src/gallium/state_trackers/python/st_device.c
deleted file mode 100644 (file)
index d0a4295..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2008 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, 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 TUNGSTEN 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 "pipe/p_screen.h"
-#include "pipe/p_context.h"
-#include "pipe/p_shader_tokens.h"
-#include "util/u_inlines.h"
-#include "cso_cache/cso_context.h"
-#include "util/u_math.h"
-#include "util/u_memory.h"
-#include "util/u_sampler.h"
-#include "util/u_simple_shaders.h"
-#include "trace/tr_public.h"
-
-#include "st_device.h"
-#include "st_winsys.h"
-
-
-static void
-st_device_really_destroy(struct st_device *st_dev) 
-{
-   if(st_dev->screen) {
-      /* FIXME: Don't really destroy until we keep track of every single 
-       * reference or we end up causing a segmentation fault every time 
-       * python exits. */
-#if 0
-      st_dev->screen->destroy(st_dev->screen);
-#endif
-   }
-   
-   FREE(st_dev);
-}
-
-
-static void
-st_device_reference(struct st_device **ptr, struct st_device *st_dev)
-{
-   struct st_device *old_dev = *ptr;
-
-   if (pipe_reference(&(*ptr)->reference, &st_dev->reference))
-      st_device_really_destroy(old_dev);
-   *ptr = st_dev;
-}
-
-
-void
-st_device_destroy(struct st_device *st_dev) 
-{
-   st_device_reference(&st_dev, NULL);
-}
-
-
-struct st_device *
-st_device_create(boolean hardware)
-{
-   struct pipe_screen *screen;
-   struct st_device *st_dev;
-
-   if (hardware)
-      screen = st_hardware_screen_create();
-   else
-      screen = st_software_screen_create("softpipe");
-
-   screen = trace_screen_create(screen);
-   if (!screen)
-      goto no_screen;
-
-   st_dev = CALLOC_STRUCT(st_device);
-   if (!st_dev)
-      goto no_device;
-   
-   pipe_reference_init(&st_dev->reference, 1);
-   st_dev->screen = screen;
-   
-   return st_dev;
-
-no_device:
-   screen->destroy(screen);
-no_screen:
-   return NULL;
-}
-
-
-void
-st_context_destroy(struct st_context *st_ctx) 
-{
-   unsigned i;
-   
-   if(st_ctx) {
-      struct st_device *st_dev = st_ctx->st_dev;
-      
-      if(st_ctx->cso) {
-         cso_delete_vertex_shader(st_ctx->cso, st_ctx->vs);
-         cso_delete_fragment_shader(st_ctx->cso, st_ctx->fs);
-         
-         cso_destroy_context(st_ctx->cso);
-      }
-      
-      if(st_ctx->pipe)
-         st_ctx->pipe->destroy(st_ctx->pipe);
-      
-      for(i = 0; i < PIPE_MAX_SAMPLERS; ++i)
-         pipe_sampler_view_reference(&st_ctx->fragment_sampler_views[i], NULL);
-      for(i = 0; i < PIPE_MAX_VERTEX_SAMPLERS; ++i)
-         pipe_sampler_view_reference(&st_ctx->vertex_sampler_views[i], NULL);
-      pipe_resource_reference(&st_ctx->default_texture, NULL);
-
-      FREE(st_ctx);
-      
-      st_device_reference(&st_dev, NULL);
-   }
-}
-
-
-struct st_context *
-st_context_create(struct st_device *st_dev) 
-{
-   struct st_context *st_ctx;
-   
-   st_ctx = CALLOC_STRUCT(st_context);
-   if(!st_ctx)
-      return NULL;
-   
-   st_device_reference(&st_ctx->st_dev, st_dev);
-   
-   st_ctx->pipe = st_dev->screen->context_create(st_dev->screen, NULL);
-   if(!st_ctx->pipe) {
-      st_context_destroy(st_ctx);
-      return NULL;
-   }
-
-   st_ctx->cso = cso_create_context(st_ctx->pipe);
-   if(!st_ctx->cso) {
-      st_context_destroy(st_ctx);
-      return NULL;
-   }
-   
-   /* disabled blending/masking */
-   {
-      struct pipe_blend_state blend;
-      memset(&blend, 0, sizeof(blend));
-      blend.rt[0].rgb_src_factor = PIPE_BLENDFACTOR_ONE;
-      blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ONE;
-      blend.rt[0].rgb_dst_factor = PIPE_BLENDFACTOR_ZERO;
-      blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ZERO;
-      blend.rt[0].colormask = PIPE_MASK_RGBA;
-      cso_set_blend(st_ctx->cso, &blend);
-   }
-
-   /* no-op depth/stencil/alpha */
-   {
-      struct pipe_depth_stencil_alpha_state depthstencil;
-      memset(&depthstencil, 0, sizeof(depthstencil));
-      cso_set_depth_stencil_alpha(st_ctx->cso, &depthstencil);
-   }
-
-   /* rasterizer */
-   {
-      struct pipe_rasterizer_state rasterizer;
-      memset(&rasterizer, 0, sizeof(rasterizer));
-      rasterizer.cull_face = PIPE_FACE_NONE;
-      cso_set_rasterizer(st_ctx->cso, &rasterizer);
-   }
-
-   /* clip */
-   {
-      struct pipe_clip_state clip;
-      memset(&clip, 0, sizeof(clip));
-      st_ctx->pipe->set_clip_state(st_ctx->pipe, &clip);
-   }
-
-   /* identity viewport */
-   {
-      struct pipe_viewport_state viewport;
-      viewport.scale[0] = 1.0;
-      viewport.scale[1] = 1.0;
-      viewport.scale[2] = 1.0;
-      viewport.scale[3] = 1.0;
-      viewport.translate[0] = 0.0;
-      viewport.translate[1] = 0.0;
-      viewport.translate[2] = 0.0;
-      viewport.translate[3] = 0.0;
-      cso_set_viewport(st_ctx->cso, &viewport);
-   }
-
-   /* samplers */
-   {
-      struct pipe_sampler_state sampler;
-      unsigned i;
-      memset(&sampler, 0, sizeof(sampler));
-      sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-      sampler.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-      sampler.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-      sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NEAREST;
-      sampler.min_img_filter = PIPE_TEX_MIPFILTER_NEAREST;
-      sampler.mag_img_filter = PIPE_TEX_MIPFILTER_NEAREST;
-      sampler.normalized_coords = 1;
-      for (i = 0; i < PIPE_MAX_SAMPLERS; i++)
-         cso_single_sampler(st_ctx->cso, i, &sampler);
-      cso_single_sampler_done(st_ctx->cso);
-   }
-
-   /* default textures */
-   {
-      struct pipe_context *pipe = st_ctx->pipe;
-      struct pipe_screen *screen = st_dev->screen;
-      struct pipe_resource templat;
-      struct pipe_sampler_view view_templ;
-      struct pipe_sampler_view *view;
-      unsigned i;
-
-      memset( &templat, 0, sizeof( templat ) );
-      templat.target = PIPE_TEXTURE_2D;
-      templat.format = PIPE_FORMAT_B8G8R8A8_UNORM;
-      templat.width0 = 1;
-      templat.height0 = 1;
-      templat.depth0 = 1;
-      templat.array_size = 1;
-      templat.last_level = 0;
-      templat.bind = PIPE_BIND_SAMPLER_VIEW;
-   
-      st_ctx->default_texture = screen->resource_create( screen, &templat );
-      if(st_ctx->default_texture) {
-        struct pipe_box box;
-        uint32_t zero = 0;
-        
-        u_box_origin_2d( 1, 1, &box );
-
-        pipe->transfer_inline_write(pipe,
-                                    st_ctx->default_texture,
-                                    0,
-                                    PIPE_TRANSFER_WRITE,
-                                    &box,
-                                    &zero,
-                                    sizeof zero,
-                                    0);
-      }
-
-      u_sampler_view_default_template(&view_templ,
-                                      st_ctx->default_texture,
-                                      st_ctx->default_texture->format);
-      view = st_ctx->pipe->create_sampler_view(st_ctx->pipe,
-                                               st_ctx->default_texture,
-                                               &view_templ);
-
-      for (i = 0; i < PIPE_MAX_SAMPLERS; i++)
-         pipe_sampler_view_reference(&st_ctx->fragment_sampler_views[i], view);
-      for (i = 0; i < PIPE_MAX_VERTEX_SAMPLERS; i++)
-         pipe_sampler_view_reference(&st_ctx->vertex_sampler_views[i], view);
-
-      st_ctx->pipe->set_fragment_sampler_views(st_ctx->pipe,
-                                               PIPE_MAX_SAMPLERS,
-                                               st_ctx->fragment_sampler_views);
-      st_ctx->pipe->set_vertex_sampler_views(st_ctx->pipe,
-                                             PIPE_MAX_VERTEX_SAMPLERS,
-                                             st_ctx->vertex_sampler_views);
-
-      pipe_sampler_view_reference(&view, NULL);
-   }
-   
-   /* vertex shader */
-   {
-      const uint semantic_names[] = { TGSI_SEMANTIC_POSITION,
-                                      TGSI_SEMANTIC_GENERIC };
-      const uint semantic_indexes[] = { 0, 0 };
-      st_ctx->vs = util_make_vertex_passthrough_shader(st_ctx->pipe, 
-                                                       2, 
-                                                       semantic_names,
-                                                       semantic_indexes);
-      cso_set_vertex_shader_handle(st_ctx->cso, st_ctx->vs);
-   }
-
-   /* fragment shader */
-   {
-      st_ctx->fs = util_make_fragment_passthrough_shader(st_ctx->pipe);
-      cso_set_fragment_shader_handle(st_ctx->cso, st_ctx->fs);
-   }
-
-   return st_ctx;
-}
diff --git a/src/gallium/state_trackers/python/st_device.h b/src/gallium/state_trackers/python/st_device.h
deleted file mode 100644 (file)
index 53e2556..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2008 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, 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 TUNGSTEN 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.
- * 
- **************************************************************************/
-
-
-#ifndef ST_DEVICE_H_
-#define ST_DEVICE_H_
-
-
-#include "pipe/p_state.h"
-
-struct cso_context;
-struct pipe_screen;
-struct pipe_context;
-struct st_winsys; 
-
-
-struct st_surface
-{
-   struct pipe_resource *texture;
-   unsigned level;
-   unsigned layer;
-};
-
-
-struct st_context
-{
-   struct st_device *st_dev;
-   
-   struct pipe_context *pipe;
-   
-   struct cso_context *cso;
-   
-   void *vs;
-   void *fs;
-   void *gs;
-
-   struct pipe_resource *default_texture;
-   struct pipe_sampler_view *fragment_sampler_views[PIPE_MAX_SAMPLERS];
-   struct pipe_sampler_view *vertex_sampler_views[PIPE_MAX_VERTEX_SAMPLERS];
-   
-   unsigned num_vertex_buffers;
-   struct pipe_vertex_buffer vertex_buffers[PIPE_MAX_ATTRIBS];
-   
-   unsigned num_vertex_elements;
-   struct pipe_vertex_element vertex_elements[PIPE_MAX_ATTRIBS];
-   
-   struct pipe_framebuffer_state framebuffer;
-};
-
-
-struct st_device
-{
-   /* FIXME: we also need to refcount for textures and surfaces... */
-   struct pipe_reference reference;
-
-   struct pipe_screen *screen;
-};
-
-
-static INLINE struct pipe_surface *
-st_pipe_surface(struct pipe_context *pipe, struct st_surface *surface, unsigned usage) 
-{
-   struct pipe_resource *texture = surface->texture;
-   struct pipe_surface surf_tmpl;
-   memset(&surf_tmpl, 0, sizeof(surf_tmpl));
-   surf_tmpl.format = texture->format;
-   surf_tmpl.usage = usage;
-   surf_tmpl.u.tex.level = surface->level;
-   surf_tmpl.u.tex.first_layer = surface->layer;
-   surf_tmpl.u.tex.last_layer = surface->layer;
-   return pipe->create_surface(pipe, texture, &surf_tmpl);
-}
-
-struct st_context *
-st_context_create(struct st_device *st_dev);
-
-void
-st_context_destroy(struct st_context *st_ctx);
-
-struct st_device *
-st_device_create(boolean hardware);
-
-void
-st_device_destroy(struct st_device *st_dev);
-
-
-#endif /* ST_DEVICE_H_ */
diff --git a/src/gallium/state_trackers/python/st_hardpipe_winsys.c b/src/gallium/state_trackers/python/st_hardpipe_winsys.c
deleted file mode 100644 (file)
index c6743db..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2008 Tungsten Graphics, Inc., Bismarck, ND., USA
- * 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 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, AUTHORS 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.
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * 
- **************************************************************************/
-
-/**
- * @file
- * Get a hardware accelerated Gallium screen/context from the OpenGL driver.
- */
-
-
-#include "pipe/p_compiler.h"
-
-#ifdef PIPE_OS_WINDOWS
-#include <windows.h>
-#include <GL/gl.h>
-#else
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <GL/gl.h>
-#include <GL/glx.h>
-#endif
-
-#include "st_winsys.h"
-
-
-typedef struct pipe_screen * (GLAPIENTRY *PFNGETGALLIUMSCREENMESAPROC) (void);
-typedef struct pipe_context * (GLAPIENTRY* PFNCREATEGALLIUMCONTEXTMESAPROC) (void);
-
-static PFNGETGALLIUMSCREENMESAPROC pfnGetGalliumScreenMESA = NULL;
-static PFNCREATEGALLIUMCONTEXTMESAPROC pfnCreateGalliumContextMESA = NULL;
-
-
-#ifdef PIPE_OS_WINDOWS
-
-static INLINE boolean
-st_hardpipe_load(void)
-{
-   WNDCLASS wc;
-   HWND hwnd;
-   HGLRC hglrc;
-   HDC hdc;
-   PIXELFORMATDESCRIPTOR pfd;
-   int iPixelFormat;
-
-   if(pfnGetGalliumScreenMESA && pfnCreateGalliumContextMESA)
-      return TRUE;
-
-   memset(&wc, 0, sizeof wc);
-   wc.lpfnWndProc = DefWindowProc;
-   wc.lpszClassName = "gallium";
-   wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
-   RegisterClass(&wc);
-
-   hwnd = CreateWindow(wc.lpszClassName, "gallium", 0, 0, 0, 0, 0, NULL, 0, wc.hInstance, NULL);
-   if (!hwnd)
-      return FALSE;
-
-   hdc = GetDC(hwnd);
-   if (!hdc)
-      return FALSE;
-
-   pfd.cColorBits = 3;
-   pfd.cRedBits = 1;
-   pfd.cGreenBits = 1;
-   pfd.cBlueBits = 1;
-   pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
-   pfd.iLayerType = PFD_MAIN_PLANE;
-   pfd.iPixelType = PFD_TYPE_RGBA;
-   pfd.nSize = sizeof(pfd);
-   pfd.nVersion = 1;
-
-   iPixelFormat = ChoosePixelFormat(hdc, &pfd);
-   if (!iPixelFormat) {
-      pfd.dwFlags |= PFD_DOUBLEBUFFER;
-      iPixelFormat = ChoosePixelFormat(hdc, &pfd);
-   }
-   if (!iPixelFormat)
-      return FALSE;
-
-   SetPixelFormat(hdc, iPixelFormat, &pfd);
-   hglrc = wglCreateContext(hdc);
-   if (!hglrc)
-      return FALSE;
-
-   if (!wglMakeCurrent(hdc, hglrc))
-      return FALSE;
-
-   pfnGetGalliumScreenMESA = (PFNGETGALLIUMSCREENMESAPROC)wglGetProcAddress("wglGetGalliumScreenMESA");
-   if(!pfnGetGalliumScreenMESA)
-      return FALSE;
-
-   pfnCreateGalliumContextMESA = (PFNCREATEGALLIUMCONTEXTMESAPROC)wglGetProcAddress("wglCreateGalliumContextMESA");
-   if(!pfnCreateGalliumContextMESA)
-      return FALSE;
-
-   DestroyWindow(hwnd);
-
-   return TRUE;
-}
-
-#else
-
-static INLINE boolean
-st_hardpipe_load(void)
-{
-   Display *dpy;
-   int scrnum;
-   Window root;
-   int attribSingle[] = {
-      GLX_RGBA,
-      GLX_RED_SIZE, 1,
-      GLX_GREEN_SIZE, 1,
-      GLX_BLUE_SIZE, 1,
-      None };
-   int attribDouble[] = {
-      GLX_RGBA,
-      GLX_RED_SIZE, 1,
-      GLX_GREEN_SIZE, 1,
-      GLX_BLUE_SIZE, 1,
-      GLX_DOUBLEBUFFER,
-      None };
-   XVisualInfo *visinfo;
-   GLXContext ctx = NULL;
-   XSetWindowAttributes attr;
-   unsigned long mask;
-   int width = 100, height = 100;
-   Window win;
-
-   dpy = XOpenDisplay(NULL);
-   if (!dpy)
-      return FALSE;
-
-   scrnum = 0;
-   
-   root = RootWindow(dpy, scrnum);
-
-   visinfo = glXChooseVisual(dpy, scrnum, attribSingle);
-   if (!visinfo)
-      visinfo = glXChooseVisual(dpy, scrnum, attribDouble);
-   if (!visinfo)
-      return FALSE;
-      
-   ctx = glXCreateContext( dpy, visinfo, NULL, True );
-
-   if (!ctx)
-      return FALSE;
-
-   attr.background_pixel = 0;
-   attr.border_pixel = 0;
-   attr.colormap = XCreateColormap(dpy, root, visinfo->visual, AllocNone);
-   attr.event_mask = StructureNotifyMask | ExposureMask;
-   
-   mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
-   
-   win = XCreateWindow(dpy, root, 0, 0, width, height,
-                       0, visinfo->depth, InputOutput,
-                       visinfo->visual, mask, &attr);
-
-   if (!glXMakeCurrent(dpy, win, ctx))
-      return FALSE;
-
-   pfnGetGalliumScreenMESA = (PFNGETGALLIUMSCREENMESAPROC)glXGetProcAddressARB((const GLubyte *)"glXGetGalliumScreenMESA");
-   if(!pfnGetGalliumScreenMESA)
-      return FALSE;
-
-   pfnCreateGalliumContextMESA = (PFNCREATEGALLIUMCONTEXTMESAPROC)glXGetProcAddressARB((const GLubyte *)"glXCreateGalliumContextMESA");
-   if(!pfnCreateGalliumContextMESA)
-      return FALSE;
-
-   glXDestroyContext(dpy, ctx);
-   XFree(visinfo);
-   XDestroyWindow(dpy, win);
-   XCloseDisplay(dpy);
-
-   return TRUE;
-}
-
-#endif
-
-
-struct pipe_screen *
-st_hardware_screen_create(void)
-{
-   if(st_hardpipe_load())
-      return pfnGetGalliumScreenMESA();
-   else
-      return st_software_screen_create(NULL);
-}
diff --git a/src/gallium/state_trackers/python/st_sample.c b/src/gallium/state_trackers/python/st_sample.c
deleted file mode 100644 (file)
index cac9a1a..0000000
+++ /dev/null
@@ -1,594 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2008 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, 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 TUNGSTEN 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 "pipe/p_compiler.h"
-#include "pipe/p_format.h"
-#include "pipe/p_state.h"
-#include "util/u_inlines.h"
-#include "util/u_format.h"
-#include "util/u_tile.h"
-#include "util/u_math.h"
-#include "util/u_memory.h"
-
-#include "st_device.h"
-#include "st_sample.h"
-
-
-/**
- * Use our own pseudo random generator to ensure consistent runs among
- * multiple runs and platforms.
- * 
- * @sa http://en.wikipedia.org/wiki/Linear_congruential_generator
- */
-static uint32_t st_random(void) {
-   static uint64_t seed = UINT64_C(0xbb9a063afb0a739d);
-
-   seed = UINT64_C(134775813) * seed + UINT64_C(1);
-   
-   return (uint32_t)(seed >> 32);
-}
-
-
-/**
- * We don't want to include the patent-encumbered DXT code here, so instead
- * we store several uncompressed/compressed data pairs for hardware testing
- * purposes. 
- */
-struct dxt_data
-{
-   uint8_t rgba[16*4];
-   uint8_t raw[16];
-};
-
-
-static const struct dxt_data 
-dxt1_rgb_data[] = {
-   {
-      {
-         0x99, 0xb0, 0x8e, 0xff,
-         0x5d, 0x62, 0x89, 0xff,
-         0x99, 0xb0, 0x8e, 0xff,
-         0x99, 0xb0, 0x8e, 0xff,
-         0xd6, 0xff, 0x94, 0xff,
-         0x5d, 0x62, 0x89, 0xff,
-         0x99, 0xb0, 0x8e, 0xff,
-         0xd6, 0xff, 0x94, 0xff,
-         0x5d, 0x62, 0x89, 0xff,
-         0x5d, 0x62, 0x89, 0xff,
-         0x99, 0xb0, 0x8e, 0xff,
-         0x21, 0x14, 0x84, 0xff,
-         0x5d, 0x62, 0x89, 0xff,
-         0x21, 0x14, 0x84, 0xff,
-         0x21, 0x14, 0x84, 0xff,
-         0x99, 0xb0, 0x8e, 0xff
-      },
-      {0xf2, 0xd7, 0xb0, 0x20, 0xae, 0x2c, 0x6f, 0x97}
-   },
-   {
-      {
-         0xb5, 0xcf, 0x9c, 0xff,
-         0x83, 0x8c, 0x8b, 0xff,
-         0x21, 0x08, 0x6b, 0xff,
-         0x83, 0x8c, 0x8b, 0xff,
-         0x52, 0x4a, 0x7b, 0xff,
-         0x83, 0x8c, 0x8b, 0xff,
-         0x83, 0x8c, 0x8b, 0xff,
-         0xb5, 0xcf, 0x9c, 0xff,
-         0x21, 0x08, 0x6b, 0xff,
-         0xb5, 0xcf, 0x9c, 0xff,
-         0x83, 0x8c, 0x8b, 0xff,
-         0x52, 0x4a, 0x7b, 0xff,
-         0xb5, 0xcf, 0x9c, 0xff,
-         0x83, 0x8c, 0x8b, 0xff,
-         0x52, 0x4a, 0x7b, 0xff,
-         0x83, 0x8c, 0x8b, 0xff
-      },
-      {0x73, 0xb6, 0x4d, 0x20, 0x98, 0x2b, 0xe1, 0xb8}
-   },
-   {
-      {
-         0x00, 0x2c, 0xff, 0xff,
-         0x94, 0x8d, 0x7b, 0xff,
-         0x4a, 0x5c, 0xbd, 0xff,
-         0x4a, 0x5c, 0xbd, 0xff,
-         0x4a, 0x5c, 0xbd, 0xff,
-         0x94, 0x8d, 0x7b, 0xff,
-         0x94, 0x8d, 0x7b, 0xff,
-         0x94, 0x8d, 0x7b, 0xff,
-         0xde, 0xbe, 0x39, 0xff,
-         0x94, 0x8d, 0x7b, 0xff,
-         0xde, 0xbe, 0x39, 0xff,
-         0xde, 0xbe, 0x39, 0xff,
-         0xde, 0xbe, 0x39, 0xff,
-         0xde, 0xbe, 0x39, 0xff,
-         0xde, 0xbe, 0x39, 0xff,
-         0x94, 0x8d, 0x7b, 0xff
-      },
-      {0xe7, 0xdd, 0x7f, 0x01, 0xf9, 0xab, 0x08, 0x80}
-   },
-   {
-      {
-         0x6b, 0x24, 0x21, 0xff,
-         0x7b, 0x4f, 0x5d, 0xff,
-         0x7b, 0x4f, 0x5d, 0xff,
-         0x8b, 0x7a, 0x99, 0xff,
-         0x7b, 0x4f, 0x5d, 0xff,
-         0x7b, 0x4f, 0x5d, 0xff,
-         0x6b, 0x24, 0x21, 0xff,
-         0x8b, 0x7a, 0x99, 0xff,
-         0x9c, 0xa6, 0xd6, 0xff,
-         0x6b, 0x24, 0x21, 0xff,
-         0x7b, 0x4f, 0x5d, 0xff,
-         0x8b, 0x7a, 0x99, 0xff,
-         0x6b, 0x24, 0x21, 0xff,
-         0x8b, 0x7a, 0x99, 0xff,
-         0x7b, 0x4f, 0x5d, 0xff,
-         0x9c, 0xa6, 0xd6, 0xff
-      },
-      {0x3a, 0x9d, 0x24, 0x69, 0xbd, 0x9f, 0xb4, 0x39}
-   }
-};
-
-
-static const struct dxt_data 
-dxt1_rgba_data[] = {
-   {
-      {
-         0x00, 0x00, 0x00, 0x00,
-         0x4e, 0xaa, 0x90, 0xff,
-         0x4e, 0xaa, 0x90, 0xff,
-         0x00, 0x00, 0x00, 0x00,
-         0x4e, 0xaa, 0x90, 0xff,
-         0x29, 0xff, 0xff, 0xff,
-         0x00, 0x00, 0x00, 0x00,
-         0x4e, 0xaa, 0x90, 0xff,
-         0x73, 0x55, 0x21, 0xff,
-         0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-         0x4e, 0xaa, 0x90, 0xff,
-         0x4e, 0xaa, 0x90, 0xff,
-         0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-         0x4e, 0xaa, 0x90, 0xff
-      },
-      {0xff, 0x2f, 0xa4, 0x72, 0xeb, 0xb2, 0xbd, 0xbe}
-   },
-   {
-      {
-         0xb5, 0xe3, 0x63, 0xff,
-         0x00, 0x00, 0x00, 0x00,
-         0x6b, 0x24, 0x84, 0xff,
-         0xb5, 0xe3, 0x63, 0xff,
-         0x00, 0x00, 0x00, 0x00,
-         0xb5, 0xe3, 0x63, 0xff,
-         0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-         0x6b, 0x24, 0x84, 0xff,
-         0x6b, 0x24, 0x84, 0xff,
-         0x00, 0x00, 0x00, 0x00,
-         0xb5, 0xe3, 0x63, 0xff,
-         0x90, 0x83, 0x73, 0xff,
-         0xb5, 0xe3, 0x63, 0xff
-      },
-      {0x30, 0x69, 0x0c, 0xb7, 0x4d, 0xf7, 0x0f, 0x67}
-   },
-   {
-      {
-         0x00, 0x00, 0x00, 0x00,
-         0xc6, 0x86, 0x8c, 0xff,
-         0xc6, 0x86, 0x8c, 0xff,
-         0x21, 0x65, 0x42, 0xff,
-         0x21, 0x65, 0x42, 0xff,
-         0x21, 0x65, 0x42, 0xff,
-         0x21, 0x65, 0x42, 0xff,
-         0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-         0x21, 0x65, 0x42, 0xff,
-         0xc6, 0x86, 0x8c, 0xff,
-         0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-         0xc6, 0x86, 0x8c, 0xff
-      },
-      {0x28, 0x23, 0x31, 0xc4, 0x17, 0xc0, 0xd3, 0x7f}
-   },
-   {
-      {
-         0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-         0xc6, 0xe3, 0x9c, 0xff,
-         0x7b, 0x1c, 0x52, 0xff,
-         0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00,
-         0x7b, 0x1c, 0x52, 0xff,
-         0x00, 0x00, 0x00, 0x00,
-         0x7b, 0x1c, 0x52, 0xff,
-         0xa0, 0x7f, 0x77, 0xff,
-         0xc6, 0xe3, 0x9c, 0xff,
-         0x00, 0x00, 0x00, 0x00,
-         0xa0, 0x7f, 0x77, 0xff
-      },
-      {0xea, 0x78, 0x13, 0xc7, 0x7f, 0xfc, 0x33, 0xb6}
-   },
-};
-
-
-static const struct dxt_data 
-dxt3_rgba_data[] = {
-   {
-      {
-         0x6d, 0xc6, 0x96, 0x77,
-         0x6d, 0xc6, 0x96, 0xee,
-         0x6d, 0xc6, 0x96, 0xaa,
-         0x8c, 0xff, 0xb5, 0x44,
-         0x6d, 0xc6, 0x96, 0xff,
-         0x6d, 0xc6, 0x96, 0x88,
-         0x31, 0x55, 0x5a, 0x66,
-         0x6d, 0xc6, 0x96, 0x99,
-         0x31, 0x55, 0x5a, 0xbb,
-         0x31, 0x55, 0x5a, 0x55,
-         0x31, 0x55, 0x5a, 0x11,
-         0x6d, 0xc6, 0x96, 0xcc,
-         0x6d, 0xc6, 0x96, 0xcc,
-         0x6d, 0xc6, 0x96, 0x11,
-         0x31, 0x55, 0x5a, 0x44,
-         0x31, 0x55, 0x5a, 0x88
-      },
-      {0xe7, 0x4a, 0x8f, 0x96, 0x5b, 0xc1, 0x1c, 0x84, 0xf6, 0x8f, 0xab, 0x32, 0x2a, 0x9a, 0x95, 0x5a}
-   },
-   {
-      {
-         0xad, 0xeb, 0x73, 0x99,
-         0x97, 0xaa, 0x86, 0x66,
-         0x6b, 0x28, 0xad, 0x99,
-         0xad, 0xeb, 0x73, 0x99,
-         0x6b, 0x28, 0xad, 0x22,
-         0xad, 0xeb, 0x73, 0xff,
-         0x97, 0xaa, 0x86, 0x55,
-         0x6b, 0x28, 0xad, 0x55,
-         0x6b, 0x28, 0xad, 0x44,
-         0xad, 0xeb, 0x73, 0x33,
-         0x6b, 0x28, 0xad, 0xee,
-         0x6b, 0x28, 0xad, 0x99,
-         0x97, 0xaa, 0x86, 0x66,
-         0xad, 0xeb, 0x73, 0xbb,
-         0x97, 0xaa, 0x86, 0x99,
-         0xad, 0xeb, 0x73, 0xbb
-      },
-      {0x69, 0x99, 0xf2, 0x55, 0x34, 0x9e, 0xb6, 0xb9, 0x4e, 0xaf, 0x55, 0x69, 0x18, 0x61, 0x51, 0x22}
-   },
-   {
-      {
-         0x63, 0xd7, 0xd6, 0x00,
-         0x57, 0x62, 0x5d, 0xdd,
-         0x57, 0x62, 0x5d, 0xcc,
-         0x57, 0x62, 0x5d, 0xbb,
-         0x52, 0x28, 0x21, 0xaa,
-         0x57, 0x62, 0x5d, 0xcc,
-         0x57, 0x62, 0x5d, 0xcc,
-         0x57, 0x62, 0x5d, 0x66,
-         0x57, 0x62, 0x5d, 0x22,
-         0x57, 0x62, 0x5d, 0xdd,
-         0x63, 0xd7, 0xd6, 0xee,
-         0x57, 0x62, 0x5d, 0x33,
-         0x63, 0xd7, 0xd6, 0x55,
-         0x52, 0x28, 0x21, 0x55,
-         0x57, 0x62, 0x5d, 0x11,
-         0x5d, 0x9c, 0x99, 0xee
-      },
-      {0xd0, 0xbc, 0xca, 0x6c, 0xd2, 0x3e, 0x55, 0xe1, 0xba, 0x66, 0x44, 0x51, 0xfc, 0xfd, 0xcf, 0xb4}
-   },
-   {
-      {
-         0x94, 0x6f, 0x60, 0x22,
-         0x94, 0x6f, 0x60, 0x22,
-         0xc5, 0xab, 0x76, 0x11,
-         0xc5, 0xab, 0x76, 0xee,
-         0x63, 0x34, 0x4a, 0xdd,
-         0x63, 0x34, 0x4a, 0x33,
-         0x94, 0x6f, 0x60, 0x77,
-         0xf7, 0xe7, 0x8c, 0x00,
-         0x94, 0x6f, 0x60, 0x33,
-         0x63, 0x34, 0x4a, 0xaa,
-         0x94, 0x6f, 0x60, 0x77,
-         0x63, 0x34, 0x4a, 0xcc,
-         0x94, 0x6f, 0x60, 0xaa,
-         0xf7, 0xe7, 0x8c, 0x99,
-         0x63, 0x34, 0x4a, 0x44,
-         0xc5, 0xab, 0x76, 0xaa
-      },
-      {0x22, 0xe1, 0x3d, 0x07, 0xa3, 0xc7, 0x9a, 0xa4, 0x31, 0xf7, 0xa9, 0x61, 0xaf, 0x35, 0x77, 0x93}
-   },
-};
-
-
-static const struct dxt_data 
-dxt5_rgba_data[] = {
-   {
-      {
-         0x6d, 0xc6, 0x96, 0x74,
-         0x6d, 0xc6, 0x96, 0xf8,
-         0x6d, 0xc6, 0x96, 0xb6,
-         0x8c, 0xff, 0xb5, 0x53,
-         0x6d, 0xc6, 0x96, 0xf8,
-         0x6d, 0xc6, 0x96, 0x95,
-         0x31, 0x55, 0x5a, 0x53,
-         0x6d, 0xc6, 0x96, 0x95,
-         0x31, 0x55, 0x5a, 0xb6,
-         0x31, 0x55, 0x5a, 0x53,
-         0x31, 0x55, 0x5a, 0x11,
-         0x6d, 0xc6, 0x96, 0xd7,
-         0x6d, 0xc6, 0x96, 0xb6,
-         0x6d, 0xc6, 0x96, 0x11,
-         0x31, 0x55, 0x5a, 0x32,
-         0x31, 0x55, 0x5a, 0x95
-      },
-      {0xf8, 0x11, 0xc5, 0x0c, 0x9a, 0x73, 0xb4, 0x9c, 0xf6, 0x8f, 0xab, 0x32, 0x2a, 0x9a, 0x95, 0x5a}
-   },
-   {
-      {
-         0xad, 0xeb, 0x73, 0xa1,
-         0x97, 0xaa, 0x86, 0x65,
-         0x6b, 0x28, 0xad, 0xa1,
-         0xad, 0xeb, 0x73, 0xa1,
-         0x6b, 0x28, 0xad, 0x2a,
-         0xad, 0xeb, 0x73, 0xfb,
-         0x97, 0xaa, 0x86, 0x47,
-         0x6b, 0x28, 0xad, 0x65,
-         0x6b, 0x28, 0xad, 0x47,
-         0xad, 0xeb, 0x73, 0x47,
-         0x6b, 0x28, 0xad, 0xdd,
-         0x6b, 0x28, 0xad, 0xa1,
-         0x97, 0xaa, 0x86, 0x65,
-         0xad, 0xeb, 0x73, 0xbf,
-         0x97, 0xaa, 0x86, 0xa1,
-         0xad, 0xeb, 0x73, 0xbf
-      },
-      {0xfb, 0x2a, 0x34, 0x19, 0xdc, 0xbf, 0xe8, 0x71, 0x4e, 0xaf, 0x55, 0x69, 0x18, 0x61, 0x51, 0x22}
-   },
-   {
-      {
-         0x63, 0xd7, 0xd6, 0x00,
-         0x57, 0x62, 0x5d, 0xf5,
-         0x57, 0x62, 0x5d, 0xd2,
-         0x57, 0x62, 0x5d, 0xaf,
-         0x52, 0x28, 0x21, 0xaf,
-         0x57, 0x62, 0x5d, 0xd2,
-         0x57, 0x62, 0x5d, 0xd2,
-         0x57, 0x62, 0x5d, 0x69,
-         0x57, 0x62, 0x5d, 0x23,
-         0x57, 0x62, 0x5d, 0xd2,
-         0x63, 0xd7, 0xd6, 0xf5,
-         0x57, 0x62, 0x5d, 0x46,
-         0x63, 0xd7, 0xd6, 0x46,
-         0x52, 0x28, 0x21, 0x69,
-         0x57, 0x62, 0x5d, 0x23,
-         0x5d, 0x9c, 0x99, 0xf5
-      },
-      {0xf5, 0x00, 0x81, 0x36, 0xa9, 0x17, 0xec, 0x1e, 0xba, 0x66, 0x44, 0x51, 0xfc, 0xfd, 0xcf, 0xb4}
-   },
-   {
-      {
-         0x94, 0x6f, 0x60, 0x25,
-         0x94, 0x6f, 0x60, 0x25,
-         0xc5, 0xab, 0x76, 0x05,
-         0xc5, 0xab, 0x76, 0xe8,
-         0x63, 0x34, 0x4a, 0xe8,
-         0x63, 0x34, 0x4a, 0x25,
-         0x94, 0x6f, 0x60, 0x86,
-         0xf7, 0xe7, 0x8c, 0x05,
-         0x94, 0x6f, 0x60, 0x25,
-         0x63, 0x34, 0x4a, 0xa7,
-         0x94, 0x6f, 0x60, 0x66,
-         0x63, 0x34, 0x4a, 0xc7,
-         0x94, 0x6f, 0x60, 0xa7,
-         0xf7, 0xe7, 0x8c, 0xa7,
-         0x63, 0x34, 0x4a, 0x45,
-         0xc5, 0xab, 0x76, 0xa7
-      },
-      {0xe8, 0x05, 0x7f, 0x80, 0x33, 0x5f, 0xb5, 0x79, 0x31, 0xf7, 0xa9, 0x61, 0xaf, 0x35, 0x77, 0x93}
-   },
-};
-
-
-static INLINE void 
-st_sample_dxt_pixel_block(enum pipe_format format, 
-                          uint8_t *raw,
-                          float *rgba, unsigned rgba_stride, 
-                          unsigned w, unsigned h)
-{
-   const struct dxt_data *data;
-   unsigned n;
-   unsigned i;
-   unsigned x, y, ch;
-   
-   switch(format) {
-   case PIPE_FORMAT_DXT1_RGB:
-      data = dxt1_rgb_data;
-      n = sizeof(dxt1_rgb_data)/sizeof(dxt1_rgb_data[0]);
-      break;
-   case PIPE_FORMAT_DXT1_RGBA:
-      data = dxt1_rgba_data;
-      n = sizeof(dxt1_rgba_data)/sizeof(dxt1_rgba_data[0]);
-      break;
-   case PIPE_FORMAT_DXT3_RGBA:
-      data = dxt3_rgba_data;
-      n = sizeof(dxt3_rgba_data)/sizeof(dxt3_rgba_data[0]);
-      break;
-   case PIPE_FORMAT_DXT5_RGBA:
-      data = dxt5_rgba_data;
-      n = sizeof(dxt5_rgba_data)/sizeof(dxt5_rgba_data[0]);
-      break;
-   default:
-      assert(0);
-      return;
-   }
-   
-   i = st_random() % n;
-   
-   for(y = 0; y < h; ++y)
-      for(x = 0; x < w; ++x)
-         for(ch = 0; ch < 4; ++ch)
-            rgba[y*rgba_stride + x*4 + ch] = (float)(data[i].rgba[y*4*4 + x*4 + ch])/255.0f;
-   
-   memcpy(raw, data[i].raw, util_format_get_blocksize(format));
-}
-
-
-static INLINE void 
-st_sample_generic_pixel_block(enum pipe_format format, 
-                              uint8_t *raw,
-                              float *rgba, unsigned rgba_stride,
-                              unsigned w, unsigned h,
-                              boolean norm)
-{
-   unsigned i;
-   unsigned x, y, ch;
-   int blocksize = util_format_get_blocksize(format);
-   
-   if (norm) {
-      for (y = 0; y < h; ++y) {
-         for (x = 0; x < w; ++x) {
-            for (ch = 0; ch < 4; ++ch) {
-               unsigned offset = y*rgba_stride + x*4 + ch;
-               rgba[offset] = (st_random() & 0xff) / (double)0xff;
-            }
-         }
-      }
-
-      util_format_write_4f(format,
-                           rgba, rgba_stride * sizeof(float),
-                           raw, util_format_get_stride(format, w),
-                           0, 0, w, h);
-
-   } else {
-      for (i = 0; i < blocksize; ++i)
-         raw[i] = (uint8_t)st_random();
-   }
-
-   util_format_read_4f(format,
-                       rgba, rgba_stride * sizeof(float),
-                       raw, util_format_get_stride(format, w),
-                       0, 0, w, h);
-
-   if (format == PIPE_FORMAT_UYVY || format == PIPE_FORMAT_YUYV) {
-      for (y = 0; y < h; ++y) {
-         for (x = 0; x < w; ++x) {
-            for (ch = 0; ch < 4; ++ch) {
-               unsigned offset = y*rgba_stride + x*4 + ch;
-               rgba[offset] = CLAMP(rgba[offset], 0.0f, 1.0f);
-            }
-         }
-      }
-   }
-}
-
-
-/**
- * Randomly sample pixels.
- */
-void 
-st_sample_pixel_block(enum pipe_format format,
-                      void *raw,
-                      float *rgba, unsigned rgba_stride,
-                      unsigned w, unsigned h,
-                      boolean norm)
-{
-   switch(format) {
-   case PIPE_FORMAT_DXT1_RGB:
-   case PIPE_FORMAT_DXT1_RGBA:
-   case PIPE_FORMAT_DXT3_RGBA:
-   case PIPE_FORMAT_DXT5_RGBA:
-      st_sample_dxt_pixel_block(format, raw, rgba, rgba_stride, w, h);
-      break;
-
-   default:
-      st_sample_generic_pixel_block(format, raw, rgba, rgba_stride, w, h, norm);
-      break;
-   }
-}
-
-
-void
-st_sample_surface(struct pipe_context *pipe,
-                  struct st_surface *surface,
-                  float *rgba,
-                  boolean norm)
-{
-   struct pipe_resource *texture = surface->texture;
-   unsigned width = u_minify(texture->width0, surface->level);
-   unsigned height = u_minify(texture->height0, surface->level);
-   uint rgba_stride = width * 4;
-   struct pipe_transfer *transfer;
-   void *raw;
-
-   transfer = pipe_get_transfer(pipe,
-                                surface->texture,
-                                surface->level,
-                                surface->layer,
-                                PIPE_TRANSFER_WRITE,
-                                0, 0,
-                                width,
-                                height);
-   if (!transfer)
-      return;
-
-   raw = pipe->transfer_map(pipe, transfer);
-   if (raw) {
-      enum pipe_format format = texture->format;
-      uint x, y;
-      int nblocksx = util_format_get_nblocksx(format, width);
-      int nblocksy = util_format_get_nblocksy(format, height);
-      int blockwidth = util_format_get_blockwidth(format);
-      int blockheight = util_format_get_blockheight(format);
-      int blocksize = util_format_get_blocksize(format);
-
-
-      for (y = 0; y < nblocksy; ++y) {
-         for (x = 0; x < nblocksx; ++x) {
-            st_sample_pixel_block(format,
-                                  (uint8_t *) raw + y * transfer->stride + x * blocksize,
-                                  rgba + y * blockheight * rgba_stride + x * blockwidth * 4,
-                                  rgba_stride,
-                                  MIN2(blockwidth, width - x*blockwidth),
-                                  MIN2(blockheight, height - y*blockheight),
-                                  norm);
-         }
-      }
-
-      pipe->transfer_unmap(pipe, transfer);
-   }
-
-   pipe->transfer_destroy(pipe, transfer);
-}
diff --git a/src/gallium/state_trackers/python/st_sample.h b/src/gallium/state_trackers/python/st_sample.h
deleted file mode 100644 (file)
index 2fdbb39..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2008 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, 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 TUNGSTEN 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.
- * 
- **************************************************************************/
-
-
-#ifndef ST_SAMPLE_H_
-#define ST_SAMPLE_H_
-
-
-#include "pipe/p_format.h"
-
-struct pipe_context;
-struct st_surface;
-
-
-void 
-st_sample_pixel_block(enum pipe_format format,
-                      void *raw,
-                      float *rgba, unsigned rgba_stride,
-                      unsigned w, unsigned h,
-                      boolean norm);
-
-void
-st_sample_surface(struct pipe_context *pipe,
-                  struct st_surface *surface,
-                  float *rgba,
-                  boolean norm);
-
-
-#endif /* ST_SAMPLE_H_ */
diff --git a/src/gallium/state_trackers/python/st_softpipe_winsys.c b/src/gallium/state_trackers/python/st_softpipe_winsys.c
deleted file mode 100644 (file)
index 8584bad..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2007 Tungsten Graphics, Inc., Bismarck, ND., USA
- * 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 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, AUTHORS 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.
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * 
- **************************************************************************/
-
-#include "util/u_debug.h"
-#include "softpipe/sp_public.h"
-#include "llvmpipe/lp_public.h"
-#include "state_tracker/sw_winsys.h"
-#include "sw/null/null_sw_winsys.h"
-#include "st_winsys.h"
-
-
-struct pipe_screen *
-st_software_screen_create(const char *driver)
-{
-   struct sw_winsys *ws;
-   struct pipe_screen *screen = NULL;
-
-   if (!driver) {
-      const char *default_driver;
-
-#if defined(HAVE_LLVMPIPE)
-      default_driver = "llvmpipe";
-#elif defined(HAVE_SOFTPIPE)
-      default_driver = "softpipe";
-#else
-      default_driver = "";
-#endif
-
-      driver = debug_get_option("GALLIUM_DRIVER", default_driver);
-   }
-
-   ws = null_sw_create();
-   if(!ws)
-      return NULL;
-
-#ifdef HAVE_LLVMPIPE
-   if (strcmp(driver, "llvmpipe") == 0) {
-      screen = llvmpipe_create_screen(ws);
-   }
-#endif
-
-#ifdef HAVE_SOFTPIPE
-   if (strcmp(driver, "softpipe") == 0) {
-      screen = softpipe_create_screen(ws);
-   }
-#endif
-
-   if (!screen) {
-      ws->destroy(ws);
-   }
-
-   return screen;
-}
diff --git a/src/gallium/state_trackers/python/st_winsys.h b/src/gallium/state_trackers/python/st_winsys.h
deleted file mode 100644 (file)
index 7d4066d..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2008 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, 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 TUNGSTEN 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.
- * 
- **************************************************************************/
-
-
-#ifndef ST_WINSYS_H_
-#define ST_WINSYS_H_
-
-
-struct pipe_screen;
-
-
-struct pipe_screen *
-st_hardware_screen_create(void);
-
-struct pipe_screen *
-st_software_screen_create(const char *driver);
-
-
-#endif /* ST_WINSYS_H_ */
diff --git a/src/gallium/state_trackers/python/tests/regress/fragment-shader/frag-abs.png b/src/gallium/state_trackers/python/tests/regress/fragment-shader/frag-abs.png
deleted file mode 100644 (file)
index c947a7b..0000000
Binary files a/src/gallium/state_trackers/python/tests/regress/fragment-shader/frag-abs.png and /dev/null differ
diff --git a/src/gallium/state_trackers/python/u_format.i b/src/gallium/state_trackers/python/u_format.i
deleted file mode 100644 (file)
index 2184b42..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2010 VMware, 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 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, AUTHORS 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.
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- **************************************************************************/
-
-
-static INLINE const char *
-util_format_name(enum pipe_format format);
-
-static INLINE boolean
-util_format_is_s3tc(enum pipe_format format);
-
-static INLINE boolean
-util_format_is_depth_or_stencil(enum pipe_format format);
-
-static INLINE boolean
-util_format_is_depth_and_stencil(enum pipe_format format);
-
-
-uint
-util_format_get_blocksizebits(enum pipe_format format);
-
-uint
-util_format_get_blocksize(enum pipe_format format);
-
-uint
-util_format_get_blockwidth(enum pipe_format format);
-
-uint
-util_format_get_blockheight(enum pipe_format format);
-
-unsigned
-util_format_get_nblocksx(enum pipe_format format,
-                         unsigned x);
-
-unsigned
-util_format_get_nblocksy(enum pipe_format format,
-                         unsigned y);
-
-unsigned
-util_format_get_nblocks(enum pipe_format format,
-                        unsigned width,
-                        unsigned height);
-
-size_t
-util_format_get_stride(enum pipe_format format,
-                       unsigned width);
-
-size_t
-util_format_get_2d_size(enum pipe_format format,
-                        size_t stride,
-                        unsigned height);
-
-uint
-util_format_get_component_bits(enum pipe_format format,
-                               enum util_format_colorspace colorspace,
-                               uint component);
-
-boolean
-util_format_has_alpha(enum pipe_format format);
-
-
-unsigned
-util_format_get_nr_components(enum pipe_format format);
-
-
index 023996ce2d8c848ea84dc265b6e5ec5826ec2776..70d860ddc8eaa21bfcff2d34ef9cec41dad3fb05 100644 (file)
@@ -229,7 +229,6 @@ combine_shaders(const struct shader_asm_info *shaders[SHADER_STAGES], int num_sh
       return NULL;
 
    p = pipe->create_fs_state(pipe, shader);
-   ureg_destroy(ureg);
 
    if (num_temps >= 1) {
       for (i = start_temp; i < end_temp; i++) {
@@ -237,6 +236,8 @@ combine_shaders(const struct shader_asm_info *shaders[SHADER_STAGES], int num_sh
       }
    }
 
+   ureg_destroy(ureg);
+
    if (temp)
       free(temp);
    if (constant)
index 32636c603dc2f41a053fd9608477c0a9ed8583e0..fb5d5e8b9296f1a848f9a014f1ea9cadf914c973 100644 (file)
@@ -52,6 +52,9 @@ wglCreatePbufferARB(HDC _hDC,
    int useLargest = 0;
    const struct stw_pixelformat_info *info;
    struct stw_framebuffer *fb;
+   DWORD dwExStyle;
+   DWORD dwStyle;
+   RECT rect;
    HWND hWnd;
    HDC hDC;
 
@@ -113,15 +116,45 @@ wglCreatePbufferARB(HDC _hDC,
       first = FALSE;
    }
 
-   hWnd = CreateWindowEx(0,
+   dwExStyle = 0;
+   dwStyle = WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
+
+   if (0) {
+      /*
+       * Don't hide the window -- useful for debugging what the application is
+       * drawing
+       */
+
+      dwStyle |= WS_VISIBLE | WS_OVERLAPPEDWINDOW;
+   } else {
+      dwStyle |= WS_POPUPWINDOW;
+   }
+
+   rect.left = 0;
+   rect.top = 0;
+   rect.right = rect.left + iWidth;
+   rect.bottom = rect.top + iHeight;
+
+   /*
+    * The CreateWindowEx parameters are the total (outside) dimensions of the
+    * window, which can vary with Windows version and user settings.  Use
+    * AdjustWindowRect to get the required total area for the given client area.
+    *
+    * AdjustWindowRectEx does not accept WS_OVERLAPPED style (which is defined
+    * as 0), which means we need to use some other style instead, e.g.,
+    * WS_OVERLAPPEDWINDOW or WS_POPUPWINDOW as above.
+    */
+
+   AdjustWindowRectEx(&rect, dwStyle, FALSE, dwExStyle);
+
+   hWnd = CreateWindowEx(dwExStyle,
                          "wglpbuffer", /* wc.lpszClassName */
-                         "wglpbuffer",
-#if 0 /* Useful for debugging what the application is drawing */
-                         WS_VISIBLE |
-#endif
-                         WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
-                         CW_USEDEFAULT, CW_USEDEFAULT, /* x, y */
-                         iWidth, iHeight,
+                         NULL,
+                         dwStyle,
+                         CW_USEDEFAULT, /* x */
+                         CW_USEDEFAULT, /* y */
+                         rect.right - rect.left, /* width */
+                         rect.bottom - rect.top, /* height */
                          NULL,
                          NULL,
                          NULL,
@@ -130,6 +163,18 @@ wglCreatePbufferARB(HDC _hDC,
       return 0;
    }
 
+#ifdef DEBUG
+   /*
+    * Verify the client area size matches the specified size.
+    */
+
+   GetClientRect(hWnd, &rect);
+   assert(rect.left == 0);
+   assert(rect.top == 0);
+   assert(rect.right - rect.left == iWidth);
+   assert(rect.bottom - rect.top == iHeight);
+#endif
+
    hDC = GetDC(hWnd);
    if (!hDC) {
       return 0;
index 733222aa21c828662b7b2058119f08bd578de241..d8b1440a688d089f6469bcdb2916025eacecc5c2 100644 (file)
@@ -112,7 +112,7 @@ stw_framebuffer_release(
 static INLINE void
 stw_framebuffer_get_size( struct stw_framebuffer *fb )
 {
-   unsigned width, height;
+   LONG width, height;
    RECT client_rect;
    RECT window_rect;
    POINT client_pos;
@@ -126,10 +126,17 @@ stw_framebuffer_get_size( struct stw_framebuffer *fb )
    width = client_rect.right - client_rect.left;
    height = client_rect.bottom - client_rect.top;
 
-   if(width < 1)
-      width = 1;
-   if(height < 1)
-      height = 1;
+   if (width <= 0 || height <= 0) {
+      /*
+       * When the window is minimized GetClientRect will return zeros.  Simply
+       * preserve the current window size, until the window is restored or
+       * maximized again.
+       */
+
+      assert(width == 0 && height == 0);
+
+      return;
+   }
 
    if(width != fb->width || height != fb->height) {
       fb->must_resize = TRUE;
@@ -150,13 +157,13 @@ stw_framebuffer_get_size( struct stw_framebuffer *fb )
 
 #if 0
    debug_printf("\n");
-   debug_printf("%s: client_position = (%i, %i)\n",
+   debug_printf("%s: client_position = (%li, %li)\n",
                 __FUNCTION__, client_pos.x, client_pos.y);
-   debug_printf("%s: window_rect = (%i, %i) - (%i, %i)\n",
+   debug_printf("%s: window_rect = (%li, %li) - (%li, %li)\n",
                 __FUNCTION__,
                 window_rect.left, window_rect.top,
                 window_rect.right, window_rect.bottom);
-   debug_printf("%s: client_rect = (%i, %i) - (%i, %i)\n",
+   debug_printf("%s: client_rect = (%li, %li) - (%li, %li)\n",
                 __FUNCTION__,
                 fb->client_rect.left, fb->client_rect.top,
                 fb->client_rect.right, fb->client_rect.bottom);
index 2ecf3457a76f768df269b9fdd37c3d8f85e9a0eb..b48bcad3710bb39cb6866e148a1ab65e1980abe4 100644 (file)
@@ -7,10 +7,10 @@
 static struct pipe_screen *
 create_screen(int fd)
 {
-   struct r300_winsys_screen *sws;
+   struct radeon_winsys *sws;
    struct pipe_screen *screen;
 
-   sws = r300_drm_winsys_screen_create(fd);
+   sws = radeon_drm_winsys_create(fd);
    if (!sws)
       return NULL;
 
index a33d419e0aa89c513aadb81aa051b48bfce7b174..658c532b404c152f1da56cbff1d72ee5c73d87d8 100644 (file)
@@ -118,10 +118,10 @@ static struct pipe_screen *
 pipe_r300_create_screen(int fd)
 {
 #if _EGL_PIPE_R300
-   struct r300_winsys_screen *sws;
+   struct radeon_winsys *sws;
    struct pipe_screen *screen;
 
-   sws = r300_drm_winsys_screen_create(fd);
+   sws = radeon_drm_winsys_create(fd);
    if (!sws)
       return NULL;
 
index d84bb92539aeb73e1aebd93343ecefe19e84e0bc..09940f0a194f3ece2c0735fd71e74b5f14992292 100644 (file)
@@ -7,10 +7,10 @@
 static struct pipe_screen *
 create_screen(int fd)
 {
-   struct r300_winsys_screen *sws;
+   struct radeon_winsys *sws;
    struct pipe_screen *screen;
 
-   sws = r300_drm_winsys_screen_create(fd);
+   sws = radeon_drm_winsys_create(fd);
    if (!sws)
       return NULL;
 
index 5a0a8dc573839bb2ec6f7213371fc83bd9e19e4d..b8410efbd89b25ca0e78331687434c83271bf1aa 100644 (file)
@@ -7,10 +7,10 @@
 static struct pipe_screen *
 create_screen(int fd)
 {
-   struct r300_winsys_screen *sws;
+   struct radeon_winsys *sws;
    struct pipe_screen *screen;
 
-   sws = r300_drm_winsys_screen_create(fd);
+   sws = radeon_drm_winsys_create(fd);
    if (!sws)
       return NULL;
 
diff --git a/src/gallium/tests/graw/fragment-shader b/src/gallium/tests/graw/fragment-shader
deleted file mode 120000 (symlink)
index c7dd0b7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../python/tests/regress/fragment-shader
\ No newline at end of file
diff --git a/src/gallium/tests/graw/fragment-shader/frag-abs.sh b/src/gallium/tests/graw/fragment-shader/frag-abs.sh
new file mode 100644 (file)
index 0000000..103d749
--- /dev/null
@@ -0,0 +1,13 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+DCL TEMP[0]
+
+IMM FLT32 { -0.5, -0.4, -0.6, 0.0 }
+
+ADD TEMP[0], IN[0], IMM[0]
+ABS OUT[0], TEMP[0]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-add.sh b/src/gallium/tests/graw/fragment-shader/frag-add.sh
new file mode 100644 (file)
index 0000000..bcb9420
--- /dev/null
@@ -0,0 +1,8 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+ADD OUT[0], IN[0], IN[0]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-cb-1d.sh b/src/gallium/tests/graw/fragment-shader/frag-cb-1d.sh
new file mode 100644 (file)
index 0000000..85fb9ea
--- /dev/null
@@ -0,0 +1,13 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+DCL CONST[1]
+DCL CONST[3]
+DCL TEMP[0..1]
+
+ADD TEMP[0], IN[0], CONST[1]
+RCP TEMP[1], CONST[3].xxxx
+MUL OUT[0], TEMP[0], TEMP[1]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-cb-2d.sh b/src/gallium/tests/graw/fragment-shader/frag-cb-2d.sh
new file mode 100644 (file)
index 0000000..bbc3a10
--- /dev/null
@@ -0,0 +1,9 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+DCL CONST[1][6]
+
+MOV OUT[0], CONST[1][6]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-dp3.sh b/src/gallium/tests/graw/fragment-shader/frag-dp3.sh
new file mode 100644 (file)
index 0000000..b528197
--- /dev/null
@@ -0,0 +1,8 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+DP3 OUT[0], IN[0], IN[0]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-dp4.sh b/src/gallium/tests/graw/fragment-shader/frag-dp4.sh
new file mode 100644 (file)
index 0000000..d59df76
--- /dev/null
@@ -0,0 +1,8 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+DP4 OUT[0], IN[0].xyzx, IN[0].xyzx
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-dst.sh b/src/gallium/tests/graw/fragment-shader/frag-dst.sh
new file mode 100644 (file)
index 0000000..fbb20fa
--- /dev/null
@@ -0,0 +1,8 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+DST OUT[0], IN[0], IN[0]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-ex2.sh b/src/gallium/tests/graw/fragment-shader/frag-ex2.sh
new file mode 100644 (file)
index 0000000..b511288
--- /dev/null
@@ -0,0 +1,11 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+DCL TEMP[0]
+
+EX2 TEMP[0], IN[0].xxxx
+MUL OUT[0], TEMP[0], IN[0]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-face.sh b/src/gallium/tests/graw/fragment-shader/frag-face.sh
new file mode 100644 (file)
index 0000000..5745b6a
--- /dev/null
@@ -0,0 +1,14 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL IN[1], FACE, CONSTANT
+DCL OUT[0], COLOR
+DCL TEMP[0]
+IMM FLT32 { 0.5, 1.0, 0.0, 0.0 }
+
+MUL TEMP[0], IN[1].xxxx, IMM[0].xxxx
+ADD TEMP[0], TEMP[0], IMM[0].yyyy
+
+MOV OUT[0], TEMP[0]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-flr.sh b/src/gallium/tests/graw/fragment-shader/frag-flr.sh
new file mode 100644 (file)
index 0000000..99a2f96
--- /dev/null
@@ -0,0 +1,15 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+DCL TEMP[0]
+
+IMM FLT32 { 2.5, 4.0,  2.0, 1.0 }
+IMM FLT32 { 0.4, 0.25, 0.5, 1.0 }
+
+MUL TEMP[0], IN[0], IMM[0]
+FLR TEMP[0], TEMP[0]
+MUL OUT[0], TEMP[0], IMM[1]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-frc.sh b/src/gallium/tests/graw/fragment-shader/frag-frc.sh
new file mode 100644 (file)
index 0000000..a54c262
--- /dev/null
@@ -0,0 +1,13 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+DCL TEMP[0]
+
+IMM FLT32 { 2.7, 3.1, 4.5, 1.0 }
+
+MUL TEMP[0], IN[0], IMM[0]
+FRC OUT[0], TEMP[0]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-kil.sh b/src/gallium/tests/graw/fragment-shader/frag-kil.sh
new file mode 100644 (file)
index 0000000..583b0ca
--- /dev/null
@@ -0,0 +1,18 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+DCL TEMP[0]
+
+IMM FLT32 { 0.6, 0.6, 0.6, 0.0 }
+IMM FLT32 { 0.01, 0.0, 0.0, 0.0 }
+IMM FLT32 { 1.0, 0.0, 0.0, 0.0 }
+
+SLT TEMP[0], IN[0], IMM[0]
+MUL OUT[0], IN[0], TEMP[0]
+MOV OUT[0].w, IMM[2].xxxx 
+SUB TEMP[0], TEMP[0], IMM[1].xxxy
+KIL TEMP[0]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-lg2.sh b/src/gallium/tests/graw/fragment-shader/frag-lg2.sh
new file mode 100644 (file)
index 0000000..5f5b4be
--- /dev/null
@@ -0,0 +1,15 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+DCL TEMP[0]
+
+IMM FLT32 { 1.0, 0.0, 0.0, 0.0 }
+IMM FLT32 { 0.5, 0.0, 0.0, 0.0 }
+
+ADD TEMP[0], IN[0], IMM[0]
+LG2 TEMP[0].x, TEMP[0].xxxx
+ADD OUT[0], TEMP[0], IMM[1]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-lit.sh b/src/gallium/tests/graw/fragment-shader/frag-lit.sh
new file mode 100644 (file)
index 0000000..6323c47
--- /dev/null
@@ -0,0 +1,8 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+LIT OUT[0], IN[0]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-lrp.sh b/src/gallium/tests/graw/fragment-shader/frag-lrp.sh
new file mode 100644 (file)
index 0000000..740809d
--- /dev/null
@@ -0,0 +1,11 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+DCL TEMP[0]
+
+ABS TEMP[0], IN[0]
+LRP OUT[0], TEMP[0], IN[0].xxxx, IN[0].yyyy
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-mad-immx.sh b/src/gallium/tests/graw/fragment-shader/frag-mad-immx.sh
new file mode 100644 (file)
index 0000000..6b03491
--- /dev/null
@@ -0,0 +1,10 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+DCL IMMX[0..1]  {{ 0.5, 0.4, 0.6, 1.0 },
+                 { 0.5, 0.4, 0.6, 0.0 }}
+
+MAD OUT[0], IN[0], IMMX[0], IMMX[1]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-mad.sh b/src/gallium/tests/graw/fragment-shader/frag-mad.sh
new file mode 100644 (file)
index 0000000..413b9dc
--- /dev/null
@@ -0,0 +1,11 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+IMM FLT32 { 0.5, 0.4, 0.6, 1.0 }
+IMM FLT32 { 0.5, 0.4, 0.6, 0.0 }
+
+MAD OUT[0], IN[0], IMM[0], IMM[1]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-max.sh b/src/gallium/tests/graw/fragment-shader/frag-max.sh
new file mode 100644 (file)
index 0000000..b69f213
--- /dev/null
@@ -0,0 +1,10 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+IMM FLT32 { 0.4, 0.4, 0.4, 0.0 }
+
+MAX OUT[0], IN[0], IMM[0]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-min.sh b/src/gallium/tests/graw/fragment-shader/frag-min.sh
new file mode 100644 (file)
index 0000000..df284f4
--- /dev/null
@@ -0,0 +1,10 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+IMM FLT32 { 0.6, 0.6, 0.6, 1.0 }
+
+MIN OUT[0], IN[0], IMM[0]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-mov.sh b/src/gallium/tests/graw/fragment-shader/frag-mov.sh
new file mode 100644 (file)
index 0000000..64af72f
--- /dev/null
@@ -0,0 +1,8 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+MOV OUT[0], IN[0]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-mul.sh b/src/gallium/tests/graw/fragment-shader/frag-mul.sh
new file mode 100644 (file)
index 0000000..bdd0b00
--- /dev/null
@@ -0,0 +1,10 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+IMM FLT32 { 0.5, 0.6, 0.7, 1.0 }
+
+MUL OUT[0], IN[0], IMM[0]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-rcp.sh b/src/gallium/tests/graw/fragment-shader/frag-rcp.sh
new file mode 100644 (file)
index 0000000..f4b611b
--- /dev/null
@@ -0,0 +1,15 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+DCL TEMP[0]
+
+IMM FLT32 { 1.0, 0.0, 0.0, 0.0 }
+IMM FLT32 { 1.5, 0.0, 0.0, 0.0 }
+
+ADD TEMP[0], IN[0], IMM[0]
+RCP TEMP[0].x, TEMP[0].xxxx
+SUB OUT[0], TEMP[0], IMM[1]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-rsq.sh b/src/gallium/tests/graw/fragment-shader/frag-rsq.sh
new file mode 100644 (file)
index 0000000..d1e9b0b
--- /dev/null
@@ -0,0 +1,15 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+DCL TEMP[0]
+
+IMM FLT32 { 1.0, 0.0, 0.0, 0.0 }
+IMM FLT32 { 1.5, 0.0, 0.0, 0.0 }
+
+ADD TEMP[0], IN[0], IMM[0]
+RSQ TEMP[0].x, TEMP[0].xxxx
+SUB OUT[0], TEMP[0], IMM[1]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-sge.sh b/src/gallium/tests/graw/fragment-shader/frag-sge.sh
new file mode 100644 (file)
index 0000000..1f33fac
--- /dev/null
@@ -0,0 +1,13 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+DCL TEMP[0]
+
+IMM FLT32 { 0.6, 0.6, 0.6, 0.0 }
+
+SGE TEMP[0], IN[0], IMM[0]
+MUL OUT[0], IN[0], TEMP[0]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-slt.sh b/src/gallium/tests/graw/fragment-shader/frag-slt.sh
new file mode 100644 (file)
index 0000000..d58b788
--- /dev/null
@@ -0,0 +1,13 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+DCL TEMP[0]
+
+IMM FLT32 { 0.6, 0.6, 0.6, 0.0 }
+
+SLT TEMP[0], IN[0], IMM[0]
+MUL OUT[0], IN[0], TEMP[0]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-srcmod-abs.sh b/src/gallium/tests/graw/fragment-shader/frag-srcmod-abs.sh
new file mode 100644 (file)
index 0000000..ecd1924
--- /dev/null
@@ -0,0 +1,13 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+DCL TEMP[0]
+
+IMM FLT32 { -0.3, -0.5, -0.4, 0.0 }
+
+ADD TEMP[0], IN[0], IMM[0]
+MOV OUT[0], |TEMP[0]|
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-srcmod-absneg.sh b/src/gallium/tests/graw/fragment-shader/frag-srcmod-absneg.sh
new file mode 100644 (file)
index 0000000..c2d99dd
--- /dev/null
@@ -0,0 +1,15 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+DCL TEMP[0]
+
+IMM FLT32 { -0.2, -0.3, -0.4, 0.0 }
+IMM FLT32 { -1.0, -1.0, -1.0, -1.0 }
+
+ADD TEMP[0], IN[0], IMM[0]
+MOV TEMP[0], -|TEMP[0]|
+MUL OUT[0], TEMP[0], IMM[1]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-srcmod-neg.sh b/src/gallium/tests/graw/fragment-shader/frag-srcmod-neg.sh
new file mode 100644 (file)
index 0000000..a08ab6d
--- /dev/null
@@ -0,0 +1,11 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+DCL TEMP[0]
+
+SUB TEMP[0], IN[0], IN[0].yzxw
+MOV OUT[0], -TEMP[0]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-srcmod-swz.sh b/src/gallium/tests/graw/fragment-shader/frag-srcmod-swz.sh
new file mode 100644 (file)
index 0000000..6110647
--- /dev/null
@@ -0,0 +1,8 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+MOV OUT[0], IN[0].yxzw
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-sub.sh b/src/gallium/tests/graw/fragment-shader/frag-sub.sh
new file mode 100644 (file)
index 0000000..673fca1
--- /dev/null
@@ -0,0 +1,8 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+SUB OUT[0], IN[0], IN[0].yzxw
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-tempx.sh b/src/gallium/tests/graw/fragment-shader/frag-tempx.sh
new file mode 100644 (file)
index 0000000..81bcad2
--- /dev/null
@@ -0,0 +1,14 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+DCL TEMPX[0][0..1]
+
+IMM FLT32 { -0.5, -0.4, -0.6, 0.0 }
+
+ADD TEMPX[0][0], IN[0], IMM[0]
+ADD TEMPX[0][1], IN[0], IMM[0]
+ABS OUT[0], TEMPX[0][1]
+
+END
diff --git a/src/gallium/tests/graw/fragment-shader/frag-xpd.sh b/src/gallium/tests/graw/fragment-shader/frag-xpd.sh
new file mode 100644 (file)
index 0000000..6ec8b11
--- /dev/null
@@ -0,0 +1,8 @@
+FRAG
+
+DCL IN[0], COLOR, LINEAR
+DCL OUT[0], COLOR
+
+XPD OUT[0], IN[0], IN[0].yzxw
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader b/src/gallium/tests/graw/vertex-shader
deleted file mode 120000 (symlink)
index 7b216e8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../python/tests/regress/vertex-shader
\ No newline at end of file
diff --git a/src/gallium/tests/graw/vertex-shader/vert-abs.sh b/src/gallium/tests/graw/vertex-shader/vert-abs.sh
new file mode 100644 (file)
index 0000000..062a48b
--- /dev/null
@@ -0,0 +1,15 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+DCL TEMP[0]
+
+IMM FLT32 { 0.2, 0.2, 0.0, 0.0 }
+
+ADD TEMP[0], IN[0], IMM[0]
+ABS OUT[0], TEMP[0]
+MOV OUT[1], IN[1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-add.sh b/src/gallium/tests/graw/vertex-shader/vert-add.sh
new file mode 100644 (file)
index 0000000..188931e
--- /dev/null
@@ -0,0 +1,13 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+IMM FLT32 { 0.2, -0.1, 0.0, 0.0 }
+
+ADD OUT[0], IN[0], IMM[0]
+MOV OUT[1], IN[1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-arl.sh b/src/gallium/tests/graw/vertex-shader/vert-arl.sh
new file mode 100644 (file)
index 0000000..0039597
--- /dev/null
@@ -0,0 +1,23 @@
+VERT
+
+DCL IN[0]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+DCL TEMP[0]
+
+DCL ADDR[0]
+
+IMM FLT32 { 3.0, 1.0, 1.0, 1.0 }
+IMM FLT32 { 1.0, 0.0, 0.0, 1.0 }
+IMM FLT32 { 0.0, 1.0, 0.0, 1.0 }
+IMM FLT32 { 0.0, 0.0, 1.0, 1.0 }
+IMM FLT32 { 1.0, 1.0, 0.0, 1.0 }
+IMM FLT32 { 0.0, 1.0, 1.0, 1.0 }
+
+MOV OUT[0], IN[0]
+MUL TEMP[0], IN[0], IMM[0]
+ARL ADDR[0].x, TEMP[0]
+MOV OUT[1], IMM[ADDR[0].x + 3]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-arr.sh b/src/gallium/tests/graw/vertex-shader/vert-arr.sh
new file mode 100644 (file)
index 0000000..fdde4f9
--- /dev/null
@@ -0,0 +1,23 @@
+VERT
+
+DCL IN[0]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+DCL TEMP[0]
+
+DCL ADDR[0]
+
+IMM FLT32 { 3.0, 1.0, 1.0, 1.0 }
+IMM FLT32 { 1.0, 0.0, 0.0, 1.0 }
+IMM FLT32 { 0.0, 1.0, 0.0, 1.0 }
+IMM FLT32 { 0.0, 0.0, 1.0, 1.0 }
+IMM FLT32 { 1.0, 1.0, 0.0, 1.0 }
+IMM FLT32 { 0.0, 1.0, 1.0, 1.0 }
+
+MOV OUT[0], IN[0]
+MUL TEMP[0], IN[0], IMM[0]
+ARR ADDR[0].x, TEMP[0]
+MOV OUT[1], IMM[ADDR[0].x + 3]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-cb-1d.sh b/src/gallium/tests/graw/vertex-shader/vert-cb-1d.sh
new file mode 100644 (file)
index 0000000..e227917
--- /dev/null
@@ -0,0 +1,16 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+DCL CONST[1]
+DCL CONST[3]
+DCL TEMP[0..1]
+
+MOV OUT[0], IN[0]
+ADD TEMP[0], IN[1], CONST[1]
+RCP TEMP[1], CONST[3].xxxx
+MUL OUT[1], TEMP[0], TEMP[1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-cb-2d.sh b/src/gallium/tests/graw/vertex-shader/vert-cb-2d.sh
new file mode 100644 (file)
index 0000000..39768d2
--- /dev/null
@@ -0,0 +1,12 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+DCL CONST[1][1..2]
+
+MOV OUT[0], IN[0]
+MAD OUT[1], IN[1], CONST[1][2], CONST[1][1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-dp3.sh b/src/gallium/tests/graw/vertex-shader/vert-dp3.sh
new file mode 100644 (file)
index 0000000..357e224
--- /dev/null
@@ -0,0 +1,16 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+DCL TEMP[0]
+
+IMM FLT32 { 0.0, 0.0, 1.0, 1.0 }
+
+DP3 TEMP[0].xy, IN[0], IN[0]
+MOV TEMP[0].zw, IMM[0]
+MUL OUT[0], IN[0], TEMP[0]
+MOV OUT[1], IN[1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-dp4.sh b/src/gallium/tests/graw/vertex-shader/vert-dp4.sh
new file mode 100644 (file)
index 0000000..14f6106
--- /dev/null
@@ -0,0 +1,16 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+DCL TEMP[0]
+
+IMM FLT32 { 0.0, 0.0, 1.0, 1.0 }
+
+DP4 TEMP[0].xy, IN[0], IN[0]
+MOV TEMP[0].zw, IMM[0]
+MUL OUT[0], IN[0], TEMP[0]
+MOV OUT[1], IN[1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-dst.sh b/src/gallium/tests/graw/vertex-shader/vert-dst.sh
new file mode 100644 (file)
index 0000000..2d59bd1
--- /dev/null
@@ -0,0 +1,11 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+MOV OUT[0], IN[0]
+DST OUT[1], IN[1], IN[0]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-ex2.sh b/src/gallium/tests/graw/vertex-shader/vert-ex2.sh
new file mode 100644 (file)
index 0000000..e2383a6
--- /dev/null
@@ -0,0 +1,18 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+DCL TEMP[0..1]
+
+IMM FLT32 { 0.3, 0.3, 0.3, 1.0 }
+
+EX2 TEMP[0], IN[0]
+EX2 TEMP[1], IN[1].yyyy
+MUL TEMP[0], TEMP[0], IMM[0]
+MOV OUT[0], IN[0]
+MUL OUT[1], TEMP[0], TEMP[1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-flr.sh b/src/gallium/tests/graw/vertex-shader/vert-flr.sh
new file mode 100644 (file)
index 0000000..fa24806
--- /dev/null
@@ -0,0 +1,23 @@
+VERT
+
+DCL IN[0]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+DCL TEMP[0]
+
+DCL ADDR[0]
+
+IMM FLT32 { 3.0, 1.0, 1.0, 1.0 }
+IMM FLT32 { 1.0, 0.0, 0.0, 1.0 }
+IMM FLT32 { 0.0, 1.0, 0.0, 1.0 }
+IMM FLT32 { 0.0, 0.0, 1.0, 1.0 }
+IMM FLT32 { 1.0, 1.0, 0.0, 1.0 }
+IMM FLT32 { 0.0, 1.0, 1.0, 1.0 }
+
+MOV OUT[0], IN[0]
+MUL TEMP[0], IN[0], IMM[0]
+FLR ADDR[0].x, TEMP[0]
+MOV OUT[1], IMM[ADDR[0].x + 3]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-frc.sh b/src/gallium/tests/graw/vertex-shader/vert-frc.sh
new file mode 100644 (file)
index 0000000..ff09bfa
--- /dev/null
@@ -0,0 +1,15 @@
+VERT
+
+DCL IN[0]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+DCL TEMP[0]
+
+IMM FLT32 { 2.7, 3.1, 4.5, 1.0 }
+
+MUL TEMP[0], IN[0].xyxw, IMM[0]
+MOV OUT[0], IN[0]
+FRC OUT[1], TEMP[0]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-lg2.sh b/src/gallium/tests/graw/vertex-shader/vert-lg2.sh
new file mode 100644 (file)
index 0000000..876b7ab
--- /dev/null
@@ -0,0 +1,18 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+DCL TEMP[0]
+
+IMM FLT32 { 1.0, 0.0, 0.0, 0.0 }
+IMM FLT32 { 0.5, 0.0, 0.0, 0.0 }
+
+ADD TEMP[0], IN[0], IMM[0]
+LG2 TEMP[0].x, TEMP[0].xxxx
+ADD OUT[0], TEMP[0], IMM[1]
+MOV OUT[1], IN[1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-lit.sh b/src/gallium/tests/graw/vertex-shader/vert-lit.sh
new file mode 100644 (file)
index 0000000..a2235ff
--- /dev/null
@@ -0,0 +1,11 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+MOV OUT[0], IN[0]
+LIT OUT[1], IN[1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-lrp.sh b/src/gallium/tests/graw/vertex-shader/vert-lrp.sh
new file mode 100644 (file)
index 0000000..a26ca3b
--- /dev/null
@@ -0,0 +1,14 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+DCL TEMP[0]
+
+ABS TEMP[0], IN[0]
+MOV OUT[0], IN[0]
+LRP OUT[1], TEMP[0], IN[1].xxxx, IN[1].yyyy
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-mad.sh b/src/gallium/tests/graw/vertex-shader/vert-mad.sh
new file mode 100644 (file)
index 0000000..caf83a9
--- /dev/null
@@ -0,0 +1,14 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+IMM FLT32 { 0.5, 1.0, 1.0, 1.0 }
+IMM FLT32 { 0.5, 0.0, 0.0, 0.0 }
+
+MAD OUT[0], IN[0], IMM[0], IMM[1]
+MOV OUT[1], IN[1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-max.sh b/src/gallium/tests/graw/vertex-shader/vert-max.sh
new file mode 100644 (file)
index 0000000..db84a49
--- /dev/null
@@ -0,0 +1,13 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+IMM FLT32 { 0.5, 0.5, 0.5, 0.0 }
+
+MOV OUT[0], IN[0]
+MAX OUT[1], IN[1], IMM[0]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-min.sh b/src/gallium/tests/graw/vertex-shader/vert-min.sh
new file mode 100644 (file)
index 0000000..63a8c2c
--- /dev/null
@@ -0,0 +1,13 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+IMM FLT32 { 0.5, 0.5, 0.5, 0.0 }
+
+MOV OUT[0], IN[0]
+MIN OUT[1], IN[1], IMM[0]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-mov.sh b/src/gallium/tests/graw/vertex-shader/vert-mov.sh
new file mode 100644 (file)
index 0000000..4c23e3e
--- /dev/null
@@ -0,0 +1,11 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+MOV OUT[0], IN[0]
+MOV OUT[1], IN[1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-mul.sh b/src/gallium/tests/graw/vertex-shader/vert-mul.sh
new file mode 100644 (file)
index 0000000..a409cd4
--- /dev/null
@@ -0,0 +1,13 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+IMM FLT32 { 0.6, 0.6, 1.0, 1.0 }
+
+MUL OUT[0], IN[0], IMM[0]
+MOV OUT[1], IN[1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-rcp.sh b/src/gallium/tests/graw/vertex-shader/vert-rcp.sh
new file mode 100644 (file)
index 0000000..d440e35
--- /dev/null
@@ -0,0 +1,18 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+DCL TEMP[0]
+
+IMM FLT32 { 1.0, 0.0, 0.0, 0.0 }
+IMM FLT32 { 1.5, 0.0, 0.0, 0.0 }
+
+ADD TEMP[0], IN[0], IMM[0]
+RCP TEMP[0].x, TEMP[0].xxxx
+SUB OUT[0], TEMP[0], IMM[1]
+MOV OUT[1], IN[1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-rsq.sh b/src/gallium/tests/graw/vertex-shader/vert-rsq.sh
new file mode 100644 (file)
index 0000000..6fbd53a
--- /dev/null
@@ -0,0 +1,18 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+DCL TEMP[0]
+
+IMM FLT32 { 1.0, 0.0, 0.0, 0.0 }
+IMM FLT32 { 1.5, 0.0, 0.0, 0.0 }
+
+ADD TEMP[0], IN[0], IMM[0]
+RSQ TEMP[0].x, TEMP[0].xxxx
+SUB OUT[0], TEMP[0], IMM[1]
+MOV OUT[1], IN[1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-sge.sh b/src/gallium/tests/graw/vertex-shader/vert-sge.sh
new file mode 100644 (file)
index 0000000..e32a21b
--- /dev/null
@@ -0,0 +1,16 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+DCL TEMP[0]
+
+IMM FLT32 { -0.1, -0.1, 1.0, 0.0 }
+
+SGE TEMP[0], IN[0], IMM[0]
+MOV OUT[0], IN[0]
+MUL OUT[1], IN[1], TEMP[0]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-slt.sh b/src/gallium/tests/graw/vertex-shader/vert-slt.sh
new file mode 100644 (file)
index 0000000..2af6106
--- /dev/null
@@ -0,0 +1,16 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+DCL TEMP[0]
+
+IMM FLT32 { 0.6, 0.6, 0.0, 0.0 }
+
+SLT TEMP[0], IN[0], IMM[0]
+MOV OUT[0], IN[0]
+MUL OUT[1], IN[1], TEMP[0]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-srcmod-abs.sh b/src/gallium/tests/graw/vertex-shader/vert-srcmod-abs.sh
new file mode 100644 (file)
index 0000000..e768d95
--- /dev/null
@@ -0,0 +1,15 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+DCL TEMP[0]
+
+IMM FLT32 { 0.1, 0.1, 0.0, 0.0 }
+
+ADD TEMP[0], IN[0], IMM[0]
+MOV OUT[0], |TEMP[0]|
+MOV OUT[1], IN[1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-srcmod-absneg.sh b/src/gallium/tests/graw/vertex-shader/vert-srcmod-absneg.sh
new file mode 100644 (file)
index 0000000..40ca5d6
--- /dev/null
@@ -0,0 +1,16 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+DCL TEMP[0]
+
+IMM FLT32 { -0.2, -0.2, 0.0, 0.0 }
+
+ADD TEMP[0], IN[0], IMM[0]
+MOV OUT[0].xy, -|TEMP[0]|
+MOV OUT[0].zw, IN[0]
+MOV OUT[1], IN[1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-srcmod-neg.sh b/src/gallium/tests/graw/vertex-shader/vert-srcmod-neg.sh
new file mode 100644 (file)
index 0000000..297bc1e
--- /dev/null
@@ -0,0 +1,12 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+MOV OUT[0].xy, -IN[0]
+MOV OUT[0].zw, IN[0]
+MOV OUT[1], IN[1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-srcmod-swz.sh b/src/gallium/tests/graw/vertex-shader/vert-srcmod-swz.sh
new file mode 100644 (file)
index 0000000..528f164
--- /dev/null
@@ -0,0 +1,11 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+MOV OUT[0], IN[0].yxzw
+MOV OUT[1], IN[1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-sub.sh b/src/gallium/tests/graw/vertex-shader/vert-sub.sh
new file mode 100644 (file)
index 0000000..90249ab
--- /dev/null
@@ -0,0 +1,13 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+IMM FLT32 { 0.1, 0.1, 0.0, 0.0 }
+
+SUB OUT[0], IN[0], IMM[0]
+MOV OUT[1], IN[1]
+
+END
diff --git a/src/gallium/tests/graw/vertex-shader/vert-xpd.sh b/src/gallium/tests/graw/vertex-shader/vert-xpd.sh
new file mode 100644 (file)
index 0000000..72b0486
--- /dev/null
@@ -0,0 +1,11 @@
+VERT
+
+DCL IN[0]
+DCL IN[1]
+DCL OUT[0], POSITION
+DCL OUT[1], COLOR
+
+MOV OUT[0], IN[0]
+XPD OUT[1], IN[0], IN[1]
+
+END
diff --git a/src/gallium/tests/python/retrace/interpreter.py b/src/gallium/tests/python/retrace/interpreter.py
deleted file mode 100755 (executable)
index 8437122..0000000
+++ /dev/null
@@ -1,733 +0,0 @@
-#!/usr/bin/env python
-##########################################################################
-# 
-# Copyright 2008 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, 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 TUNGSTEN 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.
-# 
-##########################################################################
-
-
-import sys
-import struct
-
-import gallium
-import model
-import parse as parser
-
-
-try:
-    from struct import unpack_from
-except ImportError:
-    def unpack_from(fmt, buf, offset=0):
-        size = struct.calcsize(fmt)
-        return struct.unpack(fmt, buf[offset:offset + size])
-
-
-def make_image(ctx, surface, x=None, y=None, w=None, h=None):
-    if x is None:
-        x = 0
-    if y is None:
-        y = 0
-    if w is None:
-        w = surface.width - x
-    if h is None:
-        h = surface.height - y
-    data = ctx.surface_read_rgba8(surface, x, y, surface.width, surface.height)
-
-    import Image
-    outimage = Image.fromstring('RGBA', (w, h), data, "raw", 'RGBA', 0, 1)
-    return outimage
-
-def save_image(ctx, filename, surface, x=None, y=None, w=None, h=None):
-    outimage = make_image(ctx, surface, x, y, w, h)
-    outimage.save(filename, "PNG")
-
-def show_image(ctx, surface, title, x=None, y=None, w=None, h=None):
-    outimage = make_image(ctx, surface, x, y, w, h)
-    
-    import Tkinter as tk
-    from PIL import Image, ImageTk
-    root = tk.Tk()
-    
-    root.title(title)
-    
-    image1 = ImageTk.PhotoImage(outimage)
-    w = image1.width()
-    h = image1.height()
-    x = 100
-    y = 100
-    root.geometry("%dx%d+%d+%d" % (w, h, x, y))
-    panel1 = tk.Label(root, image=image1)
-    panel1.pack(side='top', fill='both', expand='yes')
-    panel1.image = image1
-    root.mainloop()
-
-
-class Struct:
-    """C-like struct"""
-
-    # A basic Python class can pass as a C-like structure
-    pass
-
-
-struct_factories = {
-    "pipe_blend_color": gallium.BlendColor,
-    "pipe_blend_state": gallium.Blend,
-    #"pipe_clip_state": gallium.Clip,
-    #"pipe_buffer": gallium.Buffer,
-    "pipe_depth_state": gallium.Depth,
-    "pipe_stencil_state": gallium.Stencil,
-    "pipe_alpha_state": gallium.Alpha,
-    "pipe_depth_stencil_alpha_state": gallium.DepthStencilAlpha,
-    #"pipe_framebuffer_state": gallium.Framebuffer,
-    "pipe_poly_stipple": gallium.PolyStipple,
-    "pipe_rasterizer_state": gallium.Rasterizer,
-    "pipe_sampler_state": gallium.Sampler,
-    "pipe_scissor_state": gallium.Scissor,
-    #"pipe_shader_state": gallium.Shader,
-    #"pipe_vertex_buffer": gallium.VertexBuffer,
-    "pipe_vertex_element": gallium.VertexElement,
-    "pipe_viewport_state": gallium.Viewport,
-    #"pipe_texture": gallium.Texture,
-    'pipe_subresource': gallium.pipe_subresource,
-    'pipe_box': gallium.pipe_box,
-    'pipe_draw_info': gallium.pipe_draw_info,
-}
-
-
-member_array_factories = {
-    #"pipe_rasterizer_state": {"sprite_coord_mode": gallium.ByteArray},                          
-    "pipe_poly_stipple": {"stipple": gallium.UnsignedArray},                          
-    "pipe_viewport_state": {"scale": gallium.FloatArray, "translate": gallium.FloatArray},                          
-    #"pipe_clip_state": {"ucp": gallium.FloatArray},
-    "pipe_depth_stencil_alpha_state": {"stencil": gallium.StencilArray},
-    "pipe_blend_color": {"color": gallium.FloatArray},
-    "pipe_sampler_state": {"border_color": gallium.FloatArray},              
-}
-
-
-class Translator(model.Visitor):
-    """Translate model arguments into regular Python objects"""
-
-    def __init__(self, interpreter):
-        self.interpreter = interpreter
-        self.result = None
-
-    def visit(self, node):
-        self.result = None
-        node.visit(self)
-        return self.result
-        
-    def visit_literal(self, node):
-        self.result = node.value
-    
-    def visit_named_constant(self, node):
-        # lookup the named constant in the gallium module
-        self.result = getattr(gallium, node.name)
-    
-    def visit_array(self, node):
-        array = []
-        for element in node.elements:
-            array.append(self.visit(element))
-        self.result = array
-    
-    def visit_struct(self, node):
-        struct_factory = struct_factories.get(node.name, Struct)
-        struct = struct_factory()
-        for member_name, member_node in node.members:
-            member_value = self.visit(member_node)
-            try:
-                array_factory = member_array_factories[node.name][member_name]
-            except KeyError:
-                pass
-            else:
-                assert isinstance(member_value, list)
-                array = array_factory(len(member_value))
-                for i in range(len(member_value)):
-                    array[i] = member_value[i]
-                member_value = array
-            #print node.name, member_name, member_value
-            assert isinstance(struct, Struct) or hasattr(struct, member_name)
-            setattr(struct, member_name, member_value)
-        self.result = struct
-    
-    def visit_pointer(self, node):
-        self.result = self.interpreter.lookup_object(node.address)
-
-
-class Object:
-    
-    def __init__(self, interpreter, real):
-        self.interpreter = interpreter
-        self.real = real
-        
-
-class Global(Object):
-
-    def __init__(self, interpreter, real):
-        self.interpreter = interpreter
-        self.real = real
-        
-    def pipe_screen_create(self):
-        real = gallium.Device()
-        return Screen(self.interpreter, real)
-    
-    def pipe_context_create(self, screen):
-        context = screen.real.context_create()
-        return Context(self.interpreter, context)
-
-    
-class Transfer:
-
-    def __init__(self, resource, usage, subresource, box):
-        self.resource = resource
-        self.usage = usage
-        self.subresource = subresource
-        self.box = box
-
-
-class Screen(Object):
-    
-    def __init__(self, interpreter, real):
-        Object.__init__(self, interpreter, real)
-        self.context = self.real.context_create()
-
-    def destroy(self):
-        pass
-
-    def get_name(self):
-        pass
-    
-    def get_vendor(self):
-        pass
-    
-    def get_param(self, param):
-        pass
-    
-    def get_paramf(self, param):
-        pass
-    
-    def context_create(self):
-        context = self.real.context_create()
-        return Context(self.interpreter, context)
-    
-    def is_format_supported(self, format, target, sample_count, bind, geom_flags):
-        return self.real.is_format_supported(format, target, sample_count, bind, geom_flags)
-    
-    def resource_create(self, templat):
-        return self.real.resource_create(
-            format = templat.format,
-            width = templat.width,
-            height = templat.height,
-            depth = templat.depth,
-            last_level = templat.last_level,
-            target = templat.target,
-            bind = templat.bind,
-        )
-
-    def texture_destroy(self, texture):
-        self.interpreter.unregister_object(texture)
-
-    def texture_release(self, surface):
-        pass
-
-    def tex_surface_release(self, surface):
-        pass
-
-    def user_buffer_create(self, data, size, usage):
-        bind = usage
-        # We don't really care to distinguish between user and regular buffers
-        buffer = self.real.buffer_create(size, bind)
-        assert size == len(data)
-        self.context.buffer_write(buffer, data)
-        return buffer
-    
-    def buffer_create(self, alignment, usage, size):
-        return self.real.buffer_create(size, alignment, usage)
-    
-    def buffer_destroy(self, buffer):
-        pass
-    
-    def fence_finish(self, fence, flags):
-        pass
-    
-    def fence_reference(self, dst, src):
-        pass
-    
-    def flush_frontbuffer(self, resource):
-        pass
-
-
-class Context(Object):
-    
-    def __init__(self, interpreter, real):
-        Object.__init__(self, interpreter, real)
-        self.cbufs = []
-        self.zsbuf = None
-        self.vbufs = []
-        self.velems = []
-        self.dirty = False
-
-    def destroy(self):
-        pass
-    
-    def create_blend_state(self, state):
-        if isinstance(state, str):
-            state = gallium.Blend(state)
-            sys.stdout.write('\t%s\n' % state)
-        return state
-
-    def bind_blend_state(self, state):
-        if state is not None:
-            self.real.set_blend(state)
-
-    def delete_blend_state(self, state):
-        pass
-    
-    def create_sampler_state(self, state):
-        return state
-
-    def delete_sampler_state(self, state):
-        pass
-
-    def bind_vertex_sampler_states(self, num_states, states):
-        for i in range(num_states):
-            self.real.set_vertex_sampler(i, states[i])
-        
-    def bind_fragment_sampler_states(self, num_states, states):
-        for i in range(num_states):
-            self.real.set_fragment_sampler(i, states[i])
-        
-    def create_rasterizer_state(self, state):
-        return state
-
-    def bind_rasterizer_state(self, state):
-        if state is not None:
-            self.real.set_rasterizer(state)
-        
-    def delete_rasterizer_state(self, state):
-        pass
-    
-    def create_depth_stencil_alpha_state(self, state):
-        return state
-
-    def bind_depth_stencil_alpha_state(self, state):
-        if state is not None:
-            self.real.set_depth_stencil_alpha(state)
-            
-    def delete_depth_stencil_alpha_state(self, state):
-        pass
-
-    def create_fs_state(self, state):
-        tokens = str(state.tokens)
-        shader = gallium.Shader(tokens)
-        return shader
-
-    create_vs_state = create_fs_state
-    
-    def bind_fs_state(self, state):
-        self.real.set_fragment_shader(state)
-        
-    def bind_vs_state(self, state):
-        self.real.set_vertex_shader(state)
-
-    def delete_fs_state(self, state):
-        pass
-
-    delete_vs_state = delete_fs_state
-
-    def set_blend_color(self, state):
-        self.real.set_blend_color(state)
-
-    def set_stencil_ref(self, state):
-        self.real.set_stencil_ref(state)
-
-    def set_clip_state(self, state):
-        _state = gallium.Clip()
-        _state.nr = state.nr
-        if state.nr:
-            # FIXME
-            ucp = gallium.FloatArray(gallium.PIPE_MAX_CLIP_PLANES*4)
-            for i in range(len(state.ucp)):
-                for j in range(len(state.ucp[i])):
-                    ucp[i*4 + j] = state.ucp[i][j]
-            _state.ucp = ucp
-        self.real.set_clip(_state)
-
-    def dump_constant_buffer(self, buffer):
-        if not self.interpreter.verbosity(2):
-            return
-
-        data = self.real.buffer_read(buffer)
-        format = '4f'
-        index = 0
-        for offset in range(0, len(data), struct.calcsize(format)):
-            x, y, z, w = unpack_from(format, data, offset)
-            sys.stdout.write('\tCONST[%2u] = {%10.4f, %10.4f, %10.4f, %10.4f}\n' % (index, x, y, z, w))
-            index += 1
-        sys.stdout.flush()
-
-    def set_constant_buffer(self, shader, index, buffer):
-        if buffer is not None:
-            self.real.set_constant_buffer(shader, index, buffer)
-
-            self.dump_constant_buffer(buffer)
-
-    def set_framebuffer_state(self, state):
-        _state = gallium.Framebuffer()
-        _state.width = state.width
-        _state.height = state.height
-        _state.nr_cbufs = state.nr_cbufs
-        for i in range(len(state.cbufs)):
-            _state.set_cbuf(i, state.cbufs[i])
-        _state.set_zsbuf(state.zsbuf)    
-        self.real.set_framebuffer(_state)
-        
-        self.cbufs = state.cbufs
-        self.zsbuf = state.zsbuf
-
-    def set_polygon_stipple(self, state):
-        self.real.set_polygon_stipple(state)
-
-    def set_scissor_state(self, state):
-        self.real.set_scissor(state)
-
-    def set_viewport_state(self, state):
-        self.real.set_viewport(state)
-
-    def create_sampler_view(self, texture, templ):
-        return self.real.create_sampler_view(texture,
-                       format = templ.format,
-                       first_level = templ.first_level,
-                       last_level = templ.last_level,
-                       swizzle_r = templ.swizzle_r,
-                       swizzle_g = templ.swizzle_r,
-                       swizzle_b = templ.swizzle_g,
-                       swizzle_a = templ.swizzle_a)
-
-    def sampler_view_destroy(self, view):
-        pass
-
-    def set_fragment_sampler_views(self, num, views):
-        for i in range(num):
-            self.real.set_fragment_sampler_view(i, views[i])
-
-    def set_vertex_sampler_views(self, num, views):
-        for i in range(num):
-            self.real.set_vertex_sampler_view(i, views[i])
-
-    def set_vertex_buffers(self, num_buffers, buffers):
-        self.vbufs = buffers[0:num_buffers]
-        for i in range(num_buffers):
-            vbuf = buffers[i]
-            self.real.set_vertex_buffer(
-                i,
-                stride = vbuf.stride,
-                max_index = vbuf.max_index,
-                buffer_offset = vbuf.buffer_offset,
-                buffer = vbuf.buffer,
-            )
-            
-    def create_vertex_elements_state(self, num_elements, elements):
-        return elements[0:num_elements]
-
-    def bind_vertex_elements_state(self, state):
-        if state is None:
-            self.real.set_vertex_elements(0)
-            return
-
-        elements = state
-        num_elements = len(elements)
-        self.velems = elements
-        for i in range(num_elements):
-            self.real.set_vertex_element(i, elements[i])
-        self.real.set_vertex_elements(num_elements)
-
-    def delete_vertex_elements_state(self, state):
-        pass
-
-    def dump_vertices(self, start, count):
-        if not self.interpreter.verbosity(2):
-            return
-
-        for index in range(start, start + count):
-            if index >= start + 16:
-                sys.stdout.write('\t...\n')
-                break
-            sys.stdout.write('\t{\n')
-            for velem in self.velems:
-                vbuf = self.vbufs[velem.vertex_buffer_index]
-
-                offset = vbuf.buffer_offset + velem.src_offset + vbuf.stride*index
-                format = {
-                    gallium.PIPE_FORMAT_R32_FLOAT: 'f',
-                    gallium.PIPE_FORMAT_R32G32_FLOAT: '2f',
-                    gallium.PIPE_FORMAT_R32G32B32_FLOAT: '3f',
-                    gallium.PIPE_FORMAT_R32G32B32A32_FLOAT: '4f',
-                    gallium.PIPE_FORMAT_A8R8G8B8_UNORM: '4B',
-                    gallium.PIPE_FORMAT_R8G8B8A8_UNORM: '4B',
-                    gallium.PIPE_FORMAT_B8G8R8A8_UNORM: '4B',
-                    gallium.PIPE_FORMAT_R16G16B16_SNORM: '3h',
-                }[velem.src_format]
-
-                data = self.real.buffer_read(vbuf.buffer)
-                values = unpack_from(format, data, offset)
-                sys.stdout.write('\t\t{' + ', '.join(map(str, values)) + '},\n')
-            sys.stdout.write('\t},\n')
-        sys.stdout.flush()
-
-    def dump_indices(self, ibuf, isize, ibias, start, count):
-        if not self.interpreter.verbosity(2):
-            return
-
-        format = {
-            1: 'B',
-            2: 'H',
-            4: 'I',
-        }[isize]
-
-        assert struct.calcsize(format) == isize
-
-        data = self.real.buffer_read(ibuf)
-        maxindex, minindex = 0, 0xffffffff
-
-        sys.stdout.write('\t{\n')
-        for i in range(start, start + count):
-            if i >= start + 16 and not self.interpreter.verbosity(3):
-                sys.stdout.write('\t...\n')
-                break
-            offset = i*isize
-            index, = unpack_from(format, data, offset)
-            sys.stdout.write('\t\t%u,\n' % index)
-            minindex = min(minindex, index)
-            maxindex = max(maxindex, index)
-        sys.stdout.write('\t},\n')
-        sys.stdout.flush()
-
-        return minindex + ibias, maxindex + ibias
-
-    def set_index_buffer(self, ib):
-        if ib:
-            self.real.set_index_buffer(ib.index_size, ib.offset, ib.buffer)
-        else:
-            self.real.set_index_buffer(0, 0, None)
-
-    def draw_vbo(self, info):
-        if self.interpreter.verbosity(2):
-            if 0:
-                minindex, maxindex = self.dump_indices(indexBuffer, indexSize, indexBias, start, count)
-
-            self.dump_vertices(info.minindex, info.maxindex + 1 - info.minindex)
-
-        self.real.draw_vbo(info)
-        self._set_dirty()
-
-    def resource_copy_region(self, dst, subdst, dstx, dsty, dstz, src, subsrc, srcx, srcy, srcz, width, height):
-        if dst is not None and src is not None:
-            if self.interpreter.options.all:
-                self.interpreter.present(self.real, src, 'resource_copy_src', srcx, srcy, width, height)
-            self.real.resource_copy_region(dst, subdst, dstx, dsty, dstx, src, subsrc, srcx, srcy, srcz, width, height)
-            flags = 0
-            self.flush(flags)
-            if self.interpreter.options.all:
-                self.interpreter.present(self.real, dst, 'resource_copy_dst', dstx, dsty, width, height)
-
-    def is_resource_referenced(self, texture, face, level):
-        #return self.real.is_resource_referenced(format, texture, face, level)
-        pass
-    
-    def buffer_write(self, buffer, data, size, offset=0):
-        assert size == len(data)
-        self.buffer_write(buffer, data)
-
-    def surface_write(self, surface, data, stride, size):
-        if surface is None:
-            return
-#        assert surface.nblocksy * stride == size 
-        surface.put_tile_raw(0, 0, surface.width, surface.height, data, stride)
-
-    def get_transfer(self, texture, sr, usage, box):
-        if texture is None:
-            return None
-        transfer = Transfer(texture, sr, usage, box)
-        if transfer and usage & gallium.PIPE_TRANSFER_READ:
-            if self.interpreter.options.all:
-                surface = texture.get_surface(sr.face, sr.level, box.z)
-                self.interpreter.present(self.real, transfer.surface, 'transf_read', box.x, box.y, box.width, box.height)
-        return transfer
-    
-    def tex_transfer_destroy(self, transfer):
-        self.interpreter.unregister_object(transfer)
-
-    def transfer_inline_write(self, resource, sr, usage, box, stride, slice_stride, data):
-        self.real.transfer_inline_write(resource, sr, usage, box, data, stride, slice_stride)
-        if self.interpreter.options.all:
-            for z in range(box.z, box.z + box.depth):
-                surface = resource.get_surface(sr.face, sr.level, box.z)
-                self.interpreter.present(self.real, surface, 'transf_inline_write%u' % z, box.x, box.y, box.width, box.height)
-
-    def _set_dirty(self):
-        if self.interpreter.options.step:
-            self._present()
-        else:
-            self.dirty = True
-
-    def flush(self, flags):
-        self.real.flush(flags)
-        if self.dirty:
-            if flags & gallium.PIPE_FLUSH_FRAME:
-                self._present()
-            self.dirty = False
-        return None
-
-    def clear(self, buffers, rgba, depth, stencil):
-        _rgba = gallium.FloatArray(4)
-        for i in range(4):
-            _rgba[i] = rgba[i]
-        self.real.clear(buffers, _rgba, depth, stencil)
-        
-    def clear_render_target(self, dst, rgba, dstx, dsty, width, height):
-        _rgba = gallium.FloatArray(4)
-        for i in range(4):
-            _rgba[i] = rgba[i]
-        self.real.clear_render_target(dst, _rgba, dstx, dsty, width, height)
-
-    def clear_depth_stencil(self, dst, clear_flags, depth, stencil, dstx, dsty, width, height):
-        self.real.clear_depth_stencil(dst, clear_flags, depth, stencil, dstx, dsty, width, height)
-
-    def _present(self):
-        self.real.flush()
-    
-        if self.cbufs and self.cbufs[0]:
-            self.interpreter.present(self.real, self.cbufs[0], "cbuf")
-        if self.zsbuf:
-            if self.interpreter.options.all:
-                self.interpreter.present(self.real, self.zsbuf, "zsbuf")
-    def create_surface(self, texture, level, layer, usage):
-        if texture is None:
-            return None
-        return texture.get_surface(level, layer)
-
-    def surface_destroy(self, surface):
-        self.interpreter.unregister_object(surface)
-
-class Interpreter(parser.TraceDumper):
-    
-    ignore_calls = set((
-            ('pipe_screen', 'is_format_supported'),
-            ('pipe_screen', 'get_param'),
-            ('pipe_screen', 'get_paramf'),
-    ))
-
-    def __init__(self, stream, options):
-        parser.TraceDumper.__init__(self, stream)
-        self.options = options
-        self.objects = {}
-        self.result = None
-        self.globl = Global(self, None)
-        self.call_no = None
-
-    def register_object(self, address, object):
-        self.objects[address] = object
-        
-    def unregister_object(self, object):
-        # FIXME:
-        pass
-
-    def lookup_object(self, address):
-        return self.objects[address]
-    
-    def interpret(self, trace):
-        for call in trace.calls:
-            self.interpret_call(call)
-
-    def handle_call(self, call):
-        if self.options.stop and call.no > self.options.stop:
-            sys.exit(0)
-
-        if (call.klass, call.method) in self.ignore_calls:
-            return
-
-        self.call_no = call.no
-
-        if self.verbosity(1):
-            parser.TraceDumper.handle_call(self, call)
-            sys.stdout.flush()
-        
-        args = [(str(name), self.interpret_arg(arg)) for name, arg in call.args] 
-        
-        if call.klass:
-            name, obj = args[0]
-            args = args[1:]
-        else:
-            obj = self.globl
-            
-        method = getattr(obj, call.method)
-        ret = method(**dict(args))
-        
-        if call.ret and isinstance(call.ret, model.Pointer):
-            if ret is None:
-                sys.stderr.write('warning: NULL returned\n')
-            self.register_object(call.ret.address, ret)
-
-        self.call_no = None
-
-    def interpret_arg(self, node):
-        translator = Translator(self)
-        return translator.visit(node)
-
-    def verbosity(self, level):
-        return self.options.verbosity >= level
-
-    def present(self, ctx, surface, description, x=None, y=None, w=None, h=None):
-        if self.call_no < self.options.start:
-            return
-
-        if self.options.images:
-            filename = '%04u_%s.png' % (self.call_no, description)
-            save_image(ctx, filename, surface, x, y, w, h)
-        else:
-            title = '%u. %s' % (self.call_no, description)
-            show_image(ctx, surface, title, x, y, w, h)
-    
-
-class Main(parser.Main):
-
-    def get_optparser(self):
-        optparser = parser.Main.get_optparser(self)
-        optparser.add_option("-q", "--quiet", action="store_const", const=0, dest="verbosity", help="no messages")
-        optparser.add_option("-v", "--verbose", action="count", dest="verbosity", default=1, help="increase verbosity level")
-        optparser.add_option("-i", "--images", action="store_true", dest="images", default=False, help="save images instead of showing them")
-        optparser.add_option("-a", "--all", action="store_true", dest="all", default=False, help="show depth, stencil, and transfers")
-        optparser.add_option("-s", "--step", action="store_true", dest="step", default=False, help="step trhough every draw")
-        optparser.add_option("-f", "--from", action="store", type="int", dest="start", default=0, help="from call no")
-        optparser.add_option("-t", "--to", action="store", type="int", dest="stop", default=0, help="until call no")
-        return optparser
-
-    def process_arg(self, stream, options):
-        parser = Interpreter(stream, options)
-        parser.parse()
-
-
-if __name__ == '__main__':
-    Main().main()
diff --git a/src/gallium/tests/python/tests/regress/fragment-shader/frag-cb-2d.sh b/src/gallium/tests/python/tests/regress/fragment-shader/frag-cb-2d.sh
deleted file mode 100644 (file)
index bbc3a10..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-FRAG
-
-DCL IN[0], COLOR, LINEAR
-DCL OUT[0], COLOR
-DCL CONST[1][6]
-
-MOV OUT[0], CONST[1][6]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/fragment-shader/frag-face.sh b/src/gallium/tests/python/tests/regress/fragment-shader/frag-face.sh
deleted file mode 100644 (file)
index 5745b6a..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-FRAG
-
-DCL IN[0], COLOR, LINEAR
-DCL IN[1], FACE, CONSTANT
-DCL OUT[0], COLOR
-DCL TEMP[0]
-IMM FLT32 { 0.5, 1.0, 0.0, 0.0 }
-
-MUL TEMP[0], IN[1].xxxx, IMM[0].xxxx
-ADD TEMP[0], TEMP[0], IMM[0].yyyy
-
-MOV OUT[0], TEMP[0]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/fragment-shader/frag-kil.sh b/src/gallium/tests/python/tests/regress/fragment-shader/frag-kil.sh
deleted file mode 100644 (file)
index 583b0ca..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-FRAG
-
-DCL IN[0], COLOR, LINEAR
-DCL OUT[0], COLOR
-
-DCL TEMP[0]
-
-IMM FLT32 { 0.6, 0.6, 0.6, 0.0 }
-IMM FLT32 { 0.01, 0.0, 0.0, 0.0 }
-IMM FLT32 { 1.0, 0.0, 0.0, 0.0 }
-
-SLT TEMP[0], IN[0], IMM[0]
-MUL OUT[0], IN[0], TEMP[0]
-MOV OUT[0].w, IMM[2].xxxx 
-SUB TEMP[0], TEMP[0], IMM[1].xxxy
-KIL TEMP[0]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/fragment-shader/frag-mad-immx.sh b/src/gallium/tests/python/tests/regress/fragment-shader/frag-mad-immx.sh
deleted file mode 100644 (file)
index 6b03491..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-FRAG
-
-DCL IN[0], COLOR, LINEAR
-DCL OUT[0], COLOR
-DCL IMMX[0..1]  {{ 0.5, 0.4, 0.6, 1.0 },
-                 { 0.5, 0.4, 0.6, 0.0 }}
-
-MAD OUT[0], IN[0], IMMX[0], IMMX[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/fragment-shader/frag-tempx.sh b/src/gallium/tests/python/tests/regress/fragment-shader/frag-tempx.sh
deleted file mode 100644 (file)
index 81bcad2..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-FRAG
-
-DCL IN[0], COLOR, LINEAR
-DCL OUT[0], COLOR
-
-DCL TEMPX[0][0..1]
-
-IMM FLT32 { -0.5, -0.4, -0.6, 0.0 }
-
-ADD TEMPX[0][0], IN[0], IMM[0]
-ADD TEMPX[0][1], IN[0], IMM[0]
-ABS OUT[0], TEMPX[0][1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-abs.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-abs.sh
deleted file mode 100644 (file)
index 062a48b..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-DCL TEMP[0]
-
-IMM FLT32 { 0.2, 0.2, 0.0, 0.0 }
-
-ADD TEMP[0], IN[0], IMM[0]
-ABS OUT[0], TEMP[0]
-MOV OUT[1], IN[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-add.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-add.sh
deleted file mode 100644 (file)
index 188931e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-IMM FLT32 { 0.2, -0.1, 0.0, 0.0 }
-
-ADD OUT[0], IN[0], IMM[0]
-MOV OUT[1], IN[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-arl.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-arl.sh
deleted file mode 100644 (file)
index 0039597..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-DCL TEMP[0]
-
-DCL ADDR[0]
-
-IMM FLT32 { 3.0, 1.0, 1.0, 1.0 }
-IMM FLT32 { 1.0, 0.0, 0.0, 1.0 }
-IMM FLT32 { 0.0, 1.0, 0.0, 1.0 }
-IMM FLT32 { 0.0, 0.0, 1.0, 1.0 }
-IMM FLT32 { 1.0, 1.0, 0.0, 1.0 }
-IMM FLT32 { 0.0, 1.0, 1.0, 1.0 }
-
-MOV OUT[0], IN[0]
-MUL TEMP[0], IN[0], IMM[0]
-ARL ADDR[0].x, TEMP[0]
-MOV OUT[1], IMM[ADDR[0].x + 3]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-arr.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-arr.sh
deleted file mode 100644 (file)
index fdde4f9..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-DCL TEMP[0]
-
-DCL ADDR[0]
-
-IMM FLT32 { 3.0, 1.0, 1.0, 1.0 }
-IMM FLT32 { 1.0, 0.0, 0.0, 1.0 }
-IMM FLT32 { 0.0, 1.0, 0.0, 1.0 }
-IMM FLT32 { 0.0, 0.0, 1.0, 1.0 }
-IMM FLT32 { 1.0, 1.0, 0.0, 1.0 }
-IMM FLT32 { 0.0, 1.0, 1.0, 1.0 }
-
-MOV OUT[0], IN[0]
-MUL TEMP[0], IN[0], IMM[0]
-ARR ADDR[0].x, TEMP[0]
-MOV OUT[1], IMM[ADDR[0].x + 3]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-cb-1d.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-cb-1d.sh
deleted file mode 100644 (file)
index e227917..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-DCL CONST[1]
-DCL CONST[3]
-DCL TEMP[0..1]
-
-MOV OUT[0], IN[0]
-ADD TEMP[0], IN[1], CONST[1]
-RCP TEMP[1], CONST[3].xxxx
-MUL OUT[1], TEMP[0], TEMP[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-cb-2d.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-cb-2d.sh
deleted file mode 100644 (file)
index 39768d2..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-DCL CONST[1][1..2]
-
-MOV OUT[0], IN[0]
-MAD OUT[1], IN[1], CONST[1][2], CONST[1][1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-dp3.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-dp3.sh
deleted file mode 100644 (file)
index 357e224..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-DCL TEMP[0]
-
-IMM FLT32 { 0.0, 0.0, 1.0, 1.0 }
-
-DP3 TEMP[0].xy, IN[0], IN[0]
-MOV TEMP[0].zw, IMM[0]
-MUL OUT[0], IN[0], TEMP[0]
-MOV OUT[1], IN[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-dp4.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-dp4.sh
deleted file mode 100644 (file)
index 14f6106..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-DCL TEMP[0]
-
-IMM FLT32 { 0.0, 0.0, 1.0, 1.0 }
-
-DP4 TEMP[0].xy, IN[0], IN[0]
-MOV TEMP[0].zw, IMM[0]
-MUL OUT[0], IN[0], TEMP[0]
-MOV OUT[1], IN[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-dst.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-dst.sh
deleted file mode 100644 (file)
index 2d59bd1..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-MOV OUT[0], IN[0]
-DST OUT[1], IN[1], IN[0]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-ex2.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-ex2.sh
deleted file mode 100644 (file)
index e2383a6..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-DCL TEMP[0..1]
-
-IMM FLT32 { 0.3, 0.3, 0.3, 1.0 }
-
-EX2 TEMP[0], IN[0]
-EX2 TEMP[1], IN[1].yyyy
-MUL TEMP[0], TEMP[0], IMM[0]
-MOV OUT[0], IN[0]
-MUL OUT[1], TEMP[0], TEMP[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-flr.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-flr.sh
deleted file mode 100644 (file)
index fa24806..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-DCL TEMP[0]
-
-DCL ADDR[0]
-
-IMM FLT32 { 3.0, 1.0, 1.0, 1.0 }
-IMM FLT32 { 1.0, 0.0, 0.0, 1.0 }
-IMM FLT32 { 0.0, 1.0, 0.0, 1.0 }
-IMM FLT32 { 0.0, 0.0, 1.0, 1.0 }
-IMM FLT32 { 1.0, 1.0, 0.0, 1.0 }
-IMM FLT32 { 0.0, 1.0, 1.0, 1.0 }
-
-MOV OUT[0], IN[0]
-MUL TEMP[0], IN[0], IMM[0]
-FLR ADDR[0].x, TEMP[0]
-MOV OUT[1], IMM[ADDR[0].x + 3]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-frc.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-frc.sh
deleted file mode 100644 (file)
index ff09bfa..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-DCL TEMP[0]
-
-IMM FLT32 { 2.7, 3.1, 4.5, 1.0 }
-
-MUL TEMP[0], IN[0].xyxw, IMM[0]
-MOV OUT[0], IN[0]
-FRC OUT[1], TEMP[0]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-lg2.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-lg2.sh
deleted file mode 100644 (file)
index 876b7ab..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-DCL TEMP[0]
-
-IMM FLT32 { 1.0, 0.0, 0.0, 0.0 }
-IMM FLT32 { 0.5, 0.0, 0.0, 0.0 }
-
-ADD TEMP[0], IN[0], IMM[0]
-LG2 TEMP[0].x, TEMP[0].xxxx
-ADD OUT[0], TEMP[0], IMM[1]
-MOV OUT[1], IN[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-lit.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-lit.sh
deleted file mode 100644 (file)
index a2235ff..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-MOV OUT[0], IN[0]
-LIT OUT[1], IN[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-lrp.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-lrp.sh
deleted file mode 100644 (file)
index a26ca3b..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-DCL TEMP[0]
-
-ABS TEMP[0], IN[0]
-MOV OUT[0], IN[0]
-LRP OUT[1], TEMP[0], IN[1].xxxx, IN[1].yyyy
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-mad.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-mad.sh
deleted file mode 100644 (file)
index caf83a9..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-IMM FLT32 { 0.5, 1.0, 1.0, 1.0 }
-IMM FLT32 { 0.5, 0.0, 0.0, 0.0 }
-
-MAD OUT[0], IN[0], IMM[0], IMM[1]
-MOV OUT[1], IN[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-max.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-max.sh
deleted file mode 100644 (file)
index db84a49..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-IMM FLT32 { 0.5, 0.5, 0.5, 0.0 }
-
-MOV OUT[0], IN[0]
-MAX OUT[1], IN[1], IMM[0]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-min.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-min.sh
deleted file mode 100644 (file)
index 63a8c2c..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-IMM FLT32 { 0.5, 0.5, 0.5, 0.0 }
-
-MOV OUT[0], IN[0]
-MIN OUT[1], IN[1], IMM[0]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-mov.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-mov.sh
deleted file mode 100644 (file)
index 4c23e3e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-MOV OUT[0], IN[0]
-MOV OUT[1], IN[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-mul.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-mul.sh
deleted file mode 100644 (file)
index a409cd4..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-IMM FLT32 { 0.6, 0.6, 1.0, 1.0 }
-
-MUL OUT[0], IN[0], IMM[0]
-MOV OUT[1], IN[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-rcp.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-rcp.sh
deleted file mode 100644 (file)
index d440e35..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-DCL TEMP[0]
-
-IMM FLT32 { 1.0, 0.0, 0.0, 0.0 }
-IMM FLT32 { 1.5, 0.0, 0.0, 0.0 }
-
-ADD TEMP[0], IN[0], IMM[0]
-RCP TEMP[0].x, TEMP[0].xxxx
-SUB OUT[0], TEMP[0], IMM[1]
-MOV OUT[1], IN[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-rsq.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-rsq.sh
deleted file mode 100644 (file)
index 6fbd53a..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-DCL TEMP[0]
-
-IMM FLT32 { 1.0, 0.0, 0.0, 0.0 }
-IMM FLT32 { 1.5, 0.0, 0.0, 0.0 }
-
-ADD TEMP[0], IN[0], IMM[0]
-RSQ TEMP[0].x, TEMP[0].xxxx
-SUB OUT[0], TEMP[0], IMM[1]
-MOV OUT[1], IN[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-sge.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-sge.sh
deleted file mode 100644 (file)
index e32a21b..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-DCL TEMP[0]
-
-IMM FLT32 { -0.1, -0.1, 1.0, 0.0 }
-
-SGE TEMP[0], IN[0], IMM[0]
-MOV OUT[0], IN[0]
-MUL OUT[1], IN[1], TEMP[0]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-slt.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-slt.sh
deleted file mode 100644 (file)
index 2af6106..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-DCL TEMP[0]
-
-IMM FLT32 { 0.6, 0.6, 0.0, 0.0 }
-
-SLT TEMP[0], IN[0], IMM[0]
-MOV OUT[0], IN[0]
-MUL OUT[1], IN[1], TEMP[0]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-srcmod-abs.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-srcmod-abs.sh
deleted file mode 100644 (file)
index e768d95..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-DCL TEMP[0]
-
-IMM FLT32 { 0.1, 0.1, 0.0, 0.0 }
-
-ADD TEMP[0], IN[0], IMM[0]
-MOV OUT[0], |TEMP[0]|
-MOV OUT[1], IN[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-srcmod-absneg.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-srcmod-absneg.sh
deleted file mode 100644 (file)
index 40ca5d6..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-DCL TEMP[0]
-
-IMM FLT32 { -0.2, -0.2, 0.0, 0.0 }
-
-ADD TEMP[0], IN[0], IMM[0]
-MOV OUT[0].xy, -|TEMP[0]|
-MOV OUT[0].zw, IN[0]
-MOV OUT[1], IN[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-srcmod-neg.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-srcmod-neg.sh
deleted file mode 100644 (file)
index 297bc1e..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-MOV OUT[0].xy, -IN[0]
-MOV OUT[0].zw, IN[0]
-MOV OUT[1], IN[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-srcmod-swz.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-srcmod-swz.sh
deleted file mode 100644 (file)
index 528f164..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-MOV OUT[0], IN[0].yxzw
-MOV OUT[1], IN[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-sub.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-sub.sh
deleted file mode 100644 (file)
index 90249ab..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-IMM FLT32 { 0.1, 0.1, 0.0, 0.0 }
-
-SUB OUT[0], IN[0], IMM[0]
-MOV OUT[1], IN[1]
-
-END
diff --git a/src/gallium/tests/python/tests/regress/vertex-shader/vert-xpd.sh b/src/gallium/tests/python/tests/regress/vertex-shader/vert-xpd.sh
deleted file mode 100644 (file)
index 72b0486..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-VERT
-
-DCL IN[0]
-DCL IN[1]
-DCL OUT[0], POSITION
-DCL OUT[1], COLOR
-
-MOV OUT[0], IN[0]
-XPD OUT[1], IN[0], IN[1]
-
-END
diff --git a/src/gallium/tests/python/tests/surface_copy.py b/src/gallium/tests/python/tests/surface_copy.py
deleted file mode 100755 (executable)
index 7a6ede3..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-#!/usr/bin/env python
-##########################################################################
-# 
-# Copyright 2009 VMware, 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 VMWARE 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 os
-import random
-
-from gallium import *
-from base import *
-
-
-def lods(*dims):
-    size = max(dims)
-    lods = 0
-    while size:
-        lods += 1
-        size >>= 1
-    return lods
-
-
-class TextureTest(TestCase):
-    
-    tags = (
-        'target',
-        'format',
-        'width',
-        'height',
-        'depth',
-        'last_level',
-        'face',
-        'level',
-        'zslice',
-    )
-
-    def test(self):
-        dev = self.dev
-        ctx = self.ctx
-        
-        target = self.target
-        format = self.format
-        width = self.width
-        height = self.height
-        depth = self.depth
-        last_level = self.last_level
-        face = self.face
-        level = self.level
-        zslice = self.zslice
-
-        bind = PIPE_BIND_SAMPLER_VIEW
-        geom_flags = 0
-        sample_count = 0
-        if not dev.is_format_supported(format, target, sample_count, bind, geom_flags):
-            raise TestSkip
-
-        if not dev.is_format_supported(format, target, sample_count, bind, geom_flags):
-            raise TestSkip
-
-        #  textures
-        dst_texture = dev.resource_create(
-            target = target,
-            format = format, 
-            width = width, 
-            height = height,
-            depth = depth, 
-            last_level = last_level,
-            bind = bind,
-        )
-
-        dst_surface = dst_texture.get_surface(face = face, level = level, zslice = zslice)
-        
-        src_texture = dev.resource_create(
-            target = target,
-            format = format, 
-            width = dst_surface.width, 
-            height = dst_surface.height,
-            depth = 1, 
-            last_level = 0,
-            bind = PIPE_BIND_SAMPLER_VIEW,
-        )
-
-        src_surface = src_texture.get_surface()
-        
-        w = dst_surface.width
-        h = dst_surface.height
-
-        stride = util_format_get_stride(format, w)
-        size = util_format_get_nblocksy(format, h) * stride
-        src_raw = os.urandom(size)
-
-        ctx.surface_write_raw(src_surface, 0, 0, w, h, src_raw, stride)
-
-        ctx.surface_copy(dst_surface, 0, 0, 
-                         src_surface, 0, 0, w, h)
-    
-        dst_raw = ctx.surface_read_raw(dst_surface, 0, 0, w, h)
-
-        if dst_raw != src_raw:
-            raise TestFailure
-
-
-def main():
-    dev = Device()
-    ctx = dev.context_create()
-    suite = TestSuite()
-    
-    targets = [
-        PIPE_TEXTURE_2D,
-        PIPE_TEXTURE_CUBE,
-        PIPE_TEXTURE_3D,
-    ]
-    
-    sizes = [64, 32, 16, 8, 4, 2, 1]
-    #sizes = [1020, 508, 252, 62, 30, 14, 6, 3]
-    #sizes = [64]
-    #sizes = [63]
-    
-    faces = [
-        PIPE_TEX_FACE_POS_X,
-        PIPE_TEX_FACE_NEG_X,
-        PIPE_TEX_FACE_POS_Y,
-        PIPE_TEX_FACE_NEG_Y, 
-        PIPE_TEX_FACE_POS_Z, 
-        PIPE_TEX_FACE_NEG_Z,
-    ]
-
-    try:
-        n = int(sys.argv[1])
-    except:
-        n = 10000
-    
-    for i in range(n):
-        format = random.choice(formats.keys())
-        if not util_format_is_depth_or_stencil(format):
-            is_depth_or_stencil = util_format_is_depth_or_stencil(format)
-
-            if is_depth_or_stencil:
-                target = PIPE_TEXTURE_2D
-            else:
-                target = random.choice(targets)
-            
-            size = random.choice(sizes)
-
-            if target == PIPE_TEXTURE_3D:
-                depth = size
-            else:
-                depth = 1
-
-            if target == PIPE_TEXTURE_CUBE:
-                face = random.choice(faces)
-            else:
-                face = PIPE_TEX_FACE_POS_X
-
-            levels = lods(size)
-            last_level = random.randint(0, levels - 1)
-            level = random.randint(0, last_level)
-            zslice = random.randint(0, max(depth >> level, 1) - 1)
-
-            test = TextureTest(
-                dev = dev,
-                ctx = ctx,
-                target = target,
-                format = format, 
-                width = size,
-                height = size,
-                depth = depth,
-                last_level = last_level,
-                face = face,
-                level = level,
-                zslice = zslice,
-            )
-            suite.add_test(test)
-    suite.run()
-
-
-if __name__ == '__main__':
-    main()
diff --git a/src/gallium/tests/python/tests/texture_blit.py b/src/gallium/tests/python/tests/texture_blit.py
deleted file mode 100755 (executable)
index 089d05c..0000000
+++ /dev/null
@@ -1,638 +0,0 @@
-#!/usr/bin/env python
-##########################################################################
-# 
-# Copyright 2009 VMware, Inc.
-# Copyright 2008 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, 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 VMWARE 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 random
-
-from gallium import *
-from base import *
-
-
-def lods(*dims):
-    size = max(dims)
-    lods = 0
-    while size:
-        lods += 1
-        size >>= 1
-    return lods
-
-
-def minify(dims, level = 1):
-    return [max(dim>>level, 1) for dim in dims]
-
-
-def tex_coords(texture, face, level, zslice):
-    st = [ 
-        [0.0, 0.0], 
-        [1.0, 0.0], 
-        [1.0, 1.0], 
-        [0.0, 1.0],
-    ] 
-    
-    if texture.target == PIPE_TEXTURE_2D or texture.target == PIPE_TEXTURE_RECT:
-        return [[s, t, 0.0] for s, t in st]
-    elif texture.target == PIPE_TEXTURE_3D:
-        depth = texture.get_depth(level)
-        if depth > 1:
-            r = float(zslice)/float(depth - 1)
-        else:
-            r = 0.0
-        return [[s, t, r] for s, t in st]
-    elif texture.target == PIPE_TEXTURE_CUBE:
-        result = []
-        for s, t in st:
-            # See http://developer.nvidia.com/object/cube_map_ogl_tutorial.html
-            sc = 2.0*s - 1.0
-            tc = 2.0*t - 1.0
-            if face == PIPE_TEX_FACE_POS_X:
-                rx = 1.0
-                ry = -tc
-                rz = -sc
-            if face == PIPE_TEX_FACE_NEG_X:
-                rx = -1.0
-                ry = -tc
-                rz = sc
-            if face == PIPE_TEX_FACE_POS_Y:
-                rx = sc
-                ry = 1.0
-                rz = tc
-            if face == PIPE_TEX_FACE_NEG_Y:
-                rx = sc
-                ry = -1.0
-                rz = -tc
-            if face == PIPE_TEX_FACE_POS_Z:
-                rx = sc
-                ry = -tc
-                rz = 1.0
-            if face == PIPE_TEX_FACE_NEG_Z:
-                rx = -sc
-                ry = -tc
-                rz = -1.0
-            result.append([rx, ry, rz])
-        return result
-
-def is_pot(n):
-    return n & (n - 1) == 0
-      
-                
-class TextureColorSampleTest(TestCase):
-    
-    tags = (
-        'target',
-        'format',
-        'width',
-        'height',
-        'depth',
-        'last_level',
-        'face',
-        'level',
-        'zslice',
-    )
-
-    def test(self):
-        dev = self.dev
-        ctx = self.ctx
-        
-        target = self.target
-        format = self.format
-        width = self.width
-        height = self.height
-        depth = self.depth
-        last_level = self.last_level
-        face = self.face
-        level = self.level
-        zslice = self.zslice
-        minz = 0.0
-        maxz = 1.0
-
-        bind = PIPE_BIND_SAMPLER_VIEW
-        geom_flags = 0
-        sample_count = 0
-        if width != height:
-            geom_flags |= PIPE_TEXTURE_GEOM_NON_SQUARE
-        if not is_pot(width) or not is_pot(height) or not is_pot(depth):
-            geom_flags |= PIPE_TEXTURE_GEOM_NON_POWER_OF_TWO
-
-        if not dev.is_format_supported(format, target, sample_count, bind, geom_flags):
-            raise TestSkip
-
-        # disabled blending/masking
-        blend = Blend()
-        blend.rt[0].rgb_src_factor = PIPE_BLENDFACTOR_ONE
-        blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ONE
-        blend.rt[0].rgb_dst_factor = PIPE_BLENDFACTOR_ZERO
-        blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ZERO
-        blend.rt[0].colormask = PIPE_MASK_RGBA
-        ctx.set_blend(blend)
-    
-        # no-op depth/stencil/alpha
-        depth_stencil_alpha = DepthStencilAlpha()
-        ctx.set_depth_stencil_alpha(depth_stencil_alpha)
-    
-        # rasterizer
-        rasterizer = Rasterizer()
-        rasterizer.front_winding = PIPE_WINDING_CW
-        rasterizer.cull_mode = PIPE_WINDING_NONE
-        ctx.set_rasterizer(rasterizer)
-    
-        # samplers
-        sampler = Sampler()
-        sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE
-        sampler.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE
-        sampler.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE
-        sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NEAREST
-        sampler.min_img_filter = PIPE_TEX_MIPFILTER_NEAREST
-        sampler.mag_img_filter = PIPE_TEX_MIPFILTER_NEAREST
-        sampler.normalized_coords = 1
-        sampler.min_lod = 0
-        sampler.max_lod = PIPE_MAX_TEXTURE_LEVELS - 1
-        ctx.set_fragment_sampler(0, sampler)
-    
-        #  texture 
-        texture = dev.resource_create(
-            target = target,
-            format = format, 
-            width = width, 
-            height = height,
-            depth = depth, 
-            last_level = last_level,
-            bind = bind,
-        )
-        
-        expected_rgba = FloatArray(height*width*4) 
-        surface = texture.get_surface(
-            face = face,
-            level = level,
-            zslice = zslice,
-        )
-        
-        ctx.surface_sample_rgba(surface, expected_rgba, True)
-        
-        ctx.set_fragment_sampler_texture(0, texture)
-
-        # viewport
-        viewport = Viewport()
-        scale = FloatArray(4)
-        scale[0] = width
-        scale[1] = height
-        scale[2] = (maxz - minz) / 2.0
-        scale[3] = 1.0
-        viewport.scale = scale
-        translate = FloatArray(4)
-        translate[0] = 0.0
-        translate[1] = 0.0
-        translate[2] = (maxz - minz) / 2.0
-        translate[3] = 0.0
-        viewport.translate = translate
-        ctx.set_viewport(viewport)
-
-        # scissor
-        scissor = Scissor()
-        scissor.minx = 0
-        scissor.miny = 0
-        scissor.maxx = width
-        scissor.maxy = height
-        ctx.set_scissor(scissor)
-
-        # clip
-        clip = Clip()
-        clip.nr = 0
-        ctx.set_clip(clip)
-
-        #  framebuffer 
-        cbuf_tex = dev.resource_create(
-            PIPE_FORMAT_B8G8R8A8_UNORM, 
-            width, 
-            height,
-            bind = PIPE_BIND_RENDER_TARGET,
-        )
-
-        cbuf = cbuf_tex.get_surface()
-        fb = Framebuffer()
-        fb.width = width
-        fb.height = height
-        fb.nr_cbufs = 1
-        fb.set_cbuf(0, cbuf)
-        ctx.set_framebuffer(fb)
-        rgba = FloatArray(4);
-        rgba[0] = 0.5
-        rgba[1] = 0.5
-        rgba[2] = 0.5
-        rgba[3] = 0.5
-        ctx.clear(PIPE_CLEAR_COLOR, rgba, 0.0, 0)
-        del fb
-    
-        # vertex shader
-        vs = Shader('''
-            VERT
-            DCL IN[0], POSITION, CONSTANT
-            DCL IN[1], GENERIC, CONSTANT
-            DCL OUT[0], POSITION, CONSTANT
-            DCL OUT[1], GENERIC, CONSTANT
-            0:MOV OUT[0], IN[0]
-            1:MOV OUT[1], IN[1]
-            2:END
-        ''')
-        #vs.dump()
-        ctx.set_vertex_shader(vs)
-    
-        # fragment shader
-        op = {
-            PIPE_TEXTURE_1D: "1D", 
-            PIPE_TEXTURE_2D: "2D", 
-            PIPE_TEXTURE_3D: "3D", 
-            PIPE_TEXTURE_CUBE: "CUBE",
-        }[target]
-        fs = Shader('''
-            FRAG
-            DCL IN[0], GENERIC[0], LINEAR
-            DCL OUT[0], COLOR, CONSTANT
-            DCL SAMP[0], CONSTANT
-            0:TEX OUT[0], IN[0], SAMP[0], %s
-            1:END
-        ''' % op)
-        #fs.dump()
-        ctx.set_fragment_shader(fs)
-
-        nverts = 4
-        nattrs = 2
-        verts = FloatArray(nverts * nattrs * 4)
-    
-        x = 0
-        y = 0
-        w, h = minify((width, height), level)
-    
-        pos = [
-            [x, y],
-            [x+w, y],
-            [x+w, y+h],
-            [x, y+h],
-        ]
-    
-        tex = tex_coords(texture, face, level, zslice)
-    
-        for i in range(0, 4):
-            j = 8*i
-            verts[j + 0] = pos[i][0]/float(width) # x
-            verts[j + 1] = pos[i][1]/float(height) # y
-            verts[j + 2] = 0.0 # z
-            verts[j + 3] = 1.0 # w
-            verts[j + 4] = tex[i][0] # s
-            verts[j + 5] = tex[i][1] # r
-            verts[j + 6] = tex[i][2] # q
-            verts[j + 7] = 1.0
-    
-        ctx.draw_vertices(PIPE_PRIM_TRIANGLE_FAN,
-                          nverts, 
-                          nattrs, 
-                          verts)
-    
-        ctx.flush()
-    
-        cbuf = cbuf_tex.get_surface()
-        
-        self.assert_rgba(ctx, cbuf, x, y, w, h, expected_rgba, 4.0/256, 0.85)
-        
-
-class TextureDepthSampleTest(TestCase):
-    
-    tags = (
-        'target',
-        'format',
-        'width',
-        'height',
-        'depth',
-        'last_level',
-        'face',
-        'level',
-        'zslice',
-    )
-
-    def test(self):
-        dev = self.dev
-        ctx = self.ctx
-        
-        target = self.target
-        format = self.format
-        width = self.width
-        height = self.height
-        depth = self.depth
-        last_level = self.last_level
-        face = self.face
-        level = self.level
-        zslice = self.zslice
-        minz = 0.0
-        maxz = 1.0
-
-        bind = PIPE_BIND_SAMPLER_VIEW
-        geom_flags = 0
-        sample_count = 0
-        if width != height:
-            geom_flags |= PIPE_TEXTURE_GEOM_NON_SQUARE
-        if not is_pot(width) or not is_pot(height) or not is_pot(depth):
-            geom_flags |= PIPE_TEXTURE_GEOM_NON_POWER_OF_TWO
-
-        if not dev.is_format_supported(format, target, sample_count, bind, geom_flags):
-            raise TestSkip
-
-        # disabled blending/masking
-        blend = Blend()
-        blend.rt[0].rgb_src_factor = PIPE_BLENDFACTOR_ONE
-        blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ONE
-        blend.rt[0].rgb_dst_factor = PIPE_BLENDFACTOR_ZERO
-        blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ZERO
-        blend.rt[0].colormask = PIPE_MASK_RGBA
-        ctx.set_blend(blend)
-    
-        # depth/stencil/alpha
-        depth_stencil_alpha = DepthStencilAlpha()
-        depth_stencil_alpha.depth.enabled = 1
-        depth_stencil_alpha.depth.writemask = 1
-        depth_stencil_alpha.depth.func = PIPE_FUNC_LESS
-        ctx.set_depth_stencil_alpha(depth_stencil_alpha)
-    
-        # rasterizer
-        rasterizer = Rasterizer()
-        rasterizer.front_winding = PIPE_WINDING_CW
-        rasterizer.cull_mode = PIPE_WINDING_NONE
-        ctx.set_rasterizer(rasterizer)
-    
-        # viewport
-        viewport = Viewport()
-        scale = FloatArray(4)
-        scale[0] = width
-        scale[1] = height
-        scale[2] = (maxz - minz) / 2.0
-        scale[3] = 1.0
-        viewport.scale = scale
-        translate = FloatArray(4)
-        translate[0] = 0.0
-        translate[1] = 0.0
-        translate[2] = (maxz - minz) / 2.0
-        translate[3] = 0.0
-        viewport.translate = translate
-        ctx.set_viewport(viewport)
-
-        # samplers
-        sampler = Sampler()
-        sampler.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE
-        sampler.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE
-        sampler.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE
-        sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NEAREST
-        sampler.min_img_filter = PIPE_TEX_MIPFILTER_NEAREST
-        sampler.mag_img_filter = PIPE_TEX_MIPFILTER_NEAREST
-        sampler.normalized_coords = 1
-        sampler.min_lod = 0
-        sampler.max_lod = PIPE_MAX_TEXTURE_LEVELS - 1
-        ctx.set_fragment_sampler(0, sampler)
-    
-        #  texture 
-        texture = dev.resource_create(
-            target = target,
-            format = format, 
-            width = width, 
-            height = height,
-            depth = depth, 
-            last_level = last_level,
-            bind = bind,
-        )
-        
-        expected_rgba = FloatArray(height*width*4) 
-        surface = texture.get_surface(
-            face = face,
-            level = level,
-            zslice = zslice,
-        )
-
-        ctx.surface_sample_rgba(surface, expected_rgba, True)
-        
-        ctx.set_fragment_sampler_texture(0, texture)
-
-        # scissor
-        scissor = Scissor()
-        scissor.minx = 0
-        scissor.miny = 0
-        scissor.maxx = width
-        scissor.maxy = height
-        ctx.set_scissor(scissor)
-
-        # clip
-        clip = Clip()
-        clip.nr = 0
-        ctx.set_clip(clip)
-
-        #  framebuffer 
-        cbuf_tex = dev.resource_create(
-            PIPE_FORMAT_B8G8R8A8_UNORM, 
-            width, 
-            height,
-            bind = PIPE_BIND_RENDER_TARGET,
-        )
-
-        zsbuf_tex = dev.resource_create(
-            PIPE_FORMAT_X8Z24_UNORM, 
-            width, 
-            height,
-            bind = PIPE_BIND_RENDER_TARGET,
-        )
-
-        cbuf = cbuf_tex.get_surface()
-        zsbuf = zsbuf_tex.get_surface()
-        fb = Framebuffer()
-        fb.width = width
-        fb.height = height
-        fb.nr_cbufs = 1
-        fb.set_cbuf(0, cbuf)
-        fb.set_zsbuf(zsbuf)
-        ctx.set_framebuffer(fb)
-        rgba = FloatArray(4);
-        rgba[0] = 0.5
-        rgba[1] = 0.5
-        rgba[2] = 0.5
-        rgba[3] = 0.5
-        ctx.clear(PIPE_CLEAR_DEPTHSTENCIL, rgba, 1.0, 0)
-        del fb
-    
-        # vertex shader
-        vs = Shader('''
-            VERT
-            DCL IN[0], POSITION, CONSTANT
-            DCL IN[1], GENERIC, CONSTANT
-            DCL OUT[0], POSITION, CONSTANT
-            DCL OUT[1], GENERIC, CONSTANT
-            0:MOV OUT[0], IN[0]
-            1:MOV OUT[1], IN[1]
-            2:END
-        ''')
-        #vs.dump()
-        ctx.set_vertex_shader(vs)
-    
-        # fragment shader
-        op = {
-            PIPE_TEXTURE_1D: "1D", 
-            PIPE_TEXTURE_2D: "2D", 
-            PIPE_TEXTURE_3D: "3D", 
-            PIPE_TEXTURE_CUBE: "CUBE",
-        }[target]
-        fs = Shader('''
-            FRAG
-            DCL IN[0], GENERIC[0], LINEAR
-            DCL SAMP[0], CONSTANT
-            DCL OUT[0].z, POSITION
-            0:TEX OUT[0].z, IN[0], SAMP[0], %s
-            1:END
-        ''' % op)
-        #fs.dump()
-        ctx.set_fragment_shader(fs)
-
-        nverts = 4
-        nattrs = 2
-        verts = FloatArray(nverts * nattrs * 4)
-    
-        x = 0
-        y = 0
-        w, h = minify((width, height), level)
-    
-        pos = [
-            [x, y],
-            [x+w, y],
-            [x+w, y+h],
-            [x, y+h],
-        ]
-    
-        tex = tex_coords(texture, face, level, zslice)
-    
-        for i in range(0, 4):
-            j = 8*i
-            verts[j + 0] = pos[i][0]/float(width) # x
-            verts[j + 1] = pos[i][1]/float(height) # y
-            verts[j + 2] = 0.0 # z
-            verts[j + 3] = 1.0 # w
-            verts[j + 4] = tex[i][0] # s
-            verts[j + 5] = tex[i][1] # r
-            verts[j + 6] = tex[i][2] # q
-            verts[j + 7] = 1.0
-    
-        ctx.draw_vertices(PIPE_PRIM_TRIANGLE_FAN,
-                          nverts, 
-                          nattrs, 
-                          verts)
-    
-        ctx.flush()
-    
-        zsbuf = zsbuf_tex.get_surface()
-        
-        self.assert_rgba(ctx, zsbuf, x, y, w, h, expected_rgba, 4.0/256, 0.85)
-        
-
-
-
-def main():
-    random.seed(0xdead3eef)
-
-    dev = Device()
-    ctx = dev.context_create()
-    suite = TestSuite()
-    
-    targets = [
-        PIPE_TEXTURE_2D,
-        PIPE_TEXTURE_CUBE,
-        PIPE_TEXTURE_3D,
-    ]
-    
-    #sizes = [64, 32, 16, 8, 4, 2, 1]
-    #sizes = [1020, 508, 252, 62, 30, 14, 6, 3]
-    sizes = [64]
-    #sizes = [63]
-    
-    faces = [
-        PIPE_TEX_FACE_POS_X,
-        PIPE_TEX_FACE_NEG_X,
-        PIPE_TEX_FACE_POS_Y,
-        PIPE_TEX_FACE_NEG_Y, 
-        PIPE_TEX_FACE_POS_Z, 
-        PIPE_TEX_FACE_NEG_Z,
-    ]
-
-    try:
-        n = int(sys.argv[1])
-    except:
-        n = 10000
-    
-    for i in range(n):
-        format = random.choice(formats.keys())
-        if not util_format_is_depth_or_stencil(format):
-            is_depth_or_stencil = util_format_is_depth_or_stencil(format)
-
-            if is_depth_or_stencil:
-                target = PIPE_TEXTURE_2D
-            else:
-                target = random.choice(targets)
-            
-            size = random.choice(sizes)
-
-            if target == PIPE_TEXTURE_3D:
-                depth = size
-            else:
-                depth = 1
-
-            if target == PIPE_TEXTURE_CUBE:
-                face = random.choice(faces)
-            else:
-                face = PIPE_TEX_FACE_POS_X
-
-            levels = lods(size)
-            last_level = random.randint(0, levels - 1)
-            level = random.randint(0, last_level)
-            zslice = random.randint(0, max(depth >> level, 1) - 1)
-
-            if is_depth_or_stencil:
-                klass = TextureDepthSampleTest
-            else:
-                klass = TextureColorSampleTest
-
-            test = klass(
-                dev = dev,
-                ctx = ctx,
-                target = target,
-                format = format, 
-                width = size,
-                height = size,
-                depth = depth,
-                last_level = last_level,
-                face = face,
-                level = level,
-                zslice = zslice,
-            )
-            suite.add_test(test)
-    suite.run()
-
-
-if __name__ == '__main__':
-    main()
diff --git a/src/gallium/tests/python/tests/texture_transfer.py b/src/gallium/tests/python/tests/texture_transfer.py
deleted file mode 100755 (executable)
index 65c919b..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-#!/usr/bin/env python
-##########################################################################
-# 
-# Copyright 2009 VMware, Inc.
-# Copyright 2008 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, 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 VMWARE 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 os
-import random
-
-from gallium import *
-from base import *
-
-
-def lods(*dims):
-    size = max(dims)
-    lods = 0
-    while size:
-        lods += 1
-        size >>= 1
-    return lods
-
-
-class TextureTest(TestCase):
-    
-    tags = (
-        'target',
-        'format',
-        'width',
-        'height',
-        'depth',
-        'last_level',
-        'face',
-        'level',
-        'zslice',
-    )
-
-    def test(self):
-        dev = self.dev
-        ctx = self.ctx
-        
-        target = self.target
-        format = self.format
-        width = self.width
-        height = self.height
-        depth = self.depth
-        last_level = self.last_level
-        face = self.face
-        level = self.level
-        zslice = self.zslice
-
-        bind = PIPE_BIND_SAMPLER_VIEW
-        geom_flags = 0
-        sample_count = 0
-        if not dev.is_format_supported(format, target, sample_count, bind, geom_flags):
-            raise TestSkip
-
-        #  textures
-        texture = dev.resource_create(
-            target = target,
-            format = format, 
-            width = width, 
-            height = height,
-            depth = depth, 
-            last_level = last_level,
-            bind = bind,
-        )
-        
-        surface = texture.get_surface(face, level, zslice)
-        
-        stride = util_format_get_stride(format, surface.width)
-        size = util_format_get_nblocksy(format, surface.height) * stride
-
-        in_raw = os.urandom(size)
-
-        ctx.surface_write_raw(surface, 0, 0, surface.width, surface.height, in_raw, stride)
-
-        out_raw = ctx.surface_read_raw(surface, 0, 0, surface.width, surface.height)
-
-        if in_raw != out_raw:
-            raise TestFailure
-
-
-def main():
-    dev = Device()
-    ctx = dev.context_create()
-    suite = TestSuite()
-    
-    targets = [
-        PIPE_TEXTURE_2D,
-        PIPE_TEXTURE_CUBE,
-        PIPE_TEXTURE_3D,
-    ]
-    
-    sizes = [64, 32, 16, 8, 4, 2, 1]
-    #sizes = [1020, 508, 252, 62, 30, 14, 6, 3]
-    #sizes = [64]
-    #sizes = [63]
-    
-    faces = [
-        PIPE_TEX_FACE_POS_X,
-        PIPE_TEX_FACE_NEG_X,
-        PIPE_TEX_FACE_POS_Y,
-        PIPE_TEX_FACE_NEG_Y, 
-        PIPE_TEX_FACE_POS_Z, 
-        PIPE_TEX_FACE_NEG_Z,
-    ]
-
-    try:
-        n = int(sys.argv[1])
-    except:
-        n = 10000
-    
-    for i in range(n):
-        format = random.choice(formats.keys())
-        if not util_format_is_depth_or_stencil(format):
-            is_depth_or_stencil = util_format_is_depth_or_stencil(format)
-
-            if is_depth_or_stencil:
-                target = PIPE_TEXTURE_2D
-            else:
-                target = random.choice(targets)
-            
-            size = random.choice(sizes)
-
-            if target == PIPE_TEXTURE_3D:
-                depth = size
-            else:
-                depth = 1
-
-            if target == PIPE_TEXTURE_CUBE:
-                face = random.choice(faces)
-            else:
-                face = PIPE_TEX_FACE_POS_X
-
-            levels = lods(size)
-            last_level = random.randint(0, levels - 1)
-            level = random.randint(0, last_level)
-            zslice = random.randint(0, max(depth >> level, 1) - 1)
-
-            test = TextureTest(
-                dev = dev,
-                ctx = ctx,
-                target = target,
-                format = format, 
-                width = size,
-                height = size,
-                depth = depth,
-                last_level = last_level,
-                face = face,
-                level = level,
-                zslice = zslice,
-            )
-            suite.add_test(test)
-    suite.run()
-
-
-if __name__ == '__main__':
-    main()
index 49f28c036910baf351c64bc8c57a2a32c9300d51..edc1e80a412052982e8d932c3559299b882c112f 100644 (file)
@@ -19,13 +19,13 @@ progs = [
     'translate_test'
 ]
 
-for prog in progs:
+for progname in progs:
     prog = env.Program(
-        target = prog,
-        source = prog + '.c',
+        target = progname,
+        source = progname + '.c',
     )
     
-    env.InstallProgram(prog)
+    env.Alias(progname, env.InstallProgram(prog))
 
     # http://www.scons.org/wiki/UnitTests
     test_alias = env.Alias('unit', [prog], prog[0].abspath)
index d0946a91a264fc387ecdac7a5f981badfdfe2bca..2976fb792273efb3aa0690a60b2b2ca1089efb0d 100644 (file)
@@ -57,6 +57,7 @@ int main(int argc, char** argv)
    unsigned char* byte_buffer;
    float* float_buffer;
    double* double_buffer;
+   unsigned * elts;
    unsigned count = 4;
    unsigned i, j, k;
    unsigned passed = 0;
@@ -137,6 +138,8 @@ int main(int argc, char** argv)
    float_buffer = align_malloc(buffer_size, 4096);
    double_buffer = align_malloc(buffer_size, 4096);
 
+   elts = align_malloc(count * sizeof *elts, 4096);
+
    key.nr_elements = 1;
    key.element[0].input_buffer = 0;
    key.element[0].input_offset = 0;
@@ -156,6 +159,9 @@ int main(int argc, char** argv)
    for (i = 0; i < buffer_size / sizeof(double); ++i)
       double_buffer[i] = rand_double();
 
+   for (i = 0; i < count; ++i)
+      elts[i] = i;
+
    for (output_format = 1; output_format < PIPE_FORMAT_COUNT; ++output_format)
    {
       const struct util_format_description* output_format_desc = util_format_description(output_format);
@@ -245,14 +251,14 @@ int main(int argc, char** argv)
          else
             buffer[0] = byte_buffer;
 
-         translate[0]->set_buffer(translate[0], 0, buffer[0], input_format_size, ~0);
-         translate[0]->run(translate[0], 0, count, 0, buffer[1]);
-         translate[1]->set_buffer(translate[1], 0, buffer[1], output_format_size, ~0);
-         translate[1]->run(translate[1], 0, count, 0, buffer[2]);
-         translate[0]->set_buffer(translate[0], 0, buffer[2], input_format_size, ~0);
-         translate[0]->run(translate[0], 0, count, 0, buffer[3]);
-         translate[1]->set_buffer(translate[1], 0, buffer[3], output_format_size, ~0);
-         translate[1]->run(translate[1], 0, count, 0, buffer[4]);
+         translate[0]->set_buffer(translate[0], 0, buffer[0], input_format_size, count - 1);
+         translate[0]->run_elts(translate[0], elts, count, 0, buffer[1]);
+         translate[1]->set_buffer(translate[1], 0, buffer[1], output_format_size, count - 1);
+         translate[1]->run_elts(translate[1], elts, count, 0, buffer[2]);
+         translate[0]->set_buffer(translate[0], 0, buffer[2], input_format_size, count - 1);
+         translate[0]->run_elts(translate[0], elts, count, 0, buffer[3]);
+         translate[1]->set_buffer(translate[1], 0, buffer[3], output_format_size, count - 1);
+         translate[1]->run_elts(translate[1], elts, count, 0, buffer[4]);
 
          for (i = 0; i < count; ++i)
          {
diff --git a/src/gallium/tools/trace/dump.py b/src/gallium/tools/trace/dump.py
new file mode 100755 (executable)
index 0000000..bd47c9a
--- /dev/null
@@ -0,0 +1,34 @@
+#!/usr/bin/env python
+##########################################################################
+# 
+# Copyright 2008 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, 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 TUNGSTEN 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.
+# 
+##########################################################################
+
+
+from parse import *
+
+
+if __name__ == '__main__':
+    Main().main()
diff --git a/src/gallium/tools/trace/format.py b/src/gallium/tools/trace/format.py
new file mode 100755 (executable)
index 0000000..a4285bf
--- /dev/null
@@ -0,0 +1,173 @@
+#!/usr/bin/env python
+##########################################################################
+#
+# Copyright 2008 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, 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 TUNGSTEN 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.
+#
+##########################################################################
+
+
+import sys
+
+
+class Formatter:
+    '''Plain formatter'''
+
+    def __init__(self, stream):
+        self.stream = stream
+
+    def text(self, text):
+        self.stream.write(text)
+
+    def newline(self):
+        self.text('\n')
+
+    def function(self, name):
+        self.text(name)
+
+    def variable(self, name):
+        self.text(name)
+
+    def literal(self, value):
+        self.text(str(value))
+
+    def address(self, addr):
+        self.text(str(addr))
+
+
+class AnsiFormatter(Formatter):
+    '''Formatter for plain-text files which outputs ANSI escape codes. See
+    http://en.wikipedia.org/wiki/ANSI_escape_code for more information
+    concerning ANSI escape codes.
+    '''
+
+    _csi = '\33['
+
+    _normal = '0m'
+    _bold = '1m'
+    _italic = '3m'
+    _red = '31m'
+    _green = '32m'
+    _blue = '34m'
+
+    def _escape(self, code):
+        self.text(self._csi + code)
+
+    def function(self, name):
+        self._escape(self._bold)
+        Formatter.function(self, name)
+        self._escape(self._normal)
+
+    def variable(self, name):
+        self._escape(self._italic)
+        Formatter.variable(self, name)
+        self._escape(self._normal)
+
+    def literal(self, value):
+        self._escape(self._blue)
+        Formatter.literal(self, value)
+        self._escape(self._normal)
+
+    def address(self, value):
+        self._escape(self._green)
+        Formatter.address(self, value)
+        self._escape(self._normal)
+
+
+class WindowsConsoleFormatter(Formatter):
+    '''Formatter for the Windows Console. See 
+    http://code.activestate.com/recipes/496901/ for more information.
+    '''
+
+    STD_INPUT_HANDLE  = -10
+    STD_OUTPUT_HANDLE = -11
+    STD_ERROR_HANDLE  = -12
+
+    FOREGROUND_BLUE      = 0x01
+    FOREGROUND_GREEN     = 0x02
+    FOREGROUND_RED       = 0x04
+    FOREGROUND_INTENSITY = 0x08
+    BACKGROUND_BLUE      = 0x10
+    BACKGROUND_GREEN     = 0x20
+    BACKGROUND_RED       = 0x40
+    BACKGROUND_INTENSITY = 0x80
+
+    _normal = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED
+    _bold = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY
+    _italic = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED
+    _red = FOREGROUND_RED | FOREGROUND_INTENSITY
+    _green = FOREGROUND_GREEN | FOREGROUND_INTENSITY
+    _blue = FOREGROUND_BLUE | FOREGROUND_INTENSITY
+
+    def __init__(self, stream):
+        Formatter.__init__(self, stream)
+
+        if stream is sys.stdin:
+            nStdHandle = self.STD_INPUT_HANDLE
+        elif stream is sys.stdout:
+            nStdHandle = self.STD_OUTPUT_HANDLE
+        elif stream is sys.stderr:
+            nStdHandle = self.STD_ERROR_HANDLE
+        else:
+            nStdHandle = None
+
+        if nStdHandle:
+            import ctypes
+            self.handle = ctypes.windll.kernel32.GetStdHandle(nStdHandle)
+        else:
+            self.handle = None
+
+    def _attribute(self, attr):
+        if self.handle:
+            import ctypes
+            ctypes.windll.kernel32.SetConsoleTextAttribute(self.handle, attr)
+
+    def function(self, name):
+        self._attribute(self._bold)
+        Formatter.function(self, name)
+        self._attribute(self._normal)
+
+    def variable(self, name):
+        self._attribute(self._italic)
+        Formatter.variable(self, name)
+        self._attribute(self._normal)
+
+    def literal(self, value):
+        self._attribute(self._blue)
+        Formatter.literal(self, value)
+        self._attribute(self._normal)
+
+    def address(self, value):
+        self._attribute(self._green)
+        Formatter.address(self, value)
+        self._attribute(self._normal)
+
+
+def DefaultFormatter(stream):
+    if sys.platform in ('linux2', 'cygwin'):
+        return AnsiFormatter(stream)
+    elif sys.platform in ('win32',):
+        return WindowsConsoleFormatter(stream)
+    else:
+        return Formatter(stream)
+
diff --git a/src/gallium/tools/trace/model.py b/src/gallium/tools/trace/model.py
new file mode 100755 (executable)
index 0000000..e76aad7
--- /dev/null
@@ -0,0 +1,214 @@
+#!/usr/bin/env python
+##########################################################################
+# 
+# Copyright 2008 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, 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 TUNGSTEN 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.
+# 
+##########################################################################
+
+
+'''Trace data model.'''
+
+
+import sys
+import string
+import format
+
+try:
+    from cStringIO import StringIO
+except ImportError:
+    from StringIO import StringIO
+
+
+class Node:
+    
+    def visit(self, visitor):
+        raise NotImplementedError
+
+    def __str__(self):
+        stream = StringIO()
+        formatter = format.DefaultFormatter(stream)
+        pretty_printer = PrettyPrinter(formatter)
+        self.visit(pretty_printer)
+        return stream.getvalue()
+
+
+class Literal(Node):
+    
+    def __init__(self, value):
+        self.value = value
+
+    def visit(self, visitor):
+        visitor.visit_literal(self)
+
+
+class NamedConstant(Node):
+    
+    def __init__(self, name):
+        self.name = name
+
+    def visit(self, visitor):
+        visitor.visit_named_constant(self)
+    
+
+class Array(Node):
+    
+    def __init__(self, elements):
+        self.elements = elements
+
+    def visit(self, visitor):
+        visitor.visit_array(self)
+
+
+class Struct(Node):
+    
+    def __init__(self, name, members):
+        self.name = name
+        self.members = members        
+
+    def visit(self, visitor):
+        visitor.visit_struct(self)
+
+        
+class Pointer(Node):
+    
+    def __init__(self, address):
+        self.address = address
+
+    def visit(self, visitor):
+        visitor.visit_pointer(self)
+
+
+class Call:
+    
+    def __init__(self, no, klass, method, args, ret):
+        self.no = no
+        self.klass = klass
+        self.method = method
+        self.args = args
+        self.ret = ret
+        
+    def visit(self, visitor):
+        visitor.visit_call(self)
+
+
+class Trace:
+    
+    def __init__(self, calls):
+        self.calls = calls
+        
+    def visit(self, visitor):
+        visitor.visit_trace(self)
+    
+    
+class Visitor:
+    
+    def visit_literal(self, node):
+        raise NotImplementedError
+    
+    def visit_named_constant(self, node):
+        raise NotImplementedError
+    
+    def visit_array(self, node):
+        raise NotImplementedError
+    
+    def visit_struct(self, node):
+        raise NotImplementedError
+    
+    def visit_pointer(self, node):
+        raise NotImplementedError
+    
+    def visit_call(self, node):
+        raise NotImplementedError
+    
+    def visit_trace(self, node):
+        raise NotImplementedError
+
+
+class PrettyPrinter:
+
+    def __init__(self, formatter):
+        self.formatter = formatter
+    
+    def visit_literal(self, node):
+        if isinstance(node.value, basestring):
+            if len(node.value) >= 4096 or node.value.strip(string.printable):
+                self.formatter.address('blob(%u)' % len(node.value))
+                #self.formatter.text('...')
+                return
+
+            self.formatter.literal('"' + node.value + '"')
+            return
+
+        self.formatter.literal(repr(node.value))
+    
+    def visit_named_constant(self, node):
+        self.formatter.literal(node.name)
+    
+    def visit_array(self, node):
+        self.formatter.text('{')
+        sep = ''
+        for value in node.elements:
+            self.formatter.text(sep)
+            value.visit(self) 
+            sep = ', '
+        self.formatter.text('}')
+    
+    def visit_struct(self, node):
+        self.formatter.text('{')
+        sep = ''
+        for name, value in node.members:
+            self.formatter.text(sep)
+            self.formatter.variable(name)
+            self.formatter.text(' = ')
+            value.visit(self) 
+            sep = ', '
+        self.formatter.text('}')
+    
+    def visit_pointer(self, node):
+        self.formatter.address(node.address)
+    
+    def visit_call(self, node):
+        self.formatter.text('%s ' % node.no)
+        if node.klass is not None:
+            self.formatter.function(node.klass + '::' + node.method)
+        else:
+            self.formatter.function(node.method)
+        self.formatter.text('(')
+        sep = ''
+        for name, value in node.args:
+            self.formatter.text(sep)
+            self.formatter.variable(name)
+            self.formatter.text(' = ')
+            value.visit(self) 
+            sep = ', '
+        self.formatter.text(')')
+        if node.ret is not None:
+            self.formatter.text(' = ')
+            node.ret.visit(self)
+    
+    def visit_trace(self, node):
+        for call in node.calls:
+            call.visit(self)
+            self.formatter.newline()
+
diff --git a/src/gallium/tools/trace/parse.py b/src/gallium/tools/trace/parse.py
new file mode 100755 (executable)
index 0000000..b08d368
--- /dev/null
@@ -0,0 +1,392 @@
+#!/usr/bin/env python
+##########################################################################
+# 
+# Copyright 2008 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, 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 TUNGSTEN 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.
+# 
+##########################################################################
+
+
+import sys
+import xml.parsers.expat
+import binascii
+import optparse
+
+from model import *
+
+
+ELEMENT_START, ELEMENT_END, CHARACTER_DATA, EOF = range(4)
+
+
+class XmlToken:
+
+    def __init__(self, type, name_or_data, attrs = None, line = None, column = None):
+        assert type in (ELEMENT_START, ELEMENT_END, CHARACTER_DATA, EOF)
+        self.type = type
+        self.name_or_data = name_or_data
+        self.attrs = attrs
+        self.line = line
+        self.column = column
+
+    def __str__(self):
+        if self.type == ELEMENT_START:
+            return '<' + self.name_or_data + ' ...>'
+        if self.type == ELEMENT_END:
+            return '</' + self.name_or_data + '>'
+        if self.type == CHARACTER_DATA:
+            return self.name_or_data
+        if self.type == EOF:
+            return 'end of file'
+        assert 0
+
+
+class XmlTokenizer:
+    """Expat based XML tokenizer."""
+
+    def __init__(self, fp, skip_ws = True):
+        self.fp = fp
+        self.tokens = []
+        self.index = 0
+        self.final = False
+        self.skip_ws = skip_ws
+        
+        self.character_pos = 0, 0
+        self.character_data = ''
+        
+        self.parser = xml.parsers.expat.ParserCreate()
+        self.parser.StartElementHandler  = self.handle_element_start
+        self.parser.EndElementHandler    = self.handle_element_end
+        self.parser.CharacterDataHandler = self.handle_character_data
+    
+    def handle_element_start(self, name, attributes):
+        self.finish_character_data()
+        line, column = self.pos()
+        token = XmlToken(ELEMENT_START, name, attributes, line, column)
+        self.tokens.append(token)
+    
+    def handle_element_end(self, name):
+        self.finish_character_data()
+        line, column = self.pos()
+        token = XmlToken(ELEMENT_END, name, None, line, column)
+        self.tokens.append(token)
+
+    def handle_character_data(self, data):
+        if not self.character_data:
+            self.character_pos = self.pos()
+        self.character_data += data
+    
+    def finish_character_data(self):
+        if self.character_data:
+            if not self.skip_ws or not self.character_data.isspace(): 
+                line, column = self.character_pos
+                token = XmlToken(CHARACTER_DATA, self.character_data, None, line, column)
+                self.tokens.append(token)
+            self.character_data = ''
+    
+    def next(self):
+        size = 16*1024
+        while self.index >= len(self.tokens) and not self.final:
+            self.tokens = []
+            self.index = 0
+            data = self.fp.read(size)
+            self.final = len(data) < size
+            data = data.rstrip('\0')
+            try:
+                self.parser.Parse(data, self.final)
+            except xml.parsers.expat.ExpatError, e:
+                #if e.code == xml.parsers.expat.errors.XML_ERROR_NO_ELEMENTS:
+                if e.code == 3:
+                    pass
+                else:
+                    raise e
+        if self.index >= len(self.tokens):
+            line, column = self.pos()
+            token = XmlToken(EOF, None, None, line, column)
+        else:
+            token = self.tokens[self.index]
+            self.index += 1
+        return token
+
+    def pos(self):
+        return self.parser.CurrentLineNumber, self.parser.CurrentColumnNumber
+
+
+class TokenMismatch(Exception):
+
+    def __init__(self, expected, found):
+        self.expected = expected
+        self.found = found
+
+    def __str__(self):
+        return '%u:%u: %s expected, %s found' % (self.found.line, self.found.column, str(self.expected), str(self.found))
+
+
+
+class XmlParser:
+    """Base XML document parser."""
+
+    def __init__(self, fp):
+        self.tokenizer = XmlTokenizer(fp)
+        self.consume()
+    
+    def consume(self):
+        self.token = self.tokenizer.next()
+
+    def match_element_start(self, name):
+        return self.token.type == ELEMENT_START and self.token.name_or_data == name
+    
+    def match_element_end(self, name):
+        return self.token.type == ELEMENT_END and self.token.name_or_data == name
+
+    def element_start(self, name):
+        while self.token.type == CHARACTER_DATA:
+            self.consume()
+        if self.token.type != ELEMENT_START:
+            raise TokenMismatch(XmlToken(ELEMENT_START, name), self.token)
+        if self.token.name_or_data != name:
+            raise TokenMismatch(XmlToken(ELEMENT_START, name), self.token)
+        attrs = self.token.attrs
+        self.consume()
+        return attrs
+    
+    def element_end(self, name):
+        while self.token.type == CHARACTER_DATA:
+            self.consume()
+        if self.token.type != ELEMENT_END:
+            raise TokenMismatch(XmlToken(ELEMENT_END, name), self.token)
+        if self.token.name_or_data != name:
+            raise TokenMismatch(XmlToken(ELEMENT_END, name), self.token)
+        self.consume()
+
+    def character_data(self, strip = True):
+        data = ''
+        while self.token.type == CHARACTER_DATA:
+            data += self.token.name_or_data
+            self.consume()
+        if strip:
+            data = data.strip()
+        return data
+
+
+class TraceParser(XmlParser):
+
+    def __init__(self, fp):
+        XmlParser.__init__(self, fp)
+        self.last_call_no = 0
+    
+    def parse(self):
+        self.element_start('trace')
+        while self.token.type not in (ELEMENT_END, EOF):
+            call = self.parse_call()
+            self.handle_call(call)
+        if self.token.type != EOF:
+            self.element_end('trace')
+
+    def parse_call(self):
+        attrs = self.element_start('call')
+        try:
+            no = int(attrs['no'])
+        except KeyError:
+            self.last_call_no += 1
+            no = self.last_call_no
+        else:
+            self.last_call_no = no
+        klass = attrs['class']
+        method = attrs['method']
+        args = []
+        ret = None
+        while self.token.type == ELEMENT_START:
+            if self.token.name_or_data == 'arg':
+                arg = self.parse_arg()
+                args.append(arg)
+            elif self.token.name_or_data == 'ret':
+                ret = self.parse_ret()
+            elif self.token.name_or_data == 'call':
+                # ignore nested function calls
+                self.parse_call()
+            else:
+                raise TokenMismatch("<arg ...> or <ret ...>", self.token)
+        self.element_end('call')
+        
+        return Call(no, klass, method, args, ret)
+
+    def parse_arg(self):
+        attrs = self.element_start('arg')
+        name = attrs['name']
+        value = self.parse_value()
+        self.element_end('arg')
+
+        return name, value
+
+    def parse_ret(self):
+        attrs = self.element_start('ret')
+        value = self.parse_value()
+        self.element_end('ret')
+
+        return value
+
+    def parse_value(self):
+        expected_tokens = ('null', 'bool', 'int', 'uint', 'float', 'string', 'enum', 'array', 'struct', 'ptr', 'bytes')
+        if self.token.type == ELEMENT_START:
+            if self.token.name_or_data in expected_tokens:
+                method = getattr(self, 'parse_' +  self.token.name_or_data)
+                return method()
+        raise TokenMismatch(" or " .join(expected_tokens), self.token)
+
+    def parse_null(self):
+        self.element_start('null')
+        self.element_end('null')
+        return Literal(None)
+        
+    def parse_bool(self):
+        self.element_start('bool')
+        value = int(self.character_data())
+        self.element_end('bool')
+        return Literal(value)
+        
+    def parse_int(self):
+        self.element_start('int')
+        value = int(self.character_data())
+        self.element_end('int')
+        return Literal(value)
+        
+    def parse_uint(self):
+        self.element_start('uint')
+        value = int(self.character_data())
+        self.element_end('uint')
+        return Literal(value)
+        
+    def parse_float(self):
+        self.element_start('float')
+        value = float(self.character_data())
+        self.element_end('float')
+        return Literal(value)
+        
+    def parse_enum(self):
+        self.element_start('enum')
+        name = self.character_data()
+        self.element_end('enum')
+        return NamedConstant(name)
+        
+    def parse_string(self):
+        self.element_start('string')
+        value = self.character_data()
+        self.element_end('string')
+        return Literal(value)
+        
+    def parse_bytes(self):
+        self.element_start('bytes')
+        value = binascii.a2b_hex(self.character_data())
+        self.element_end('bytes')
+        return Literal(value)
+        
+    def parse_array(self):
+        self.element_start('array')
+        elems = []
+        while self.token.type != ELEMENT_END:
+            elems.append(self.parse_elem())
+        self.element_end('array')
+        return Array(elems)
+
+    def parse_elem(self):
+        self.element_start('elem')
+        value = self.parse_value()
+        self.element_end('elem')
+        return value
+
+    def parse_struct(self):
+        attrs = self.element_start('struct')
+        name = attrs['name']
+        members = []
+        while self.token.type != ELEMENT_END:
+            members.append(self.parse_member())
+        self.element_end('struct')
+        return Struct(name, members)
+
+    def parse_member(self):
+        attrs = self.element_start('member')
+        name = attrs['name']
+        value = self.parse_value()
+        self.element_end('member')
+
+        return name, value
+
+    def parse_ptr(self):
+        self.element_start('ptr')
+        address = self.character_data()
+        self.element_end('ptr')
+
+        return Pointer(address)
+
+    def handle_call(self, call):
+        pass
+    
+    
+class TraceDumper(TraceParser):
+    
+    def __init__(self, fp):
+        TraceParser.__init__(self, fp)
+        self.formatter = format.DefaultFormatter(sys.stdout)
+        self.pretty_printer = PrettyPrinter(self.formatter)
+
+    def handle_call(self, call):
+        call.visit(self.pretty_printer)
+        self.formatter.newline()
+        
+
+class Main:
+    '''Common main class for all retrace command line utilities.''' 
+
+    def __init__(self):
+        pass
+
+    def main(self):
+        optparser = self.get_optparser()
+        (options, args) = optparser.parse_args(sys.argv[1:])
+    
+        if args:
+            for arg in args:
+                if arg.endswith('.gz'):
+                    from gzip import GzipFile
+                    stream = GzipFile(arg, 'rt')
+                elif arg.endswith('.bz2'):
+                    from bz2 import BZ2File
+                    stream = BZ2File(arg, 'rU')
+                else:
+                    stream = open(arg, 'rt')
+                self.process_arg(stream, options)
+        else:
+            self.process_arg(stream, options)
+
+    def get_optparser(self):
+        optparser = optparse.OptionParser(
+            usage="\n\t%prog [options] [traces] ...")
+        return optparser
+
+    def process_arg(self, stream, options):
+        parser = TraceDumper(stream)
+        parser.parse()
+
+
+if __name__ == '__main__':
+    Main().main()
index 2c3b508d0567fe6b813e2f61362b8bb80224f54b..6c8a10d800f68bc94cb17e10a5f2ed09c2a8dde6 100644 (file)
@@ -1,4 +1,7 @@
 #include <stdio.h>
+#include <sys/ioctl.h>
+
+#include "i915_drm.h"
 
 #include "state_tracker/drm_driver.h"
 
 
 
 static void
-i915_drm_get_device_id(unsigned int *device_id)
+i915_drm_get_device_id(int fd, unsigned int *device_id)
 {
-   char path[512];
-   FILE *file;
-   void *shutup_gcc;
-
-   /*
-    * FIXME: Fix this up to use a drm ioctl or whatever.
-    */
-
-   snprintf(path, sizeof(path), "/sys/class/drm/card0/device/device");
-   file = fopen(path, "r");
-   if (!file) {
-      return;
-   }
-
-   shutup_gcc = fgets(path, sizeof(path), file);
-   (void) shutup_gcc;
-   sscanf(path, "%x", device_id);
-   fclose(file);
+   int ret;
+   struct drm_i915_getparam gp;
+
+   gp.param = I915_PARAM_CHIPSET_ID;
+   gp.value = (int *)device_id;
+
+   ret = ioctl(fd, DRM_IOCTL_I915_GETPARAM, &gp, sizeof(gp));
+   assert(ret == 0);
 }
 
 static void
@@ -55,7 +48,7 @@ i915_drm_winsys_create(int drmFD)
    if (!idws)
       return NULL;
 
-   i915_drm_get_device_id(&deviceID);
+   i915_drm_get_device_id(drmFD, &deviceID);
 
    i915_drm_winsys_init_batchbuffer_functions(idws);
    i915_drm_winsys_init_buffer_functions(idws);
index 66398afa6984417b57dcabaf5558ae48efd446a1..0a5b1a09336dccbc3bc1ed2a4b52226c7d052c11 100644 (file)
@@ -69,29 +69,29 @@ static const struct r600_reg evergreen_context_reg_list[] = {
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02800C_DB_RENDER_OVERRIDE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028010_DB_RENDER_OVERRIDE2, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028014_DB_HTILE_DATA_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028014_DB_HTILE_DATA_BASE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028028_DB_STENCIL_CLEAR, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02802C_DB_DEPTH_CLEAR, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028030_PA_SC_SCREEN_SCISSOR_TL, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028034_PA_SC_SCREEN_SCISSOR_BR, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028040_DB_Z_INFO, 1, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028040_DB_Z_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028044_DB_STENCIL_INFO, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028048_DB_Z_READ_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028048_DB_Z_READ_BASE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02804C_DB_STENCIL_READ_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02804C_DB_STENCIL_READ_BASE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028050_DB_Z_WRITE_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028050_DB_Z_WRITE_BASE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028054_DB_STENCIL_WRITE_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028054_DB_STENCIL_WRITE_BASE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028058_DB_DEPTH_SIZE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02805C_DB_DEPTH_SLICE, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028140_ALU_CONST_BUFFER_SIZE_PS_0, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028180_ALU_CONST_BUFFER_SIZE_VS_0, 0, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028140_ALU_CONST_BUFFER_SIZE_PS_0, REG_FLAG_DIRTY_ALWAYS, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028180_ALU_CONST_BUFFER_SIZE_VS_0, REG_FLAG_DIRTY_ALWAYS, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028200_PA_SC_WINDOW_OFFSET, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028204_PA_SC_WINDOW_SCISSOR_TL, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028208_PA_SC_WINDOW_SCISSOR_BR, 0, 0, 0},
@@ -258,14 +258,14 @@ static const struct r600_reg evergreen_context_reg_list[] = {
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02881C_PA_CL_VS_OUT_CNTL, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028820_PA_CL_NANINF_CNTL, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028838_SQ_DYN_GPR_RESOURCE_LIMIT_1, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028840_SQ_PGM_START_PS, 1, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028840_SQ_PGM_START_PS, REG_FLAG_NEED_BO, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028844_SQ_PGM_RESOURCES_PS, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028848_SQ_PGM_RESOURCES_2_PS, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02884C_SQ_PGM_EXPORTS_PS, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02885C_SQ_PGM_START_VS, 1, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_02885C_SQ_PGM_START_VS, REG_FLAG_NEED_BO, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028860_SQ_PGM_RESOURCES_VS, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028864_SQ_PGM_RESOURCES_2_VS, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0288A4_SQ_PGM_START_FS, 1, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0288A4_SQ_PGM_START_FS, REG_FLAG_NEED_BO, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0288A8_SQ_PGM_RESOURCES_FS, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_0288EC_SQ_LDS_ALLOC_PS, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028900_SQ_ESGS_RING_ITEMSIZE, 0, 0, 0},
@@ -278,8 +278,8 @@ static const struct r600_reg evergreen_context_reg_list[] = {
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028920_SQ_GS_VERT_ITEMSIZE_1, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028924_SQ_GS_VERT_ITEMSIZE_2, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028928_SQ_GS_VERT_ITEMSIZE_3, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028940_ALU_CONST_CACHE_PS_0, 1, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028980_ALU_CONST_CACHE_VS_0, 1, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028940_ALU_CONST_CACHE_PS_0, REG_FLAG_NEED_BO, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028980_ALU_CONST_CACHE_VS_0, REG_FLAG_NEED_BO, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A00_PA_SU_POINT_SIZE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A04_PA_SU_POINT_MINMAX, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028A08_PA_SU_LINE_CNTL, 0, 0, 0},
@@ -324,100 +324,100 @@ static const struct r600_reg evergreen_context_reg_list[] = {
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C1C_PA_SC_AA_SAMPLE_LOCS_MCTX, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C3C_PA_SC_AA_MASK, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C60_CB_COLOR0_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C60_CB_COLOR0_BASE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C64_CB_COLOR0_PITCH, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C68_CB_COLOR0_SLICE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C6C_CB_COLOR0_VIEW, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C70_CB_COLOR0_INFO, 1, 0, 0xFFFFFFFF},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C74_CB_COLOR0_ATTRIB, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C70_CB_COLOR0_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C74_CB_COLOR0_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C78_CB_COLOR0_DIM, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C9C_CB_COLOR1_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028C9C_CB_COLOR1_BASE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CA0_CB_COLOR1_PITCH, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CA4_CB_COLOR1_SLICE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CA8_CB_COLOR1_VIEW, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CAC_CB_COLOR1_INFO, 1, 0, 0xFFFFFFFF},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CB0_CB_COLOR1_ATTRIB, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CAC_CB_COLOR1_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CB0_CB_COLOR1_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CB4_CB_COLOR1_DIM, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CD8_CB_COLOR2_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CD8_CB_COLOR2_BASE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CDC_CB_COLOR2_PITCH, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CE0_CB_COLOR2_SLICE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CE4_CB_COLOR2_VIEW, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CE8_CB_COLOR2_INFO, 1, 0, 0xFFFFFFFF},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CEC_CB_COLOR2_ATTRIB, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CE8_CB_COLOR2_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CEC_CB_COLOR2_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028CF0_CB_COLOR2_DIM, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D14_CB_COLOR3_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D14_CB_COLOR3_BASE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D18_CB_COLOR3_PITCH, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D1C_CB_COLOR3_SLICE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D20_CB_COLOR3_VIEW, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D24_CB_COLOR3_INFO, 1, 0, 0xFFFFFFFF},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D28_CB_COLOR3_ATTRIB, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D24_CB_COLOR3_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D28_CB_COLOR3_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D2C_CB_COLOR3_DIM, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D50_CB_COLOR4_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D50_CB_COLOR4_BASE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D54_CB_COLOR4_PITCH, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D58_CB_COLOR4_SLICE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D5C_CB_COLOR4_VIEW, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D60_CB_COLOR4_INFO, 1, 0, 0xFFFFFFFF},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D64_CB_COLOR4_ATTRIB, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D60_CB_COLOR4_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D64_CB_COLOR4_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D68_CB_COLOR4_DIM, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D8C_CB_COLOR5_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D8C_CB_COLOR5_BASE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D90_CB_COLOR5_PITCH, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D94_CB_COLOR5_SLICE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D98_CB_COLOR5_VIEW, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D9C_CB_COLOR5_INFO, 1, 0, 0xFFFFFFFF},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DA0_CB_COLOR5_ATTRIB, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028D9C_CB_COLOR5_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DA0_CB_COLOR5_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DA4_CB_COLOR5_DIM, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DC8_CB_COLOR6_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DC8_CB_COLOR6_BASE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DCC_CB_COLOR6_PITCH, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DD0_CB_COLOR6_SLICE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DD4_CB_COLOR6_VIEW, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DD8_CB_COLOR6_INFO, 1, 0, 0xFFFFFFFF},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DDC_CB_COLOR6_ATTRIB, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DD8_CB_COLOR6_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DDC_CB_COLOR6_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028DE0_CB_COLOR6_DIM, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E04_CB_COLOR7_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E04_CB_COLOR7_BASE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E08_CB_COLOR7_PITCH, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E0C_CB_COLOR7_SLICE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E10_CB_COLOR7_VIEW, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E14_CB_COLOR7_INFO, 1, 0, 0xFFFFFFFF},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E18_CB_COLOR7_ATTRIB, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E14_CB_COLOR7_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E18_CB_COLOR7_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E1C_CB_COLOR7_DIM, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E40_CB_COLOR8_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E40_CB_COLOR8_BASE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E44_CB_COLOR8_PITCH, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E48_CB_COLOR8_SLICE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E4C_CB_COLOR8_VIEW, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E50_CB_COLOR8_INFO, 1, 0, 0xFFFFFFFF},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E54_CB_COLOR8_ATTRIB, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E50_CB_COLOR8_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E54_CB_COLOR8_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E58_CB_COLOR8_DIM, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E5C_CB_COLOR9_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E5C_CB_COLOR9_BASE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E60_CB_COLOR9_PITCH, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E64_CB_COLOR9_SLICE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E68_CB_COLOR9_VIEW, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E6C_CB_COLOR9_INFO, 1, 0, 0xFFFFFFFF},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E70_CB_COLOR9_ATTRIB, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E6C_CB_COLOR9_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E70_CB_COLOR9_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E74_CB_COLOR9_DIM, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E78_CB_COLOR10_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E78_CB_COLOR10_BASE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E7C_CB_COLOR10_PITCH, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E80_CB_COLOR10_SLICE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E84_CB_COLOR10_VIEW, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E88_CB_COLOR10_INFO, 1, 0, 0xFFFFFFFF},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E8C_CB_COLOR10_ATTRIB, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E88_CB_COLOR10_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E8C_CB_COLOR10_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E90_CB_COLOR10_DIM, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E94_CB_COLOR11_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E94_CB_COLOR11_BASE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E98_CB_COLOR11_PITCH, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028E9C_CB_COLOR11_SLICE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028EA0_CB_COLOR11_VIEW, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028EA4_CB_COLOR11_INFO, 1, 0, 0xFFFFFFFF},
-       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028EA8_CB_COLOR11_ATTRIB, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028EA4_CB_COLOR11_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028EA8_CB_COLOR11_ATTRIB, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, EVERGREEN_CONTEXT_REG_OFFSET, R_028EAC_CB_COLOR11_DIM, 0, 0, 0},
 };
 
@@ -427,8 +427,8 @@ static int evergreen_state_resource_init(struct r600_context *ctx, u32 offset)
        struct r600_reg r600_shader_resource[] = {
                {PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, R_030000_RESOURCE0_WORD0, 0, 0, 0},
                {PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, R_030004_RESOURCE0_WORD1, 0, 0, 0},
-               {PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, R_030008_RESOURCE0_WORD2, 1, S_0085F0_TC_ACTION_ENA(1) | S_0085F0_VC_ACTION_ENA(1), 0xFFFFFFFF},
-               {PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, R_03000C_RESOURCE0_WORD3, 1, S_0085F0_TC_ACTION_ENA(1) | S_0085F0_VC_ACTION_ENA(1), 0xFFFFFFFF},
+               {PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, R_030008_RESOURCE0_WORD2, REG_FLAG_NEED_BO, S_0085F0_TC_ACTION_ENA(1) | S_0085F0_VC_ACTION_ENA(1), 0xFFFFFFFF},
+               {PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, R_03000C_RESOURCE0_WORD3, REG_FLAG_NEED_BO, S_0085F0_TC_ACTION_ENA(1) | S_0085F0_VC_ACTION_ENA(1), 0xFFFFFFFF},
                {PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, R_030010_RESOURCE0_WORD4, 0, 0, 0},
                {PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, R_030014_RESOURCE0_WORD5, 0, 0, 0},
                {PKT3_SET_RESOURCE, EVERGREEN_RESOURCE_OFFSET, R_030018_RESOURCE0_WORD6, 0, 0, 0},
@@ -499,7 +499,7 @@ static int evergreen_loop_const_init(struct r600_context *ctx, u32 offset)
                r600_loop_consts[i].opcode = PKT3_SET_LOOP_CONST;
                r600_loop_consts[i].offset_base = EVERGREEN_LOOP_CONST_OFFSET;
                r600_loop_consts[i].offset = EVERGREEN_LOOP_CONST_OFFSET + ((offset + i) * 4);
-               r600_loop_consts[i].need_bo = 0;
+               r600_loop_consts[i].flags = REG_FLAG_DIRTY_ALWAYS;
                r600_loop_consts[i].flush_flags = 0;
        }
        return r600_context_add_block(ctx, r600_loop_consts, nreg);
@@ -633,74 +633,33 @@ out_err:
        return r;
 }
 
-static inline void evergreen_context_pipe_state_set_resource(struct r600_context *ctx, struct r600_pipe_state *state, unsigned offset)
-{
-       struct r600_range *range;
-       struct r600_block *block;
-
-       range = &ctx->range[CTX_RANGE_ID(ctx, offset)];
-       block = range->blocks[CTX_BLOCK_ID(ctx, offset)];
-       if (state == NULL) {
-               block->status &= ~(R600_BLOCK_STATUS_ENABLED | R600_BLOCK_STATUS_DIRTY);
-               r600_bo_reference(ctx->radeon, &block->reloc[1].bo, NULL);
-               r600_bo_reference(ctx->radeon , &block->reloc[2].bo, NULL);
-               LIST_DELINIT(&block->list);
-               return;
-       }
-       block->reg[0] = state->regs[0].value;
-       block->reg[1] = state->regs[1].value;
-       block->reg[2] = state->regs[2].value;
-       block->reg[3] = state->regs[3].value;
-       block->reg[4] = state->regs[4].value;
-       block->reg[5] = state->regs[5].value;
-       block->reg[6] = state->regs[6].value;
-       block->reg[7] = state->regs[7].value;
-       r600_bo_reference(ctx->radeon, &block->reloc[1].bo, NULL);
-       r600_bo_reference(ctx->radeon , &block->reloc[2].bo, NULL);
-       if (state->regs[0].bo) {
-               /* VERTEX RESOURCE, we preted there is 2 bo to relocate so
-                * we have single case btw VERTEX & TEXTURE resource
-                */
-               r600_bo_reference(ctx->radeon, &block->reloc[1].bo, state->regs[0].bo);
-               r600_bo_reference(ctx->radeon, &block->reloc[2].bo, state->regs[0].bo);
-       } else {
-               /* TEXTURE RESOURCE */
-               r600_bo_reference(ctx->radeon, &block->reloc[1].bo, state->regs[2].bo);
-               r600_bo_reference(ctx->radeon, &block->reloc[2].bo, state->regs[3].bo);
-       }
-       if (!(block->status & R600_BLOCK_STATUS_DIRTY)) {
-               block->status |= R600_BLOCK_STATUS_ENABLED;
-               block->status |= R600_BLOCK_STATUS_DIRTY;
-               ctx->pm4_dirty_cdwords += block->pm4_ndwords + block->pm4_flush_ndwords;
-               LIST_ADDTAIL(&block->list,&ctx->dirty);
-       }
-}
-
 void evergreen_context_pipe_state_set_ps_resource(struct r600_context *ctx, struct r600_pipe_state *state, unsigned rid)
 {
        unsigned offset = R_030000_SQ_TEX_RESOURCE_WORD0_0 + 0x20 * rid;
 
-       evergreen_context_pipe_state_set_resource(ctx, state, offset);
+       r600_context_pipe_state_set_resource(ctx, state, offset);
 }
 
 void evergreen_context_pipe_state_set_vs_resource(struct r600_context *ctx, struct r600_pipe_state *state, unsigned rid)
 {
        unsigned offset = R_030000_SQ_TEX_RESOURCE_WORD0_0 + 0x1600 + 0x20 * rid;
 
-       evergreen_context_pipe_state_set_resource(ctx, state, offset);
+       r600_context_pipe_state_set_resource(ctx, state, offset);
 }
 
 void evergreen_context_pipe_state_set_fs_resource(struct r600_context *ctx, struct r600_pipe_state *state, unsigned rid)
 {
        unsigned offset = R_030000_SQ_TEX_RESOURCE_WORD0_0 + 0x7C00 + 0x20 * rid;
 
-       evergreen_context_pipe_state_set_resource(ctx, state, offset);
+       r600_context_pipe_state_set_resource(ctx, state, offset);
 }
 
 static inline void evergreen_context_pipe_state_set_sampler(struct r600_context *ctx, struct r600_pipe_state *state, unsigned offset)
 {
        struct r600_range *range;
        struct r600_block *block;
+       int i;
+       int dirty;
 
        range = &ctx->range[CTX_RANGE_ID(ctx, offset)];
        block = range->blocks[CTX_BLOCK_ID(ctx, offset)];
@@ -709,15 +668,27 @@ static inline void evergreen_context_pipe_state_set_sampler(struct r600_context
                LIST_DELINIT(&block->list);
                return;
        }
-       block->reg[0] = state->regs[0].value;
-       block->reg[1] = state->regs[1].value;
-       block->reg[2] = state->regs[2].value;
-       if (!(block->status & R600_BLOCK_STATUS_DIRTY)) {
-               block->status |= R600_BLOCK_STATUS_ENABLED;
-               block->status |= R600_BLOCK_STATUS_DIRTY;
-               ctx->pm4_dirty_cdwords += block->pm4_ndwords + block->pm4_flush_ndwords;
-               LIST_ADDTAIL(&block->list,&ctx->dirty);
+       dirty = block->status & R600_BLOCK_STATUS_DIRTY;
+
+       for (i = 0; i < 3; i++) {
+               if (block->reg[i] != state->regs[i].value) {
+                       dirty |= R600_BLOCK_STATUS_DIRTY;
+                       block->reg[i] = state->regs[i].value;
+               }
        }
+
+       r600_context_dirty_block(ctx, block, dirty, 2);
+}
+
+static inline void evergreen_context_ps_partial_flush(struct r600_context *ctx)
+{
+       if (!(ctx->flags & R600_CONTEXT_DRAW_PENDING))
+               return;
+
+       ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE, 0, 0);
+       ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE(EVENT_TYPE_PS_PARTIAL_FLUSH) | EVENT_INDEX(4);
+
+       ctx->flags &= ~R600_CONTEXT_DRAW_PENDING;
 }
 
 static inline void evergreen_context_pipe_state_set_sampler_border(struct r600_context *ctx, struct r600_pipe_state *state, unsigned offset, unsigned id)
@@ -725,6 +696,8 @@ static inline void evergreen_context_pipe_state_set_sampler_border(struct r600_c
        unsigned fake_offset = (offset - R_00A400_TD_PS_SAMPLER0_BORDER_INDEX) * 0x100 + 0x40000 + id * 0x1C;
        struct r600_range *range;
        struct r600_block *block;
+       int i;
+       int dirty;
 
        range = &ctx->range[CTX_RANGE_ID(ctx, fake_offset)];
        block = range->blocks[CTX_BLOCK_ID(ctx, fake_offset)];
@@ -736,17 +709,27 @@ static inline void evergreen_context_pipe_state_set_sampler_border(struct r600_c
        if (state->nregs <= 3) {
                return;
        }
-       block->reg[0] = id;
-       block->reg[1] = state->regs[3].value;
-       block->reg[2] = state->regs[4].value;
-       block->reg[3] = state->regs[5].value;
-       block->reg[4] = state->regs[6].value;
-       if (!(block->status & R600_BLOCK_STATUS_DIRTY)) {
-               block->status |= R600_BLOCK_STATUS_ENABLED;
-               block->status |= R600_BLOCK_STATUS_DIRTY;
-               ctx->pm4_dirty_cdwords += block->pm4_ndwords + block->pm4_flush_ndwords;
-               LIST_ADDTAIL(&block->list,&ctx->dirty);
+
+       dirty = block->status & R600_BLOCK_STATUS_DIRTY;
+       if (block->reg[0] != id) {
+               block->reg[0] = id;
+               dirty |= R600_BLOCK_STATUS_DIRTY;
        }
+
+       for (i = 1; i < 5; i++) {
+               if (block->reg[i] != state->regs[i + 2].value) {
+                       block->reg[i] = state->regs[i + 2].value;
+                       dirty |= R600_BLOCK_STATUS_DIRTY;
+               }
+       }
+
+       /* We have to flush the shaders before we change the border color
+        * registers, or previous draw commands that haven't completed yet
+        * will end up using the new border color. */
+       if (dirty & R600_BLOCK_STATUS_DIRTY)
+               evergreen_context_ps_partial_flush(ctx);
+
+       r600_context_dirty_block(ctx, block, dirty, 4);
 }
 
 void evergreen_context_pipe_state_set_ps_sampler(struct r600_context *ctx, struct r600_pipe_state *state, unsigned id)
@@ -770,42 +753,18 @@ void evergreen_context_pipe_state_set_vs_sampler(struct r600_context *ctx, struc
 
 void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw *draw)
 {
-       struct r600_bo *cb[12];
-       struct r600_bo *db;
-       unsigned ndwords = 9, flush;
+       unsigned ndwords = 7;
        struct r600_block *dirty_block = NULL;
        struct r600_block *next_block;
 
        if (draw->indices) {
-               ndwords = 13;
+               ndwords = 11;
                /* make sure there is enough relocation space before scheduling draw */
                if (ctx->creloc >= (ctx->nreloc - 1)) {
                        r600_context_flush(ctx);
                }
        }
 
-       /* find number of color buffer */
-       db = r600_context_reg_bo(ctx, R_028048_DB_Z_READ_BASE);
-       cb[0] = r600_context_reg_bo(ctx, R_028C60_CB_COLOR0_BASE);
-       cb[1] = r600_context_reg_bo(ctx, R_028C9C_CB_COLOR1_BASE);
-       cb[2] = r600_context_reg_bo(ctx, R_028CD8_CB_COLOR2_BASE);
-       cb[3] = r600_context_reg_bo(ctx, R_028D14_CB_COLOR3_BASE);
-       cb[4] = r600_context_reg_bo(ctx, R_028D50_CB_COLOR4_BASE);
-       cb[5] = r600_context_reg_bo(ctx, R_028D8C_CB_COLOR5_BASE);
-       cb[6] = r600_context_reg_bo(ctx, R_028DC8_CB_COLOR6_BASE);
-       cb[7] = r600_context_reg_bo(ctx, R_028E04_CB_COLOR7_BASE);
-       cb[8] = r600_context_reg_bo(ctx, R_028E40_CB_COLOR8_BASE);
-       cb[9] = r600_context_reg_bo(ctx, R_028E5C_CB_COLOR9_BASE);
-       cb[10] = r600_context_reg_bo(ctx, R_028E78_CB_COLOR10_BASE);
-       cb[11] = r600_context_reg_bo(ctx, R_028E94_CB_COLOR11_BASE);
-       for (int i = 0; i < 12; i++) {
-               if (cb[i]) {
-                       ndwords += 7;
-               }
-       }
-       if (db)
-               ndwords += 7;
-
        /* queries need some special values */
        if (ctx->num_query_running) {
                r600_context_reg(ctx,
@@ -818,6 +777,10 @@ void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw *dr
                                S_02800C_NOOP_CULL_DISABLE(1));
        }
 
+       /* update the max dword count to make sure we have enough space
+        * reserved for flushing the destination caches */
+       ctx->pm4_ndwords = RADEON_CTX_MAX_PM4 - ctx->num_dest_buffers * 7 - 16;
+
        if ((ctx->pm4_dirty_cdwords + ndwords + ctx->pm4_cdwords) > ctx->pm4_ndwords) {
                /* need to flush */
                r600_context_flush(ctx);
@@ -852,12 +815,41 @@ void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw *dr
                ctx->pm4[ctx->pm4_cdwords++] = draw->vgt_num_indices;
                ctx->pm4[ctx->pm4_cdwords++] = draw->vgt_draw_initiator;
        }
-       ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE, 0, ctx->predicate_drawing);
-       ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE(EVENT_TYPE_CACHE_FLUSH_AND_INV_EVENT) | EVENT_INDEX(0);
+
+       ctx->flags |= (R600_CONTEXT_DRAW_PENDING | R600_CONTEXT_DST_CACHES_DIRTY);
+
+       /* all dirty state have been scheduled in current cs */
+       ctx->pm4_dirty_cdwords = 0;
+}
+
+void evergreen_context_flush_dest_caches(struct r600_context *ctx)
+{
+       struct r600_bo *cb[12];
+       struct r600_bo *db;
+
+       if (!(ctx->flags & R600_CONTEXT_DST_CACHES_DIRTY))
+               return;
+
+       /* find number of color buffer */
+       db = r600_context_reg_bo(ctx, R_028048_DB_Z_READ_BASE);
+       cb[0] = r600_context_reg_bo(ctx, R_028C60_CB_COLOR0_BASE);
+       cb[1] = r600_context_reg_bo(ctx, R_028C9C_CB_COLOR1_BASE);
+       cb[2] = r600_context_reg_bo(ctx, R_028CD8_CB_COLOR2_BASE);
+       cb[3] = r600_context_reg_bo(ctx, R_028D14_CB_COLOR3_BASE);
+       cb[4] = r600_context_reg_bo(ctx, R_028D50_CB_COLOR4_BASE);
+       cb[5] = r600_context_reg_bo(ctx, R_028D8C_CB_COLOR5_BASE);
+       cb[6] = r600_context_reg_bo(ctx, R_028DC8_CB_COLOR6_BASE);
+       cb[7] = r600_context_reg_bo(ctx, R_028E04_CB_COLOR7_BASE);
+       cb[8] = r600_context_reg_bo(ctx, R_028E40_CB_COLOR8_BASE);
+       cb[9] = r600_context_reg_bo(ctx, R_028E5C_CB_COLOR9_BASE);
+       cb[10] = r600_context_reg_bo(ctx, R_028E78_CB_COLOR10_BASE);
+       cb[11] = r600_context_reg_bo(ctx, R_028E94_CB_COLOR11_BASE);
 
        /* flush color buffer */
        for (int i = 0; i < 12; i++) {
                if (cb[i]) {
+                       unsigned flush;
+
                        if (i > 7) {
                                flush = (S_0085F0_CB8_DEST_BASE_ENA(1) << (i - 8)) |
                                        S_0085F0_CB_ACTION_ENA(1);
@@ -875,7 +867,6 @@ void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw *dr
                                        0, db);
        }
 
-       /* all dirty state have been scheduled in current cs */
-       ctx->pm4_dirty_cdwords = 0;
+       ctx->flags &= ~R600_CONTEXT_DST_CACHES_DIRTY;
 }
 
index c081abb4dcdf9c0e56381e9a5b0513584afb13f1..ddd8ee3d6dde2dadafb3add7b976f215ee51f381 100644 (file)
@@ -30,6 +30,7 @@
 #include <sys/ioctl.h>
 #include "util/u_inlines.h"
 #include "util/u_debug.h"
+#include "util/u_hash_table.h"
 #include <pipebuffer/pb_bufmgr.h>
 #include "r600.h"
 #include "r600_priv.h"
@@ -242,6 +243,18 @@ static int radeon_init_fence(struct radeon *radeon)
        return 0;
 }
 
+#define PTR_TO_UINT(x) ((unsigned)((intptr_t)(x)))
+
+static unsigned handle_hash(void *key)
+{
+    return PTR_TO_UINT(key);
+}
+
+static int handle_compare(void *key1, void *key2)
+{
+    return PTR_TO_UINT(key1) != PTR_TO_UINT(key2);
+}
+
 static struct radeon *radeon_new(int fd, unsigned device)
 {
        struct radeon *radeon;
@@ -340,6 +353,9 @@ static struct radeon *radeon_new(int fd, unsigned device)
                radeon_decref(radeon);
                return NULL;
        }
+
+       radeon->bo_handles = util_hash_table_create(handle_hash, handle_compare);
+       pipe_mutex_init(radeon->bo_handles_mutex);
        return radeon;
 }
 
@@ -356,6 +372,8 @@ struct radeon *radeon_decref(struct radeon *radeon)
                return NULL;
        }
 
+       util_hash_table_destroy(radeon->bo_handles);
+       pipe_mutex_destroy(radeon->bo_handles_mutex);
        if (radeon->fence_bo) {
                r600_bo_reference(radeon, &radeon->fence_bo, NULL);
        }
index a7c21784e51b7ae9a41f5d406917c8f1fbce56d3..662455be28c172fee5db69af49964276b060a73d 100644 (file)
@@ -106,16 +106,22 @@ int r600_context_add_block(struct r600_context *ctx, const struct r600_reg *reg,
                }
 
                /* initialize block */
+               block->status |= R600_BLOCK_STATUS_DIRTY; /* dirty all blocks at start */
                block->start_offset = reg[i].offset;
                block->pm4[block->pm4_ndwords++] = PKT3(reg[i].opcode, n, 0);
                block->pm4[block->pm4_ndwords++] = (block->start_offset - reg[i].offset_base) >> 2;
                block->reg = &block->pm4[block->pm4_ndwords];
                block->pm4_ndwords += n;
                block->nreg = n;
+               block->nreg_dirty = n;
+               block->flags = 0;
                LIST_INITHEAD(&block->list);
 
                for (j = 0; j < n; j++) {
-                       if (reg[i+j].need_bo) {
+                       if (reg[i+j].flags & REG_FLAG_DIRTY_ALWAYS) {
+                               block->flags |= REG_FLAG_DIRTY_ALWAYS;
+                       }
+                       if (reg[i+j].flags & REG_FLAG_NEED_BO) {
                                block->nbo++;
                                assert(block->nbo < R600_BLOCK_MAX_BO);
                                block->pm4_bo_index[j] = block->nbo;
@@ -191,97 +197,97 @@ static const struct r600_reg r600_context_reg_list[] = {
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028028_DB_STENCIL_CLEAR, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02802C_DB_DEPTH_CLEAR, 0, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028040_CB_COLOR0_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028040_CB_COLOR0_BASE, REG_FLAG_NEED_BO, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280A0_CB_COLOR0_INFO, 1, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280A0_CB_COLOR0_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028060_CB_COLOR0_SIZE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028080_CB_COLOR0_VIEW, 0, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280E0_CB_COLOR0_FRAG, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280E0_CB_COLOR0_FRAG, REG_FLAG_NEED_BO, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280C0_CB_COLOR0_TILE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280C0_CB_COLOR0_TILE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028100_CB_COLOR0_MASK, 0, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028044_CB_COLOR1_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028044_CB_COLOR1_BASE, REG_FLAG_NEED_BO, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280A4_CB_COLOR1_INFO, 1, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280A4_CB_COLOR1_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028064_CB_COLOR1_SIZE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028084_CB_COLOR1_VIEW, 0, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280E4_CB_COLOR1_FRAG, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280E4_CB_COLOR1_FRAG, REG_FLAG_NEED_BO, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280C4_CB_COLOR1_TILE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280C4_CB_COLOR1_TILE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028104_CB_COLOR1_MASK, 0, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028048_CB_COLOR2_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028048_CB_COLOR2_BASE, REG_FLAG_NEED_BO, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280A8_CB_COLOR2_INFO, 1, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280A8_CB_COLOR2_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028068_CB_COLOR2_SIZE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028088_CB_COLOR2_VIEW, 0, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280E8_CB_COLOR2_FRAG, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280E8_CB_COLOR2_FRAG, REG_FLAG_NEED_BO, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280C8_CB_COLOR2_TILE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280C8_CB_COLOR2_TILE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028108_CB_COLOR2_MASK, 0, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02804C_CB_COLOR3_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02804C_CB_COLOR3_BASE, REG_FLAG_NEED_BO, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280AC_CB_COLOR3_INFO, 1, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280AC_CB_COLOR3_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02806C_CB_COLOR3_SIZE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02808C_CB_COLOR3_VIEW, 0, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280EC_CB_COLOR3_FRAG, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280EC_CB_COLOR3_FRAG, REG_FLAG_NEED_BO, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280CC_CB_COLOR3_TILE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280CC_CB_COLOR3_TILE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02810C_CB_COLOR3_MASK, 0, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028050_CB_COLOR4_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028050_CB_COLOR4_BASE, REG_FLAG_NEED_BO, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280B0_CB_COLOR4_INFO, 1, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280B0_CB_COLOR4_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028070_CB_COLOR4_SIZE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028090_CB_COLOR4_VIEW, 0, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280F0_CB_COLOR4_FRAG, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280F0_CB_COLOR4_FRAG, REG_FLAG_NEED_BO, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280D0_CB_COLOR4_TILE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280D0_CB_COLOR4_TILE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028110_CB_COLOR4_MASK, 0, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028054_CB_COLOR5_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028054_CB_COLOR5_BASE, REG_FLAG_NEED_BO, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280B4_CB_COLOR5_INFO, 1, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280B4_CB_COLOR5_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028074_CB_COLOR5_SIZE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028094_CB_COLOR5_VIEW, 0, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280F4_CB_COLOR5_FRAG, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280F4_CB_COLOR5_FRAG, REG_FLAG_NEED_BO, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280D4_CB_COLOR5_TILE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280D4_CB_COLOR5_TILE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028114_CB_COLOR5_MASK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028058_CB_COLOR6_BASE, 1, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280B8_CB_COLOR6_INFO, 1, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028058_CB_COLOR6_BASE, REG_FLAG_NEED_BO, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280B8_CB_COLOR6_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028078_CB_COLOR6_SIZE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028098_CB_COLOR6_VIEW, 0, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280F8_CB_COLOR6_FRAG, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280F8_CB_COLOR6_FRAG, REG_FLAG_NEED_BO, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280D8_CB_COLOR6_TILE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280D8_CB_COLOR6_TILE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028118_CB_COLOR6_MASK, 0, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02805C_CB_COLOR7_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02805C_CB_COLOR7_BASE, REG_FLAG_NEED_BO, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280BC_CB_COLOR7_INFO, 1, 0, 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280BC_CB_COLOR7_INFO, REG_FLAG_NEED_BO, 0, 0xFFFFFFFF},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02807C_CB_COLOR7_SIZE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02809C_CB_COLOR7_VIEW, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280FC_CB_COLOR7_FRAG, 1, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280DC_CB_COLOR7_TILE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280FC_CB_COLOR7_FRAG, REG_FLAG_NEED_BO, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0280DC_CB_COLOR7_TILE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02811C_CB_COLOR7_MASK, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028120_CB_CLEAR_RED, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028124_CB_CLEAR_GREEN, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028128_CB_CLEAR_BLUE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02812C_CB_CLEAR_ALPHA, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028140_ALU_CONST_BUFFER_SIZE_PS_0, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028180_ALU_CONST_BUFFER_SIZE_VS_0, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028940_ALU_CONST_CACHE_PS_0, 1, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028980_ALU_CONST_CACHE_VS_0, 1, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028140_ALU_CONST_BUFFER_SIZE_PS_0, REG_FLAG_DIRTY_ALWAYS, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028180_ALU_CONST_BUFFER_SIZE_VS_0, REG_FLAG_DIRTY_ALWAYS, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028940_ALU_CONST_CACHE_PS_0, REG_FLAG_NEED_BO, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028980_ALU_CONST_CACHE_VS_0, REG_FLAG_NEED_BO, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02823C_CB_SHADER_MASK, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028238_CB_TARGET_MASK, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028410_SX_ALPHA_TEST_CONTROL, 0, 0, 0},
@@ -321,11 +327,11 @@ static const struct r600_reg r600_context_reg_list[] = {
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028C48_PA_SC_AA_MASK, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028D2C_DB_SRESULTS_COMPARE_STATE1, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028D44_DB_ALPHA_TO_MASK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02800C_DB_DEPTH_BASE, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_02800C_DB_DEPTH_BASE, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028000_DB_DEPTH_SIZE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028004_DB_DEPTH_VIEW, 0, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028010_DB_DEPTH_INFO, 1, 0, 0},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028010_DB_DEPTH_INFO, REG_FLAG_NEED_BO, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028D0C_DB_RENDER_CONTROL, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028D10_DB_RENDER_OVERRIDE, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028D24_DB_HTILE_SURFACE, 0, 0, 0},
@@ -449,11 +455,11 @@ static const struct r600_reg r600_context_reg_list[] = {
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028638_SPI_VS_OUT_ID_9, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286C4_SPI_VS_OUT_CONFIG, 0, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028858_SQ_PGM_START_VS, 1, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028858_SQ_PGM_START_VS, REG_FLAG_NEED_BO, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028868_SQ_PGM_RESOURCES_VS, 0, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028894_SQ_PGM_START_FS, 1, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028894_SQ_PGM_START_FS, REG_FLAG_NEED_BO, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0288A4_SQ_PGM_RESOURCES_FS, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0288D0_SQ_PGM_CF_OFFSET_VS, 0, 0, 0},
@@ -494,7 +500,7 @@ static const struct r600_reg r600_context_reg_list[] = {
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286D0_SPI_PS_IN_CONTROL_1, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_0286D8_SPI_INPUT_Z, 0, 0, 0},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
-       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028840_SQ_PGM_START_PS, 1, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
+       {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028840_SQ_PGM_START_PS, REG_FLAG_NEED_BO, S_0085F0_SH_ACTION_ENA(1), 0xFFFFFFFF},
        {0, 0, GROUP_FORCE_NEW_BLOCK, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028850_SQ_PGM_RESOURCES_PS, 0, 0, 0},
        {PKT3_SET_CONTEXT_REG, R600_CONTEXT_REG_OFFSET, R_028854_SQ_PGM_EXPORTS_PS, 0, 0, 0},
@@ -515,8 +521,8 @@ static int r600_state_resource_init(struct r600_context *ctx, u32 offset)
        struct r600_reg r600_shader_resource[] = {
                {PKT3_SET_RESOURCE, R600_RESOURCE_OFFSET, R_038000_RESOURCE0_WORD0, 0, 0, 0},
                {PKT3_SET_RESOURCE, R600_RESOURCE_OFFSET, R_038004_RESOURCE0_WORD1, 0, 0, 0},
-               {PKT3_SET_RESOURCE, R600_RESOURCE_OFFSET, R_038008_RESOURCE0_WORD2, 1, S_0085F0_TC_ACTION_ENA(1) | S_0085F0_VC_ACTION_ENA(1), 0xFFFFFFFF},
-               {PKT3_SET_RESOURCE, R600_RESOURCE_OFFSET, R_03800C_RESOURCE0_WORD3, 1, S_0085F0_TC_ACTION_ENA(1) | S_0085F0_VC_ACTION_ENA(1), 0xFFFFFFFF},
+               {PKT3_SET_RESOURCE, R600_RESOURCE_OFFSET, R_038008_RESOURCE0_WORD2, REG_FLAG_NEED_BO, S_0085F0_TC_ACTION_ENA(1) | S_0085F0_VC_ACTION_ENA(1), 0xFFFFFFFF},
+               {PKT3_SET_RESOURCE, R600_RESOURCE_OFFSET, R_03800C_RESOURCE0_WORD3, REG_FLAG_NEED_BO, S_0085F0_TC_ACTION_ENA(1) | S_0085F0_VC_ACTION_ENA(1), 0xFFFFFFFF},
                {PKT3_SET_RESOURCE, R600_RESOURCE_OFFSET, R_038010_RESOURCE0_WORD4, 0, 0, 0},
                {PKT3_SET_RESOURCE, R600_RESOURCE_OFFSET, R_038014_RESOURCE0_WORD5, 0, 0, 0},
                {PKT3_SET_RESOURCE, R600_RESOURCE_OFFSET, R_038018_RESOURCE0_WORD6, 0, 0, 0},
@@ -572,7 +578,7 @@ static int r600_loop_const_init(struct r600_context *ctx, u32 offset)
                r600_loop_consts[i].opcode = PKT3_SET_LOOP_CONST;
                r600_loop_consts[i].offset_base = R600_LOOP_CONST_OFFSET;
                r600_loop_consts[i].offset = R600_LOOP_CONST_OFFSET + ((offset + i) * 4);
-               r600_loop_consts[i].need_bo = 0;
+               r600_loop_consts[i].flags = REG_FLAG_DIRTY_ALWAYS;
                r600_loop_consts[i].flush_flags = 0;
                r600_loop_consts[i].flush_mask = 0;
        }
@@ -771,14 +777,30 @@ static void rv6xx_context_surface_base_update(struct r600_context *ctx,
        }
 }
 
+/* Flushes all surfaces */
+void r600_context_flush_all(struct r600_context *ctx, unsigned flush_flags)
+{
+       unsigned ndwords = 5;
+
+       if ((ctx->pm4_dirty_cdwords + ndwords + ctx->pm4_cdwords) > ctx->pm4_ndwords) {
+               /* need to flush */
+               r600_context_flush(ctx);
+       }
+
+       ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_SURFACE_SYNC, 3, ctx->predicate_drawing);
+       ctx->pm4[ctx->pm4_cdwords++] = flush_flags;     /* CP_COHER_CNTL */
+       ctx->pm4[ctx->pm4_cdwords++] = 0xffffffff;      /* CP_COHER_SIZE */
+       ctx->pm4[ctx->pm4_cdwords++] = 0;               /* CP_COHER_BASE */
+       ctx->pm4[ctx->pm4_cdwords++] = 0x0000000A;      /* POLL_INTERVAL */
+}
+
 void r600_context_bo_flush(struct r600_context *ctx, unsigned flush_flags,
                                unsigned flush_mask, struct r600_bo *rbo)
 {
        struct radeon_bo *bo;
-
        bo = r600_bo_get_bo(rbo);
-       /* if bo has already been flush */
-       if (!(bo->last_flush ^ flush_flags)) {
+       /* if bo has already been flushed */
+       if (!(~bo->last_flush & flush_flags)) {
                bo->last_flush &= flush_mask;
                return;
        }
@@ -815,38 +837,91 @@ void r600_context_bo_reloc(struct r600_context *ctx, u32 *pm4, struct r600_bo *r
        *pm4 = bo->reloc_id;
 }
 
-void r600_context_pipe_state_set(struct r600_context *ctx, struct r600_pipe_state *state)
+void r600_context_reg(struct r600_context *ctx,
+                     unsigned offset, unsigned value,
+                     unsigned mask)
 {
        struct r600_range *range;
        struct r600_block *block;
+       unsigned id;
+       unsigned new_val;
+       int dirty;
+
+       range = &ctx->range[CTX_RANGE_ID(ctx, offset)];
+       block = range->blocks[CTX_BLOCK_ID(ctx, offset)];
+       id = (offset - block->start_offset) >> 2;
+
+       dirty = block->status & R600_BLOCK_STATUS_DIRTY;
+
+       new_val = block->reg[id];
+       new_val &= ~mask;
+       new_val |= value;
+       if (new_val != block->reg[id]) {
+               dirty |= R600_BLOCK_STATUS_DIRTY;
+               block->reg[id] = new_val;
+       }
+       r600_context_dirty_block(ctx, block, dirty, id);
+}
 
+void r600_context_dirty_block(struct r600_context *ctx, struct r600_block *block,
+                             int dirty, int index)
+{
+       if (dirty && (index + 1) > block->nreg_dirty)
+               block->nreg_dirty = index + 1;
+
+       if ((dirty != (block->status & R600_BLOCK_STATUS_DIRTY)) || !(block->status & R600_BLOCK_STATUS_ENABLED)) {
+
+               block->status |= R600_BLOCK_STATUS_ENABLED;
+               block->status |= R600_BLOCK_STATUS_DIRTY;
+               ctx->pm4_dirty_cdwords += block->pm4_ndwords + block->pm4_flush_ndwords;
+               LIST_ADDTAIL(&block->list,&ctx->dirty);
+       }
+}
+
+void r600_context_pipe_state_set(struct r600_context *ctx, struct r600_pipe_state *state)
+{
+       struct r600_range *range;
+       struct r600_block *block;
+       unsigned new_val;
+       int dirty;
        for (int i = 0; i < state->nregs; i++) {
-               unsigned id;
+               unsigned id, reloc_id;
 
                range = &ctx->range[CTX_RANGE_ID(ctx, state->regs[i].offset)];
                block = range->blocks[CTX_BLOCK_ID(ctx, state->regs[i].offset)];
                id = (state->regs[i].offset - block->start_offset) >> 2;
-               block->reg[id] &= ~state->regs[i].mask;
-               block->reg[id] |= state->regs[i].value;
+
+               dirty = block->status & R600_BLOCK_STATUS_DIRTY;
+
+               new_val = block->reg[id];
+               new_val &= ~state->regs[i].mask;
+               new_val |= state->regs[i].value;
+               if (new_val != block->reg[id]) {
+                       block->reg[id] = new_val;
+                       dirty |= R600_BLOCK_STATUS_DIRTY;
+               }
+               if (block->flags & REG_FLAG_DIRTY_ALWAYS)
+                       dirty |= R600_BLOCK_STATUS_DIRTY;
                if (block->pm4_bo_index[id]) {
                        /* find relocation */
-                       id = block->pm4_bo_index[id];
-                       r600_bo_reference(ctx->radeon, &block->reloc[id].bo, state->regs[i].bo);
+                       reloc_id = block->pm4_bo_index[id];
+                       r600_bo_reference(ctx->radeon, &block->reloc[reloc_id].bo, state->regs[i].bo);
                        state->regs[i].bo->fence = ctx->radeon->fence;
+                       /* always force dirty for relocs for now */
+                       dirty |= R600_BLOCK_STATUS_DIRTY;
                }
-               if (!(block->status & R600_BLOCK_STATUS_DIRTY)) {
-                       block->status |= R600_BLOCK_STATUS_ENABLED;
-                       block->status |= R600_BLOCK_STATUS_DIRTY;
-                       ctx->pm4_dirty_cdwords += block->pm4_ndwords + block->pm4_flush_ndwords;
-                       LIST_ADDTAIL(&block->list,&ctx->dirty);
-               }
+
+               r600_context_dirty_block(ctx, block, dirty, id);
        }
 }
 
-static inline void r600_context_pipe_state_set_resource(struct r600_context *ctx, struct r600_pipe_state *state, unsigned offset)
+void r600_context_pipe_state_set_resource(struct r600_context *ctx, struct r600_pipe_state *state, unsigned offset)
 {
        struct r600_range *range;
        struct r600_block *block;
+       int i;
+       int dirty;
+       int num_regs = ctx->radeon->chip_class >= EVERGREEN ? 8 : 7;
 
        range = &ctx->range[CTX_RANGE_ID(ctx, offset)];
        block = range->blocks[CTX_BLOCK_ID(ctx, offset)];
@@ -857,35 +932,57 @@ static inline void r600_context_pipe_state_set_resource(struct r600_context *ctx
                LIST_DELINIT(&block->list);
                return;
        }
-       block->reg[0] = state->regs[0].value;
-       block->reg[1] = state->regs[1].value;
-       block->reg[2] = state->regs[2].value;
-       block->reg[3] = state->regs[3].value;
-       block->reg[4] = state->regs[4].value;
-       block->reg[5] = state->regs[5].value;
-       block->reg[6] = state->regs[6].value;
-       r600_bo_reference(ctx->radeon, &block->reloc[1].bo, NULL);
-       r600_bo_reference(ctx->radeon , &block->reloc[2].bo, NULL);
-       if (state->regs[0].bo) {
-               /* VERTEX RESOURCE, we preted there is 2 bo to relocate so
-                * we have single case btw VERTEX & TEXTURE resource
-                */
-               r600_bo_reference(ctx->radeon, &block->reloc[1].bo, state->regs[0].bo);
-               r600_bo_reference(ctx->radeon, &block->reloc[2].bo, state->regs[0].bo);
-               state->regs[0].bo->fence = ctx->radeon->fence;
-       } else {
-               /* TEXTURE RESOURCE */
-               r600_bo_reference(ctx->radeon, &block->reloc[1].bo, state->regs[2].bo);
-               r600_bo_reference(ctx->radeon, &block->reloc[2].bo, state->regs[3].bo);
-               state->regs[2].bo->fence = ctx->radeon->fence;
-               state->regs[3].bo->fence = ctx->radeon->fence;
+
+       dirty = block->status & R600_BLOCK_STATUS_DIRTY;
+
+       for (i = 0; i < num_regs; i++) {
+               if (block->reg[i] != state->regs[i].value) {
+                       dirty |= R600_BLOCK_STATUS_DIRTY;
+                       block->reg[i] = state->regs[i].value;
+               }
        }
-       if (!(block->status & R600_BLOCK_STATUS_DIRTY)) {
-               block->status |= R600_BLOCK_STATUS_ENABLED;
-               block->status |= R600_BLOCK_STATUS_DIRTY;
-               ctx->pm4_dirty_cdwords += block->pm4_ndwords + block->pm4_flush_ndwords;
-               LIST_ADDTAIL(&block->list,&ctx->dirty);
+
+       /* if no BOs on block, force dirty */
+       if (!block->reloc[1].bo || !block->reloc[2].bo)
+               dirty |= R600_BLOCK_STATUS_DIRTY;
+
+       if (!dirty) {
+               if (state->regs[0].bo) {
+                       if ((block->reloc[1].bo->bo->handle != state->regs[0].bo->bo->handle) ||
+                           (block->reloc[2].bo->bo->handle != state->regs[0].bo->bo->handle))
+                               dirty |= R600_BLOCK_STATUS_DIRTY;
+               } else {
+                       if ((block->reloc[1].bo->bo->handle != state->regs[2].bo->bo->handle) ||
+                           (block->reloc[2].bo->bo->handle != state->regs[3].bo->bo->handle))
+                               dirty |= R600_BLOCK_STATUS_DIRTY;
+               }
        }
+       if (!dirty) {
+               if (state->regs[0].bo)
+                       state->regs[0].bo->fence = ctx->radeon->fence;
+               else {
+                       state->regs[2].bo->fence = ctx->radeon->fence;
+                       state->regs[3].bo->fence = ctx->radeon->fence;
+               }
+       } else {
+               r600_bo_reference(ctx->radeon, &block->reloc[1].bo, NULL);
+               r600_bo_reference(ctx->radeon, &block->reloc[2].bo, NULL);
+               if (state->regs[0].bo) {
+                       /* VERTEX RESOURCE, we preted there is 2 bo to relocate so
+                        * we have single case btw VERTEX & TEXTURE resource
+                        */
+                       r600_bo_reference(ctx->radeon, &block->reloc[1].bo, state->regs[0].bo);
+                       r600_bo_reference(ctx->radeon, &block->reloc[2].bo, state->regs[0].bo);
+                       state->regs[0].bo->fence = ctx->radeon->fence;
+               } else {
+                       /* TEXTURE RESOURCE */
+                       r600_bo_reference(ctx->radeon, &block->reloc[1].bo, state->regs[2].bo);
+                       r600_bo_reference(ctx->radeon, &block->reloc[2].bo, state->regs[3].bo);
+                       state->regs[2].bo->fence = ctx->radeon->fence;
+                       state->regs[3].bo->fence = ctx->radeon->fence;
+               }
+       }
+       r600_context_dirty_block(ctx, block, dirty, num_regs - 1);
 }
 
 void r600_context_pipe_state_set_ps_resource(struct r600_context *ctx, struct r600_pipe_state *state, unsigned rid)
@@ -913,6 +1010,8 @@ static inline void r600_context_pipe_state_set_sampler(struct r600_context *ctx,
 {
        struct r600_range *range;
        struct r600_block *block;
+       int i;
+       int dirty;
 
        range = &ctx->range[CTX_RANGE_ID(ctx, offset)];
        block = range->blocks[CTX_BLOCK_ID(ctx, offset)];
@@ -921,21 +1020,34 @@ static inline void r600_context_pipe_state_set_sampler(struct r600_context *ctx,
                LIST_DELINIT(&block->list);
                return;
        }
-       block->reg[0] = state->regs[0].value;
-       block->reg[1] = state->regs[1].value;
-       block->reg[2] = state->regs[2].value;
-       if (!(block->status & R600_BLOCK_STATUS_DIRTY)) {
-               block->status |= R600_BLOCK_STATUS_ENABLED;
-               block->status |= R600_BLOCK_STATUS_DIRTY;
-               ctx->pm4_dirty_cdwords += block->pm4_ndwords + block->pm4_flush_ndwords;
-               LIST_ADDTAIL(&block->list,&ctx->dirty);
+       dirty = block->status & R600_BLOCK_STATUS_DIRTY;
+       for (i = 0; i < 3; i++) {
+               if (block->reg[i] != state->regs[i].value) {
+                       block->reg[i] = state->regs[i].value;
+                       dirty |= R600_BLOCK_STATUS_DIRTY;
+               }
        }
+
+       r600_context_dirty_block(ctx, block, dirty, 2);
+}
+
+static inline void r600_context_ps_partial_flush(struct r600_context *ctx)
+{
+       if (!(ctx->flags & R600_CONTEXT_DRAW_PENDING))
+               return;
+
+       ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE, 0, 0);
+       ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE(EVENT_TYPE_PS_PARTIAL_FLUSH) | EVENT_INDEX(4);
+
+       ctx->flags &= ~R600_CONTEXT_DRAW_PENDING;
 }
 
 static inline void r600_context_pipe_state_set_sampler_border(struct r600_context *ctx, struct r600_pipe_state *state, unsigned offset)
 {
        struct r600_range *range;
        struct r600_block *block;
+       int i;
+       int dirty;
 
        range = &ctx->range[CTX_RANGE_ID(ctx, offset)];
        block = range->blocks[CTX_BLOCK_ID(ctx, offset)];
@@ -947,16 +1059,21 @@ static inline void r600_context_pipe_state_set_sampler_border(struct r600_contex
        if (state->nregs <= 3) {
                return;
        }
-       block->reg[0] = state->regs[3].value;
-       block->reg[1] = state->regs[4].value;
-       block->reg[2] = state->regs[5].value;
-       block->reg[3] = state->regs[6].value;
-       if (!(block->status & R600_BLOCK_STATUS_DIRTY)) {
-               block->status |= R600_BLOCK_STATUS_ENABLED;
-               block->status |= R600_BLOCK_STATUS_DIRTY;
-               ctx->pm4_dirty_cdwords += block->pm4_ndwords + block->pm4_flush_ndwords;
-               LIST_ADDTAIL(&block->list,&ctx->dirty);
+       dirty = block->status & R600_BLOCK_STATUS_DIRTY;
+       for (i = 0; i < 4; i++) {
+               if (block->reg[i] != state->regs[i + 3].value) {
+                       block->reg[i] = state->regs[i + 3].value;
+                       dirty |= R600_BLOCK_STATUS_DIRTY;
+               }
        }
+
+       /* We have to flush the shaders before we change the border color
+        * registers, or previous draw commands that haven't completed yet
+        * will end up using the new border color. */
+       if (dirty & R600_BLOCK_STATUS_DIRTY)
+               r600_context_ps_partial_flush(ctx);
+
+       r600_context_dirty_block(ctx, block, dirty, 3);
 }
 
 void r600_context_pipe_state_set_ps_sampler(struct r600_context *ctx, struct r600_pipe_state *state, unsigned id)
@@ -995,24 +1112,54 @@ struct r600_bo *r600_context_reg_bo(struct r600_context *ctx, unsigned offset)
        return NULL;
 }
 
-void r600_context_draw(struct r600_context *ctx, const struct r600_draw *draw)
+void r600_context_block_emit_dirty(struct r600_context *ctx, struct r600_block *block)
 {
-       struct r600_bo *cb[8];
-       struct r600_bo *db;
-       unsigned ndwords = 9;
-       struct r600_block *dirty_block = NULL;
-       struct r600_block *next_block;
-       unsigned rv6xx_surface_base_update = 0;
+       int id;
 
-       if (draw->indices) {
-               ndwords = 13;
-               /* make sure there is enough relocation space before scheduling draw */
-               if (ctx->creloc >= (ctx->nreloc - 1)) {
-                       r600_context_flush(ctx);
+       if (block->nreg_dirty == 0 && block->nbo == 0 && !(block->flags & REG_FLAG_DIRTY_ALWAYS)) {
+               goto out;
+       }
+
+       for (int j = 0; j < block->nreg; j++) {
+               if (block->pm4_bo_index[j]) {
+                       /* find relocation */
+                       id = block->pm4_bo_index[j];
+                       r600_context_bo_reloc(ctx,
+                                       &block->pm4[block->reloc[id].bo_pm4_index],
+                                       block->reloc[id].bo);
+                       r600_context_bo_flush(ctx,
+                                       block->reloc[id].flush_flags,
+                                       block->reloc[id].flush_mask,
+                                       block->reloc[id].bo);
                }
        }
+       memcpy(&ctx->pm4[ctx->pm4_cdwords], block->pm4, block->pm4_ndwords * 4);
+       ctx->pm4_cdwords += block->pm4_ndwords;
+
+       if (block->nreg_dirty != block->nreg && block->nbo == 0 && !(block->flags & REG_FLAG_DIRTY_ALWAYS)) {
+               int new_dwords = block->nreg_dirty;
+               uint32_t oldword, newword;
+               ctx->pm4_cdwords -= block->pm4_ndwords;
+               newword = oldword = ctx->pm4[ctx->pm4_cdwords];
+               newword &= PKT_COUNT_C;
+               newword |= PKT_COUNT_S(new_dwords);
+               ctx->pm4[ctx->pm4_cdwords] = newword;
+               ctx->pm4_cdwords += new_dwords + 2;
+       }
+out:
+       block->status ^= R600_BLOCK_STATUS_DIRTY;
+       block->nreg_dirty = 0;
+       LIST_DELINIT(&block->list);
+}
+
+void r600_context_flush_dest_caches(struct r600_context *ctx)
+{
+       struct r600_bo *cb[8];
+       struct r600_bo *db;
+
+       if (!(ctx->flags & R600_CONTEXT_DST_CACHES_DIRTY))
+               return;
 
-       /* find number of color buffer */
        db = r600_context_reg_bo(ctx, R_02800C_DB_DEPTH_BASE);
        cb[0] = r600_context_reg_bo(ctx, R_028040_CB_COLOR0_BASE);
        cb[1] = r600_context_reg_bo(ctx, R_028044_CB_COLOR1_BASE);
@@ -1022,16 +1169,64 @@ void r600_context_draw(struct r600_context *ctx, const struct r600_draw *draw)
        cb[5] = r600_context_reg_bo(ctx, R_028054_CB_COLOR5_BASE);
        cb[6] = r600_context_reg_bo(ctx, R_028058_CB_COLOR6_BASE);
        cb[7] = r600_context_reg_bo(ctx, R_02805C_CB_COLOR7_BASE);
+
+       /* flush the color buffers */
        for (int i = 0; i < 8; i++) {
-               if (cb[i]) {
-                       ndwords += 7;
-                       rv6xx_surface_base_update |= SURFACE_BASE_UPDATE_COLOR(i);
-               }
+               if (!cb[i])
+                       continue;
+
+               r600_context_bo_flush(ctx,
+                                       (S_0085F0_CB0_DEST_BASE_ENA(1) << i) |
+                                       S_0085F0_CB_ACTION_ENA(1),
+                                       0, cb[i]);
        }
        if (db) {
-               ndwords += 7;
-               rv6xx_surface_base_update |= SURFACE_BASE_UPDATE_DEPTH;
+               r600_context_bo_flush(ctx, S_0085F0_DB_ACTION_ENA(1), 0, db);
+       }
+
+       ctx->flags &= ~R600_CONTEXT_DST_CACHES_DIRTY;
+}
+
+void r600_context_draw(struct r600_context *ctx, const struct r600_draw *draw)
+{
+       unsigned ndwords = 7;
+       struct r600_block *dirty_block = NULL;
+       struct r600_block *next_block;
+       unsigned rv6xx_surface_base_update = 0;
+
+       if (draw->indices) {
+               ndwords = 11;
+               /* make sure there is enough relocation space before scheduling draw */
+               if (ctx->creloc >= (ctx->nreloc - 1)) {
+                       r600_context_flush(ctx);
+               }
        }
+
+       /* rv6xx surface base update */
+       if ((ctx->radeon->family > CHIP_R600) &&
+           (ctx->radeon->family < CHIP_RV770)) {
+               struct r600_bo *cb[8];
+               struct r600_bo *db;
+
+               db = r600_context_reg_bo(ctx, R_02800C_DB_DEPTH_BASE);
+               cb[0] = r600_context_reg_bo(ctx, R_028040_CB_COLOR0_BASE);
+               cb[1] = r600_context_reg_bo(ctx, R_028044_CB_COLOR1_BASE);
+               cb[2] = r600_context_reg_bo(ctx, R_028048_CB_COLOR2_BASE);
+               cb[3] = r600_context_reg_bo(ctx, R_02804C_CB_COLOR3_BASE);
+               cb[4] = r600_context_reg_bo(ctx, R_028050_CB_COLOR4_BASE);
+               cb[5] = r600_context_reg_bo(ctx, R_028054_CB_COLOR5_BASE);
+               cb[6] = r600_context_reg_bo(ctx, R_028058_CB_COLOR6_BASE);
+               cb[7] = r600_context_reg_bo(ctx, R_02805C_CB_COLOR7_BASE);
+               for (int i = 0; i < 8; i++) {
+                       if (cb[i]) {
+                               rv6xx_surface_base_update |= SURFACE_BASE_UPDATE_COLOR(i);
+                       }
+               }
+               if (db) {
+                       rv6xx_surface_base_update |= SURFACE_BASE_UPDATE_DEPTH;
+               }
+       }
+
        /* XXX also need to update SURFACE_BASE_UPDATE_STRMOUT when we support it */
 
        /* queries need some special values */
@@ -1048,6 +1243,10 @@ void r600_context_draw(struct r600_context *ctx, const struct r600_draw *draw)
                                S_028D10_NOOP_CULL_DISABLE(1));
        }
 
+       /* update the max dword count to make sure we have enough space
+        * reserved for flushing the destination caches */
+       ctx->pm4_ndwords = RADEON_CTX_MAX_PM4 - ctx->num_dest_buffers * 7 - 16;
+
        if ((ctx->pm4_dirty_cdwords + ndwords + ctx->pm4_cdwords) > ctx->pm4_ndwords) {
                /* need to flush */
                r600_context_flush(ctx);
@@ -1057,7 +1256,6 @@ void r600_context_draw(struct r600_context *ctx, const struct r600_draw *draw)
                R600_ERR("context is too big to be scheduled\n");
                return;
        }
-
        /* enough room to copy packet */
        LIST_FOR_EACH_ENTRY_SAFE(dirty_block, next_block, &ctx->dirty, list) {
                r600_context_block_emit_dirty(ctx, dirty_block);
@@ -1086,21 +1284,8 @@ void r600_context_draw(struct r600_context *ctx, const struct r600_draw *draw)
                ctx->pm4[ctx->pm4_cdwords++] = draw->vgt_num_indices;
                ctx->pm4[ctx->pm4_cdwords++] = draw->vgt_draw_initiator;
        }
-       ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE, 0, ctx->predicate_drawing);
-       ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE(EVENT_TYPE_CACHE_FLUSH_AND_INV_EVENT) | EVENT_INDEX(0);
 
-       /* flush color buffer */
-       for (int i = 0; i < 8; i++) {
-               if (cb[i]) {
-                       r600_context_bo_flush(ctx,
-                                       (S_0085F0_CB0_DEST_BASE_ENA(1) << i) |
-                                       S_0085F0_CB_ACTION_ENA(1),
-                                       0, cb[i]);
-               }
-       }
-       if (db) {
-               r600_context_bo_flush(ctx, S_0085F0_DB_ACTION_ENA(1), 0, db);
-       }
+       ctx->flags |= (R600_CONTEXT_DST_CACHES_DIRTY | R600_CONTEXT_DRAW_PENDING);
 
        /* all dirty state have been scheduled in current cs */
        ctx->pm4_dirty_cdwords = 0;
@@ -1120,9 +1305,15 @@ void r600_context_flush(struct r600_context *ctx)
        /* suspend queries */
        r600_context_queries_suspend(ctx);
 
-       /* emit fence */
+       if (ctx->radeon->family >= CHIP_CEDAR)
+               evergreen_context_flush_dest_caches(ctx);
+       else
+               r600_context_flush_dest_caches(ctx);
+
+       /* partial flush is needed to avoid lockups on some chips with user fences */
        ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE, 0, 0);
        ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE(EVENT_TYPE_PS_PARTIAL_FLUSH) | EVENT_INDEX(4);
+       /* emit fence */
        ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE_EOP, 4, 0);
        ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE(EVENT_TYPE_CACHE_FLUSH_AND_INV_TS_EVENT) | EVENT_INDEX(5);
        ctx->pm4[ctx->pm4_cdwords++] = 0;
@@ -1170,6 +1361,7 @@ void r600_context_flush(struct r600_context *ctx)
        ctx->creloc = 0;
        ctx->pm4_dirty_cdwords = 0;
        ctx->pm4_cdwords = 0;
+       ctx->flags = 0;
 
        /* resume queries */
        r600_context_queries_resume(ctx);
@@ -1184,10 +1376,34 @@ void r600_context_flush(struct r600_context *ctx)
                        }
                        ctx->pm4_dirty_cdwords += ctx->blocks[i]->pm4_ndwords + ctx->blocks[i]->pm4_flush_ndwords;
                        ctx->blocks[i]->status |= R600_BLOCK_STATUS_DIRTY;
+                       ctx->blocks[i]->nreg_dirty = ctx->blocks[i]->nreg;
                }
        }
 }
 
+void r600_context_emit_fence(struct r600_context *ctx, struct r600_bo *fence_bo, unsigned offset, unsigned value)
+{
+       unsigned ndwords = 10;
+
+       if (((ctx->pm4_dirty_cdwords + ndwords + ctx->pm4_cdwords) > ctx->pm4_ndwords) ||
+           (ctx->creloc >= (ctx->nreloc - 1))) {
+               /* need to flush */
+               r600_context_flush(ctx);
+       }
+
+       ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE, 0, 0);
+       ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE(EVENT_TYPE_PS_PARTIAL_FLUSH) | EVENT_INDEX(4);
+       ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE_EOP, 4, 0);
+       ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE(EVENT_TYPE_CACHE_FLUSH_AND_INV_TS_EVENT) | EVENT_INDEX(5);
+       ctx->pm4[ctx->pm4_cdwords++] = offset << 2;             /* ADDRESS_LO */
+       ctx->pm4[ctx->pm4_cdwords++] = (1 << 29) | (0 << 24);   /* DATA_SEL | INT_EN | ADDRESS_HI */
+       ctx->pm4[ctx->pm4_cdwords++] = value;                   /* DATA_LO */
+       ctx->pm4[ctx->pm4_cdwords++] = 0;                       /* DATA_HI */
+       ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_NOP, 0, 0);
+       ctx->pm4[ctx->pm4_cdwords++] = 0;
+       r600_context_bo_reloc(ctx, &ctx->pm4[ctx->pm4_cdwords - 1], fence_bo);
+}
+
 void r600_context_dump_bof(struct r600_context *ctx, const char *file)
 {
        bof_t *bcs, *blob, *array, *bo, *size, *handle, *device_id, *root;
index 41c5ee02c389f8956a398b9a888ed05e6620662c..ed0f3e584d3befdf1fbc48c2bdfb3b2735a3e7c3 100644 (file)
 #include <assert.h>
 #include <util/u_double_list.h>
 #include <util/u_inlines.h>
+#include "util/u_hash_table.h"
 #include <os/os_thread.h>
 #include "r600.h"
 
+#define PKT_COUNT_C                     0xC000FFFF
+#define PKT_COUNT_S(x)                  (((x) & 0x3FFF) << 16)
+
 struct r600_bomgr;
 struct r600_bo;
 
@@ -52,13 +56,20 @@ struct radeon {
        unsigned                        clock_crystal_freq;
        unsigned                        num_backends;
        unsigned                        minor_version;
+
+        /* List of buffer handles and its mutex. */
+       struct util_hash_table          *bo_handles;
+       pipe_mutex bo_handles_mutex;
 };
 
+#define REG_FLAG_NEED_BO 1
+#define REG_FLAG_DIRTY_ALWAYS 2
+
 struct r600_reg {
        unsigned                        opcode;
        unsigned                        offset_base;
        unsigned                        offset;
-       unsigned                        need_bo;
+       unsigned                        flags;
        unsigned                        flush_flags;
        unsigned                        flush_mask;
 };
@@ -77,6 +88,7 @@ struct radeon_bo {
        struct r600_reloc               *reloc;
        unsigned                        reloc_id;
        unsigned                        last_flush;
+       unsigned                        name;
 };
 
 struct r600_bo {
@@ -142,7 +154,14 @@ void r600_context_bo_flush(struct r600_context *ctx, unsigned flush_flags,
                                unsigned flush_mask, struct r600_bo *rbo);
 struct r600_bo *r600_context_reg_bo(struct r600_context *ctx, unsigned offset);
 int r600_context_add_block(struct r600_context *ctx, const struct r600_reg *reg, unsigned nreg);
-
+void r600_context_pipe_state_set_resource(struct r600_context *ctx, struct r600_pipe_state *state, unsigned offset);
+void r600_context_block_emit_dirty(struct r600_context *ctx, struct r600_block *block);
+void r600_context_dirty_block(struct r600_context *ctx, struct r600_block *block,
+                             int dirty, int index);
+
+void r600_context_reg(struct r600_context *ctx,
+                     unsigned offset, unsigned value,
+                     unsigned mask);
 /*
  * r600_bo.c
  */
@@ -167,50 +186,6 @@ struct r600_bo *r600_bomgr_bo_create(struct r600_bomgr *mgr,
 #define CTX_RANGE_ID(ctx, offset) (((offset) >> (ctx)->hash_shift) & 255)
 #define CTX_BLOCK_ID(ctx, offset) ((offset) & ((1 << (ctx)->hash_shift) - 1))
 
-static void inline r600_context_reg(struct r600_context *ctx,
-                                       unsigned offset, unsigned value,
-                                       unsigned mask)
-{
-       struct r600_range *range;
-       struct r600_block *block;
-       unsigned id;
-
-       range = &ctx->range[CTX_RANGE_ID(ctx, offset)];
-       block = range->blocks[CTX_BLOCK_ID(ctx, offset)];
-       id = (offset - block->start_offset) >> 2;
-       block->reg[id] &= ~mask;
-       block->reg[id] |= value;
-       if (!(block->status & R600_BLOCK_STATUS_DIRTY)) {
-               ctx->pm4_dirty_cdwords += block->pm4_ndwords;
-               block->status |= R600_BLOCK_STATUS_ENABLED;
-               block->status |= R600_BLOCK_STATUS_DIRTY;
-               LIST_ADDTAIL(&block->list,&ctx->dirty);
-       }
-}
-
-static inline void r600_context_block_emit_dirty(struct r600_context *ctx, struct r600_block *block)
-{
-       int id;
-
-       for (int j = 0; j < block->nreg; j++) {
-               if (block->pm4_bo_index[j]) {
-                       /* find relocation */
-                       id = block->pm4_bo_index[j];
-                       r600_context_bo_reloc(ctx,
-                                       &block->pm4[block->reloc[id].bo_pm4_index],
-                                       block->reloc[id].bo);
-                       r600_context_bo_flush(ctx,
-                                       block->reloc[id].flush_flags,
-                                       block->reloc[id].flush_mask,
-                                       block->reloc[id].bo);
-               }
-       }
-       memcpy(&ctx->pm4[ctx->pm4_cdwords], block->pm4, block->pm4_ndwords * 4);
-       ctx->pm4_cdwords += block->pm4_ndwords;
-       block->status ^= R600_BLOCK_STATUS_DIRTY;
-       LIST_DELINIT(&block->list);
-}
-
 /*
  * radeon_bo.c
  */
index 3643ddbcb93ebbd1af40928885fcf3a922bf1039..13b1d50b6e51e57178c883d4b5fdb58f72de5163 100644 (file)
@@ -74,6 +74,16 @@ struct radeon_bo *radeon_bo(struct radeon *radeon, unsigned handle,
        struct radeon_bo *bo;
        int r;
 
+       if (handle) {
+               pipe_mutex_lock(radeon->bo_handles_mutex);
+               bo = util_hash_table_get(radeon->bo_handles,
+                                        (void *)(uintptr_t)handle);
+               if (bo) {
+                       struct radeon_bo *b = NULL;
+                       radeon_bo_reference(radeon, &b, bo);
+                       goto done;
+               }
+       }
        bo = calloc(1, sizeof(*bo));
        if (bo == NULL) {
                return NULL;
@@ -94,6 +104,7 @@ struct radeon_bo *radeon_bo(struct radeon *radeon, unsigned handle,
                        free(bo);
                        return NULL;
                }
+               bo->name = handle;
                bo->handle = open_arg.handle;
                bo->size = open_arg.size;
                bo->shared = TRUE;
@@ -121,6 +132,13 @@ struct radeon_bo *radeon_bo(struct radeon *radeon, unsigned handle,
                radeon_bo_reference(radeon, &bo, NULL);
                return bo;
        }
+
+       if (handle)
+               util_hash_table_set(radeon->bo_handles, (void *)(uintptr_t)handle, bo);
+done:
+       if (handle)
+               pipe_mutex_unlock(radeon->bo_handles_mutex);
+
        return bo;
 }
 
@@ -128,6 +146,12 @@ static void radeon_bo_destroy(struct radeon *radeon, struct radeon_bo *bo)
 {
        struct drm_gem_close args;
 
+       if (bo->name) {
+               pipe_mutex_lock(radeon->bo_handles_mutex);
+               util_hash_table_remove(radeon->bo_handles,
+                                      (void *)(uintptr_t)bo->name);
+               pipe_mutex_unlock(radeon->bo_handles_mutex);
+       }
        LIST_DEL(&bo->fencedlist);
        radeon_bo_fixed_unmap(radeon, bo);
        memset(&args, 0, sizeof(args));
index f19956931de3b8152c6aaa3c31706bf4813c2cde..146d6bd310075ae77d4d0ec4d78fa621f74cf102 100644 (file)
@@ -445,6 +445,8 @@ static const struct pci_id radeon_pci_id[] = {
        {0x1002, 0x9803, CHIP_PALM},
        {0x1002, 0x9804, CHIP_PALM},
        {0x1002, 0x9805, CHIP_PALM},
+       {0x1002, 0x9806, CHIP_PALM},
+       {0x1002, 0x9807, CHIP_PALM},
        {0x1002, 0x6720, CHIP_BARTS},
        {0x1002, 0x6721, CHIP_BARTS},
        {0x1002, 0x6722, CHIP_BARTS},
index e63ae6f500602deb04fa91fd7211842d0fdd14d1..d44b7c14250f35f8125c30b76590a73e8333d9c6 100644 (file)
@@ -7,10 +7,9 @@ LIBNAME = radeonwinsys
 C_SOURCES = \
        radeon_drm_bo.c \
        radeon_drm_cs.c \
-       radeon_drm_common.c
+       radeon_drm_winsys.c
 
-LIBRARY_INCLUDES = -I$(TOP)/src/gallium/drivers/r300 \
-                  $(shell pkg-config libdrm --cflags-only-I)
+LIBRARY_INCLUDES = $(shell pkg-config libdrm --cflags-only-I)
 
 include ../../../Makefile.template
 
index b16e03556d39211dea9a65e53e24cbc2dc89b947..39a8c711b84bc11450b9995714839d336c714854 100644 (file)
@@ -5,17 +5,15 @@ env = env.Clone()
 radeon_sources = [
     'radeon_drm_bo.c',
     'radeon_drm_cs.c',
-    'radeon_drm_common.c',
+    'radeon_drm_winsys.c',
 ]
 
 try:
-    env.ParseConfig('pkg-config --cflags libdrm_radeon')
+    env.ParseConfig('pkg-config --cflags libdrm')
 except:
-    print 'warning: not building r300g'
+    print 'warning: not building Gallium Radeon'
     Return()
 
-env.Append(CPPPATH = '#/src/gallium/drivers/r300')
-
 radeonwinsys = env.ConvenienceLibrary(
     target ='radeonwinsys',
     source = radeon_sources,
index 9eb833454df1308f0aee0aac73af292806bdda7d..b6f12727e81f0587d0b430b86b63a5a1bbbde9fb 100644 (file)
@@ -87,31 +87,7 @@ static struct radeon_bo *get_radeon_bo(struct pb_buffer *_buf)
     return bo;
 }
 
-void radeon_bo_unref(struct radeon_bo *bo)
-{
-    struct drm_gem_close args = {};
-
-    if (!p_atomic_dec_zero(&bo->ref_count))
-        return;
-
-    if (bo->name) {
-        pipe_mutex_lock(bo->mgr->bo_handles_mutex);
-        util_hash_table_remove(bo->mgr->bo_handles,
-                              (void*)(uintptr_t)bo->name);
-        pipe_mutex_unlock(bo->mgr->bo_handles_mutex);
-    }
-
-    if (bo->ptr)
-        munmap(bo->ptr, bo->size);
-
-    /* Close object. */
-    args.handle = bo->handle;
-    drmIoctl(bo->rws->fd, DRM_IOCTL_GEM_CLOSE, &args);
-    pipe_mutex_destroy(bo->map_mutex);
-    FREE(bo);
-}
-
-static void radeon_bo_wait(struct r300_winsys_bo *_buf)
+static void radeon_bo_wait(struct pb_buffer *_buf)
 {
     struct radeon_bo *bo = get_radeon_bo(pb_buffer(_buf));
     struct drm_radeon_gem_wait_idle args = {};
@@ -123,33 +99,58 @@ static void radeon_bo_wait(struct r300_winsys_bo *_buf)
     args.handle = bo->handle;
     while (drmCommandWriteRead(bo->rws->fd, DRM_RADEON_GEM_WAIT_IDLE,
                                &args, sizeof(args)) == -EBUSY);
+
+    bo->busy_for_write = FALSE;
 }
 
-static boolean radeon_bo_is_busy(struct r300_winsys_bo *_buf)
+static boolean radeon_bo_is_busy(struct pb_buffer *_buf)
 {
     struct radeon_bo *bo = get_radeon_bo(pb_buffer(_buf));
     struct drm_radeon_gem_busy args = {};
+    boolean busy;
 
     if (p_atomic_read(&bo->num_active_ioctls)) {
         return TRUE;
     }
 
     args.handle = bo->handle;
-    return drmCommandWriteRead(bo->rws->fd, DRM_RADEON_GEM_BUSY,
+    busy = drmCommandWriteRead(bo->rws->fd, DRM_RADEON_GEM_BUSY,
                                &args, sizeof(args)) != 0;
+
+    if (!busy)
+        bo->busy_for_write = FALSE;
+    return busy;
 }
 
 static void radeon_bo_destroy(struct pb_buffer *_buf)
 {
     struct radeon_bo *bo = radeon_bo(_buf);
+    struct drm_gem_close args = {};
 
-    radeon_bo_unref(bo);
+    if (bo->name) {
+        pipe_mutex_lock(bo->mgr->bo_handles_mutex);
+        util_hash_table_remove(bo->mgr->bo_handles,
+                              (void*)(uintptr_t)bo->name);
+        pipe_mutex_unlock(bo->mgr->bo_handles_mutex);
+    }
+
+    if (bo->ptr)
+        munmap(bo->ptr, bo->size);
+
+    /* Close object. */
+    args.handle = bo->handle;
+    drmIoctl(bo->rws->fd, DRM_IOCTL_GEM_CLOSE, &args);
+    pipe_mutex_destroy(bo->map_mutex);
+    FREE(bo);
 }
 
 static unsigned get_pb_usage_from_transfer_flags(enum pipe_transfer_usage usage)
 {
     unsigned res = 0;
 
+    if (usage & PIPE_TRANSFER_WRITE)
+        res |= PB_USAGE_CPU_WRITE;
+
     if (usage & PIPE_TRANSFER_DONTBLOCK)
         res |= PB_USAGE_DONTBLOCK;
 
@@ -172,23 +173,44 @@ static void *radeon_bo_map_internal(struct pb_buffer *_buf,
         /* DONTBLOCK doesn't make sense with UNSYNCHRONIZED. */
         if (flags & PB_USAGE_DONTBLOCK) {
             if (radeon_bo_is_referenced_by_cs(cs, bo)) {
-                cs->flush_cs(cs->flush_data, R300_FLUSH_ASYNC);
+                cs->flush_cs(cs->flush_data, RADEON_FLUSH_ASYNC);
                 return NULL;
             }
 
-            if (radeon_bo_is_busy((struct r300_winsys_bo*)bo)) {
+            if (radeon_bo_is_busy((struct pb_buffer*)bo)) {
                 return NULL;
             }
         } else {
-            if (radeon_bo_is_referenced_by_cs(cs, bo)) {
-                cs->flush_cs(cs->flush_data, 0);
+            if (!(flags & PB_USAGE_CPU_WRITE)) {
+                /* Mapping for read.
+                 *
+                 * Since we are mapping for read, we don't need to wait
+                 * if the GPU is using the buffer for read too
+                 * (neither one is changing it).
+                 *
+                 * Only check whether the buffer is being used for write. */
+                if (radeon_bo_is_referenced_by_cs_for_write(cs, bo)) {
+                    cs->flush_cs(cs->flush_data, 0);
+                    radeon_bo_wait((struct pb_buffer*)bo);
+                } else if (bo->busy_for_write) {
+                    /* Update the busy_for_write field (done by radeon_bo_is_busy)
+                     * and wait if needed. */
+                    if (radeon_bo_is_busy((struct pb_buffer*)bo)) {
+                        radeon_bo_wait((struct pb_buffer*)bo);
+                    }
+                }
             } else {
-                /* Try to avoid busy-waiting in radeon_bo_wait. */
-                if (p_atomic_read(&bo->num_active_ioctls))
-                    radeon_drm_cs_sync_flush(cs);
+                /* Mapping for write. */
+                if (radeon_bo_is_referenced_by_cs(cs, bo)) {
+                    cs->flush_cs(cs->flush_data, 0);
+                } else {
+                    /* Try to avoid busy-waiting in radeon_bo_wait. */
+                    if (p_atomic_read(&bo->num_active_ioctls))
+                        radeon_drm_cs_sync_flush(cs);
+                }
+
+                radeon_bo_wait((struct pb_buffer*)bo);
             }
-
-            radeon_bo_wait((struct r300_winsys_bo*)bo);
         }
     }
 
@@ -198,6 +220,11 @@ static void *radeon_bo_map_internal(struct pb_buffer *_buf,
 
     /* Map the buffer. */
     pipe_mutex_lock(bo->map_mutex);
+    /* Return the pointer if it's already mapped (in case of a race). */
+    if (bo->ptr) {
+        pipe_mutex_unlock(bo->map_mutex);
+        return bo->ptr;
+    }
     args.handle = bo->handle;
     args.offset = 0;
     args.size = (uint64_t)bo->size;
@@ -278,10 +305,10 @@ static struct pb_buffer *radeon_bomgr_create_bo(struct pb_manager *_mgr,
 
     if (drmCommandWriteRead(rws->fd, DRM_RADEON_GEM_CREATE,
                             &args, sizeof(args))) {
-        fprintf(stderr, "Failed to allocate :\n");
-        fprintf(stderr, "   size      : %d bytes\n", size);
-        fprintf(stderr, "   alignment : %d bytes\n", desc->alignment);
-        fprintf(stderr, "   domains   : %d\n", args.initial_domain);
+        fprintf(stderr, "radeon: Failed to allocate a buffer:\n");
+        fprintf(stderr, "radeon:    size      : %d bytes\n", size);
+        fprintf(stderr, "radeon:    alignment : %d bytes\n", desc->alignment);
+        fprintf(stderr, "radeon:    domains   : %d\n", args.initial_domain);
         return NULL;
     }
 
@@ -300,7 +327,6 @@ static struct pb_buffer *radeon_bomgr_create_bo(struct pb_manager *_mgr,
     bo->size = size;
     pipe_mutex_init(bo->map_mutex);
 
-    radeon_bo_ref(bo);
     return &bo->base;
 }
 
@@ -319,7 +345,7 @@ static boolean radeon_bomgr_is_buffer_busy(struct pb_manager *_mgr,
        return TRUE;
    }
 
-   if (radeon_bo_is_busy((struct r300_winsys_bo*)bo)) {
+   if (radeon_bo_is_busy((struct pb_buffer*)bo)) {
        return TRUE;
    }
 
@@ -365,8 +391,8 @@ struct pb_manager *radeon_bomgr_create(struct radeon_drm_winsys *rws)
     return &mgr->base;
 }
 
-static void *radeon_bo_map(struct r300_winsys_bo *buf,
-                           struct r300_winsys_cs *cs,
+static void *radeon_bo_map(struct pb_buffer *buf,
+                           struct radeon_winsys_cs *cs,
                            enum pipe_transfer_usage usage)
 {
     struct pb_buffer *_buf = pb_buffer(buf);
@@ -374,9 +400,9 @@ static void *radeon_bo_map(struct r300_winsys_bo *buf,
     return pb_map(_buf, get_pb_usage_from_transfer_flags(usage), cs);
 }
 
-static void radeon_bo_get_tiling(struct r300_winsys_bo *_buf,
-                                 enum r300_buffer_tiling *microtiled,
-                                 enum r300_buffer_tiling *macrotiled)
+static void radeon_bo_get_tiling(struct pb_buffer *_buf,
+                                 enum radeon_bo_layout *microtiled,
+                                 enum radeon_bo_layout *macrotiled)
 {
     struct radeon_bo *bo = get_radeon_bo(pb_buffer(_buf));
     struct drm_radeon_gem_set_tiling args = {};
@@ -388,19 +414,19 @@ static void radeon_bo_get_tiling(struct r300_winsys_bo *_buf,
                         &args,
                         sizeof(args));
 
-    *microtiled = R300_BUFFER_LINEAR;
-    *macrotiled = R300_BUFFER_LINEAR;
+    *microtiled = RADEON_LAYOUT_LINEAR;
+    *macrotiled = RADEON_LAYOUT_LINEAR;
     if (args.tiling_flags & RADEON_BO_FLAGS_MICRO_TILE)
-       *microtiled = R300_BUFFER_TILED;
+       *microtiled = RADEON_LAYOUT_TILED;
 
     if (args.tiling_flags & RADEON_BO_FLAGS_MACRO_TILE)
-       *macrotiled = R300_BUFFER_TILED;
+       *macrotiled = RADEON_LAYOUT_TILED;
 }
 
-static void radeon_bo_set_tiling(struct r300_winsys_bo *_buf,
-                                 struct r300_winsys_cs *rcs,
-                                 enum r300_buffer_tiling microtiled,
-                                 enum r300_buffer_tiling macrotiled,
+static void radeon_bo_set_tiling(struct pb_buffer *_buf,
+                                 struct radeon_winsys_cs *rcs,
+                                 enum radeon_bo_layout microtiled,
+                                 enum radeon_bo_layout macrotiled,
                                  uint32_t pitch)
 {
     struct radeon_bo *bo = get_radeon_bo(pb_buffer(_buf));
@@ -417,12 +443,12 @@ static void radeon_bo_set_tiling(struct r300_winsys_bo *_buf,
         sched_yield();
     }
 
-    if (microtiled == R300_BUFFER_TILED)
+    if (microtiled == RADEON_LAYOUT_TILED)
         args.tiling_flags |= RADEON_BO_FLAGS_MICRO_TILE;
-    else if (microtiled == R300_BUFFER_SQUARETILED)
+    else if (microtiled == RADEON_LAYOUT_SQUARETILED)
         args.tiling_flags |= RADEON_BO_FLAGS_MICRO_TILE_SQUARE;
 
-    if (macrotiled == R300_BUFFER_TILED)
+    if (macrotiled == RADEON_LAYOUT_TILED)
         args.tiling_flags |= RADEON_BO_FLAGS_MACRO_TILE;
 
     args.handle = bo->handle;
@@ -434,38 +460,35 @@ static void radeon_bo_set_tiling(struct r300_winsys_bo *_buf,
                         sizeof(args));
 }
 
-static struct r300_winsys_cs_handle *radeon_drm_get_cs_handle(
-        struct r300_winsys_bo *_buf)
+static struct radeon_winsys_cs_handle *radeon_drm_get_cs_handle(
+        struct pb_buffer *_buf)
 {
     /* return radeon_bo. */
-    return (struct r300_winsys_cs_handle*)
+    return (struct radeon_winsys_cs_handle*)
             get_radeon_bo(pb_buffer(_buf));
 }
 
 static unsigned get_pb_usage_from_create_flags(unsigned bind, unsigned usage,
-                                               enum r300_buffer_domain domain)
+                                               enum radeon_bo_domain domain)
 {
     unsigned res = 0;
 
-    if (bind & (PIPE_BIND_VERTEX_BUFFER | PIPE_BIND_INDEX_BUFFER))
-        res |= RADEON_PB_USAGE_CACHE;
-
-    if (domain & R300_DOMAIN_GTT)
+    if (domain & RADEON_DOMAIN_GTT)
         res |= RADEON_PB_USAGE_DOMAIN_GTT;
 
-    if (domain & R300_DOMAIN_VRAM)
+    if (domain & RADEON_DOMAIN_VRAM)
         res |= RADEON_PB_USAGE_DOMAIN_VRAM;
 
     return res;
 }
 
-static struct r300_winsys_bo *
-radeon_winsys_bo_create(struct r300_winsys_screen *rws,
+static struct pb_buffer *
+radeon_winsys_bo_create(struct radeon_winsys *rws,
                         unsigned size,
                         unsigned alignment,
                         unsigned bind,
                         unsigned usage,
-                        enum r300_buffer_domain domain)
+                        enum radeon_bo_domain domain)
 {
     struct radeon_drm_winsys *ws = radeon_drm_winsys(rws);
     struct pb_desc desc;
@@ -486,10 +509,10 @@ radeon_winsys_bo_create(struct r300_winsys_screen *rws,
     if (!buffer)
        return NULL;
 
-    return (struct r300_winsys_bo*)buffer;
+    return (struct pb_buffer*)buffer;
 }
 
-static struct r300_winsys_bo *radeon_winsys_bo_from_handle(struct r300_winsys_screen *rws,
+static struct pb_buffer *radeon_winsys_bo_from_handle(struct radeon_winsys *rws,
                                                            struct winsys_handle *whandle,
                                                            unsigned *stride,
                                                            unsigned *size)
@@ -531,7 +554,6 @@ static struct r300_winsys_bo *radeon_winsys_bo_from_handle(struct r300_winsys_sc
     bo->handle = open_arg.handle;
     bo->size = open_arg.size;
     bo->name = whandle->handle;
-    radeon_bo_ref(bo);
 
     /* Initialize it. */
     pipe_reference_init(&bo->base.base.reference, 1);
@@ -553,14 +575,14 @@ done:
     if (size)
         *size = bo->base.base.size;
 
-    return (struct r300_winsys_bo*)bo;
+    return (struct pb_buffer*)bo;
 
 fail:
     pipe_mutex_unlock(mgr->bo_handles_mutex);
     return NULL;
 }
 
-static boolean radeon_winsys_bo_get_handle(struct r300_winsys_bo *buffer,
+static boolean radeon_winsys_bo_get_handle(struct pb_buffer *buffer,
                                            unsigned stride,
                                            struct winsys_handle *whandle)
 {
index a26866b7e75b87dbf36d48f622c0ff34b5cccefa..b94881bc4ce0fa516be2c33cee9fe0b7469bacc6 100644 (file)
  *      Jérôme Glisse <glisse@freedesktop.org>
  *      Marek Olšák <maraeo@gmail.com>
  */
-#ifndef RADEON_DRM_BUFFER_H
-#define RADEON_DRM_BUFFER_H
+#ifndef RADEON_DRM_BO_H
+#define RADEON_DRM_BO_H
 
-#include "radeon_winsys.h"
+#include "radeon_drm_winsys.h"
 #include "pipebuffer/pb_bufmgr.h"
 #include "os/os_thread.h"
 
-#define RADEON_PB_USAGE_CACHE       (1 << 28)
 #define RADEON_PB_USAGE_DOMAIN_GTT  (1 << 29)
 #define RADEON_PB_USAGE_DOMAIN_VRAM (1 << 30)
 
@@ -54,8 +53,6 @@ struct radeon_bo {
     uint32_t handle;
     uint32_t name;
 
-    int ref_count;
-
     /* how many command streams is this bo referenced in? */
     int num_cs_references;
 
@@ -63,6 +60,13 @@ struct radeon_bo {
      * thread, is this bo referenced in? */
     int num_active_ioctls;
 
+    /* Whether the buffer has been relocated for write and is busy since then.
+     * This field is updated in:
+     * - radeon_drm_cs_flush (to TRUE if it's relocated for write)
+     * - radeon_bo_is_busy (to FALSE if it's not busy)
+     * - radeon_bo_wait (to FALSE) */
+    boolean busy_for_write;
+
     boolean flinked;
     uint32_t flink;
 };
@@ -70,16 +74,14 @@ struct radeon_bo {
 struct pb_manager *radeon_bomgr_create(struct radeon_drm_winsys *rws);
 void radeon_bomgr_init_functions(struct radeon_drm_winsys *ws);
 
-void radeon_bo_unref(struct radeon_bo *buf);
-
-
-static INLINE void radeon_bo_ref(struct radeon_bo *bo)
+static INLINE
+void radeon_bo_reference(struct radeon_bo **dst, struct radeon_bo *src)
 {
-    p_atomic_inc(&bo->ref_count);
+    pb_reference((struct pb_buffer**)dst, (struct pb_buffer*)src);
 }
 
 static INLINE struct pb_buffer *
-pb_buffer(struct r300_winsys_bo *buffer)
+pb_buffer(struct pb_buffer *buffer)
 {
     return (struct pb_buffer *)buffer;
 }
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_common.c b/src/gallium/winsys/radeon/drm/radeon_drm_common.c
deleted file mode 100644 (file)
index 72c2ff1..0000000
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Copyright © 2009 Corbin Simpson
- * Copyright © 2011 Marek Olšák <maraeo@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, 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 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, AUTHORS
- * 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.
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- */
-/*
- * Authors:
- *      Corbin Simpson <MostAwesomeDude@gmail.com>
- *      Joakim Sindholt <opensource@zhasha.com>
- *      Marek Olšák <maraeo@gmail.com>
- */
-
-#include "radeon_winsys.h"
-#include "radeon_drm_bo.h"
-#include "radeon_drm_cs.h"
-#include "radeon_drm_public.h"
-
-#include "pipebuffer/pb_bufmgr.h"
-#include "util/u_memory.h"
-
-#include <xf86drm.h>
-#include <stdio.h>
-
-#ifndef RADEON_INFO_WANT_HYPERZ
-#define RADEON_INFO_WANT_HYPERZ 7
-#endif
-#ifndef RADEON_INFO_WANT_CMASK
-#define RADEON_INFO_WANT_CMASK 8
-#endif
-
-/* Enable/disable feature access. Return TRUE on success. */
-static boolean radeon_set_fd_access(int fd, unsigned request, boolean enable)
-{
-    struct drm_radeon_info info = {0};
-    unsigned value = enable ? 1 : 0;
-
-    info.value = (unsigned long)&value;
-    info.request = request;
-
-    if (drmCommandWriteRead(fd, DRM_RADEON_INFO, &info, sizeof(info)) != 0)
-        return FALSE;
-
-    if (enable && !value)
-        return FALSE;
-
-    return TRUE;
-}
-
-/* Helper function to do the ioctls needed for setup and init. */
-static void do_ioctls(struct radeon_drm_winsys *winsys)
-{
-    struct drm_radeon_gem_info gem_info = {0};
-    struct drm_radeon_info info = {0};
-    int target = 0;
-    int retval;
-    drmVersionPtr version;
-
-    info.value = (unsigned long)&target;
-
-    /* We do things in a specific order here.
-     *
-     * DRM version first. We need to be sure we're running on a KMS chipset.
-     * This is also for some features.
-     *
-     * Then, the PCI ID. This is essential and should return usable numbers
-     * for all Radeons. If this fails, we probably got handed an FD for some
-     * non-Radeon card.
-     *
-     * The GB and Z pipe requests should always succeed, but they might not
-     * return sensical values for all chipsets, but that's alright because
-     * the pipe drivers already know that.
-     *
-     * The GEM info is actually bogus on the kernel side, as well as our side
-     * (see radeon_gem_info_ioctl in radeon_gem.c) but that's alright because
-     * we don't actually use the info for anything yet. */
-
-    version = drmGetVersion(winsys->fd);
-    if (version->version_major != 2 ||
-        version->version_minor < 3) {
-        fprintf(stderr, "%s: DRM version is %d.%d.%d but this driver is "
-                "only compatible with 2.3.x (kernel 2.6.34) and later.\n",
-                __FUNCTION__,
-                version->version_major,
-                version->version_minor,
-                version->version_patchlevel);
-        drmFreeVersion(version);
-        exit(1);
-    }
-
-    winsys->drm_major = version->version_major;
-    winsys->drm_minor = version->version_minor;
-    winsys->drm_patchlevel = version->version_patchlevel;
-
-    info.request = RADEON_INFO_DEVICE_ID;
-    retval = drmCommandWriteRead(winsys->fd, DRM_RADEON_INFO, &info, sizeof(info));
-    if (retval) {
-        fprintf(stderr, "%s: Failed to get PCI ID, "
-                "error number %d\n", __FUNCTION__, retval);
-        exit(1);
-    }
-    winsys->pci_id = target;
-
-    info.request = RADEON_INFO_NUM_GB_PIPES;
-    retval = drmCommandWriteRead(winsys->fd, DRM_RADEON_INFO, &info, sizeof(info));
-    if (retval) {
-        fprintf(stderr, "%s: Failed to get GB pipe count, "
-                "error number %d\n", __FUNCTION__, retval);
-        exit(1);
-    }
-    winsys->gb_pipes = target;
-
-    info.request = RADEON_INFO_NUM_Z_PIPES;
-    retval = drmCommandWriteRead(winsys->fd, DRM_RADEON_INFO, &info, sizeof(info));
-    if (retval) {
-        fprintf(stderr, "%s: Failed to get Z pipe count, "
-                "error number %d\n", __FUNCTION__, retval);
-        exit(1);
-    }
-    winsys->z_pipes = target;
-
-    if (debug_get_bool_option("RADEON_HYPERZ", FALSE)) {
-        winsys->hyperz = radeon_set_fd_access(winsys->fd,
-                                              RADEON_INFO_WANT_HYPERZ, TRUE);
-    }
-
-    if (debug_get_bool_option("RADEON_CMASK", FALSE)) {
-        winsys->aacompress = radeon_set_fd_access(winsys->fd,
-                                                  RADEON_INFO_WANT_CMASK, TRUE);
-    }
-
-    retval = drmCommandWriteRead(winsys->fd, DRM_RADEON_GEM_INFO,
-            &gem_info, sizeof(gem_info));
-    if (retval) {
-        fprintf(stderr, "%s: Failed to get MM info, error number %d\n",
-                __FUNCTION__, retval);
-        exit(1);
-    }
-    winsys->gart_size = gem_info.gart_size;
-    winsys->vram_size = gem_info.vram_size;
-
-    drmFreeVersion(version);
-
-    winsys->num_cpus = sysconf(_SC_NPROCESSORS_ONLN);
-}
-
-static void radeon_winsys_destroy(struct r300_winsys_screen *rws)
-{
-    struct radeon_drm_winsys *ws = (struct radeon_drm_winsys*)rws;
-
-    ws->cman->destroy(ws->cman);
-    ws->kman->destroy(ws->kman);
-    FREE(rws);
-}
-
-static uint32_t radeon_get_value(struct r300_winsys_screen *rws,
-                                 enum r300_value_id id)
-{
-    struct radeon_drm_winsys *ws = (struct radeon_drm_winsys *)rws;
-
-    switch(id) {
-    case R300_VID_PCI_ID:
-       return ws->pci_id;
-    case R300_VID_GB_PIPES:
-       return ws->gb_pipes;
-    case R300_VID_Z_PIPES:
-       return ws->z_pipes;
-    case R300_VID_GART_SIZE:
-        return ws->gart_size;
-    case R300_VID_VRAM_SIZE:
-        return ws->vram_size;
-    case R300_VID_DRM_MAJOR:
-        return ws->drm_major;
-    case R300_VID_DRM_MINOR:
-        return ws->drm_minor;
-    case R300_VID_DRM_PATCHLEVEL:
-        return ws->drm_patchlevel;
-    case R300_VID_DRM_2_6_0:
-        return ws->drm_major*100 + ws->drm_minor >= 206;
-    case R300_VID_DRM_2_8_0:
-        return ws->drm_major*100 + ws->drm_minor >= 208;
-    case R300_CAN_HYPERZ:
-        return ws->hyperz;
-    case R300_CAN_AACOMPRESS:
-        return ws->aacompress;
-    }
-    return 0;
-}
-
-struct r300_winsys_screen *r300_drm_winsys_screen_create(int fd)
-{
-    struct radeon_drm_winsys *ws = CALLOC_STRUCT(radeon_drm_winsys);
-    if (!ws) {
-        return NULL;
-    }
-
-    ws->fd = fd;
-    do_ioctls(ws);
-
-    if (!is_r3xx(ws->pci_id)) {
-        goto fail;
-    }
-
-    /* Create managers. */
-    ws->kman = radeon_bomgr_create(ws);
-    if (!ws->kman)
-       goto fail;
-    ws->cman = pb_cache_manager_create(ws->kman, 1000000);
-    if (!ws->cman)
-       goto fail;
-
-    /* Set functions. */
-    ws->base.destroy = radeon_winsys_destroy;
-    ws->base.get_value = radeon_get_value;
-
-    radeon_bomgr_init_functions(ws);
-    radeon_drm_cs_init_functions(ws);
-
-    return &ws->base;
-
-fail:
-    if (ws->cman)
-       ws->cman->destroy(ws->cman);
-    if (ws->kman)
-       ws->kman->destroy(ws->kman);
-    FREE(ws);
-    return NULL;
-}
index 951791a17270ee3fd890d05fdab6c295394812c7..0139de1973afc3eedc49f48af56665ccb54a84e3 100644 (file)
@@ -36,7 +36,7 @@
 
 /*
     This file replaces libdrm's radeon_cs_gem with our own implemention.
-    It's optimized specifically for r300g, but r600g could use it as well.
+    It's optimized specifically for Radeon DRM.
     Reloc writes and space checking are faster and simpler than their
     counterparts in libdrm (the time complexity of all the functions
     is O(1) in nearly all scenarios, thanks to hashing).
@@ -111,8 +111,7 @@ static void radeon_cs_context_cleanup(struct radeon_cs_context *csc)
 
     for (i = 0; i < csc->crelocs; i++) {
         p_atomic_dec(&csc->relocs_bo[i]->num_cs_references);
-        radeon_bo_unref(csc->relocs_bo[i]);
-        csc->relocs_bo[i] = NULL;
+        radeon_bo_reference(&csc->relocs_bo[i], NULL);
     }
 
     csc->crelocs = 0;
@@ -130,7 +129,7 @@ static void radeon_destroy_cs_context(struct radeon_cs_context *csc)
     FREE(csc->relocs);
 }
 
-static struct r300_winsys_cs *radeon_drm_cs_create(struct r300_winsys_screen *rws)
+static struct radeon_winsys_cs *radeon_drm_cs_create(struct radeon_winsys *rws)
 {
     struct radeon_drm_winsys *ws = radeon_drm_winsys(rws);
     struct radeon_drm_cs *cs;
@@ -164,9 +163,9 @@ static struct r300_winsys_cs *radeon_drm_cs_create(struct r300_winsys_screen *rw
 #define OUT_CS(cs, value) (cs)->buf[(cs)->cdw++] = (value)
 
 static INLINE void update_domains(struct drm_radeon_cs_reloc *reloc,
-                                  enum r300_buffer_domain rd,
-                                  enum r300_buffer_domain wd,
-                                  enum r300_buffer_domain *added_domains)
+                                  enum radeon_bo_domain rd,
+                                  enum radeon_bo_domain wd,
+                                  enum radeon_bo_domain *added_domains)
 {
     *added_domains = (rd | wd) & ~(reloc->read_domains | reloc->write_domain);
 
@@ -221,9 +220,9 @@ int radeon_get_reloc(struct radeon_cs_context *csc, struct radeon_bo *bo)
 
 static void radeon_add_reloc(struct radeon_cs_context *csc,
                              struct radeon_bo *bo,
-                             enum r300_buffer_domain rd,
-                             enum r300_buffer_domain wd,
-                             enum r300_buffer_domain *added_domains)
+                             enum radeon_bo_domain rd,
+                             enum radeon_bo_domain wd,
+                             enum radeon_bo_domain *added_domains)
 {
     struct drm_radeon_cs_reloc *reloc;
     unsigned i;
@@ -266,9 +265,9 @@ static void radeon_add_reloc(struct radeon_cs_context *csc,
     }
 
     /* Initialize the new relocation. */
-    radeon_bo_ref(bo);
+    csc->relocs_bo[csc->crelocs] = NULL;
+    radeon_bo_reference(&csc->relocs_bo[csc->crelocs], bo);
     p_atomic_inc(&bo->num_cs_references);
-    csc->relocs_bo[csc->crelocs] = bo;
     reloc = &csc->relocs[csc->crelocs];
     reloc->handle = bo->handle;
     reloc->read_domains = rd;
@@ -285,27 +284,27 @@ static void radeon_add_reloc(struct radeon_cs_context *csc,
     *added_domains = rd | wd;
 }
 
-static void radeon_drm_cs_add_reloc(struct r300_winsys_cs *rcs,
-                                    struct r300_winsys_cs_handle *buf,
-                                    enum r300_buffer_domain rd,
-                                    enum r300_buffer_domain wd)
+static void radeon_drm_cs_add_reloc(struct radeon_winsys_cs *rcs,
+                                    struct radeon_winsys_cs_handle *buf,
+                                    enum radeon_bo_domain rd,
+                                    enum radeon_bo_domain wd)
 {
     struct radeon_drm_cs *cs = radeon_drm_cs(rcs);
     struct radeon_bo *bo = (struct radeon_bo*)buf;
-    enum r300_buffer_domain added_domains;
+    enum radeon_bo_domain added_domains;
 
     radeon_add_reloc(cs->csc, bo, rd, wd, &added_domains);
 
     if (!added_domains)
         return;
 
-    if (added_domains & R300_DOMAIN_GTT)
+    if (added_domains & RADEON_DOMAIN_GTT)
         cs->csc->used_gart += bo->size;
-    if (added_domains & R300_DOMAIN_VRAM)
+    if (added_domains & RADEON_DOMAIN_VRAM)
         cs->csc->used_vram += bo->size;
 }
 
-static boolean radeon_drm_cs_validate(struct r300_winsys_cs *rcs)
+static boolean radeon_drm_cs_validate(struct radeon_winsys_cs *rcs)
 {
     struct radeon_drm_cs *cs = radeon_drm_cs(rcs);
 
@@ -313,8 +312,8 @@ static boolean radeon_drm_cs_validate(struct r300_winsys_cs *rcs)
            cs->csc->used_vram < cs->ws->vram_size * 0.8;
 }
 
-static void radeon_drm_cs_write_reloc(struct r300_winsys_cs *rcs,
-                                      struct r300_winsys_cs_handle *buf)
+static void radeon_drm_cs_write_reloc(struct radeon_winsys_cs *rcs,
+                                      struct radeon_winsys_cs_handle *buf)
 {
     struct radeon_drm_cs *cs = radeon_drm_cs(rcs);
     struct radeon_bo *bo = (struct radeon_bo*)buf;
@@ -322,7 +321,7 @@ static void radeon_drm_cs_write_reloc(struct r300_winsys_cs *rcs,
     unsigned index = radeon_get_reloc(cs->csc, bo);
 
     if (index == -1) {
-        fprintf(stderr, "r300: Cannot get a relocation in %s.\n", __func__);
+        fprintf(stderr, "radeon: Cannot get a relocation in %s.\n", __func__);
         return;
     }
 
@@ -366,7 +365,7 @@ void radeon_drm_cs_sync_flush(struct radeon_drm_cs *cs)
 
 DEBUG_GET_ONCE_BOOL_OPTION(thread, "RADEON_THREAD", TRUE)
 
-static void radeon_drm_cs_flush(struct r300_winsys_cs *rcs, unsigned flags)
+static void radeon_drm_cs_flush(struct radeon_winsys_cs *rcs, unsigned flags)
 {
     struct radeon_drm_cs *cs = radeon_drm_cs(rcs);
     struct radeon_cs_context *tmp;
@@ -379,11 +378,18 @@ static void radeon_drm_cs_flush(struct r300_winsys_cs *rcs, unsigned flags)
 
         cs->csc->chunks[0].length_dw = cs->base.cdw;
 
-        for (i = 0; i < crelocs; i++)
+        for (i = 0; i < crelocs; i++) {
+            /* Update the number of active asynchronous CS ioctls for the buffer. */
             p_atomic_inc(&cs->csc->relocs_bo[i]->num_active_ioctls);
 
+            /* Update whether the buffer is busy for write. */
+            if (cs->csc->relocs[i].write_domain) {
+                cs->csc->relocs_bo[i]->busy_for_write = TRUE;
+            }
+        }
+
         if (cs->ws->num_cpus > 1 && debug_get_option_thread() &&
-            (flags & R300_FLUSH_ASYNC)) {
+            (flags & RADEON_FLUSH_ASYNC)) {
             cs->thread = pipe_thread_create(radeon_drm_cs_emit_ioctl, cs->csc);
             assert(cs->thread);
         } else {
@@ -403,7 +409,7 @@ static void radeon_drm_cs_flush(struct r300_winsys_cs *rcs, unsigned flags)
     cs->base.cdw = 0;
 }
 
-static void radeon_drm_cs_destroy(struct r300_winsys_cs *rcs)
+static void radeon_drm_cs_destroy(struct radeon_winsys_cs *rcs)
 {
     struct radeon_drm_cs *cs = radeon_drm_cs(rcs);
     radeon_drm_cs_sync_flush(cs);
@@ -415,7 +421,7 @@ static void radeon_drm_cs_destroy(struct r300_winsys_cs *rcs)
     FREE(cs);
 }
 
-static void radeon_drm_cs_set_flush(struct r300_winsys_cs *rcs,
+static void radeon_drm_cs_set_flush(struct radeon_winsys_cs *rcs,
                                     void (*flush)(void *ctx, unsigned flags),
                                     void *user)
 {
@@ -424,8 +430,8 @@ static void radeon_drm_cs_set_flush(struct r300_winsys_cs *rcs,
     cs->flush_data = user;
 }
 
-static boolean radeon_bo_is_referenced(struct r300_winsys_cs *rcs,
-                                       struct r300_winsys_cs_handle *_buf)
+static boolean radeon_bo_is_referenced(struct radeon_winsys_cs *rcs,
+                                       struct radeon_winsys_cs_handle *_buf)
 {
     struct radeon_drm_cs *cs = radeon_drm_cs(rcs);
     struct radeon_bo *bo = (struct radeon_bo*)_buf;
index dfaa161c3189eaf70fc1bb4575f9dddb6bdd0c5b..339beedc6abbb1bb1184de8e318350a6ce708a51 100644 (file)
@@ -31,7 +31,7 @@
 #include <radeon_drm.h>
 
 struct radeon_cs_context {
-    uint32_t                    buf[R300_MAX_CMDBUF_DWORDS];
+    uint32_t                    buf[RADEON_MAX_CMDBUF_DWORDS];
 
     int fd;
     struct drm_radeon_cs        cs;
@@ -54,7 +54,7 @@ struct radeon_cs_context {
 };
 
 struct radeon_drm_cs {
-    struct r300_winsys_cs base;
+    struct radeon_winsys_cs base;
 
     /* We flip between these two CS. While one is being consumed
      * by the kernel in another thread, the other one is being filled
@@ -79,19 +79,37 @@ struct radeon_drm_cs {
 int radeon_get_reloc(struct radeon_cs_context *csc, struct radeon_bo *bo);
 
 static INLINE struct radeon_drm_cs *
-radeon_drm_cs(struct r300_winsys_cs *base)
+radeon_drm_cs(struct radeon_winsys_cs *base)
 {
     return (struct radeon_drm_cs*)base;
 }
 
-static INLINE boolean radeon_bo_is_referenced_by_cs(struct radeon_drm_cs *cs,
-                                                    struct radeon_bo *bo)
+static INLINE boolean
+radeon_bo_is_referenced_by_cs(struct radeon_drm_cs *cs,
+                              struct radeon_bo *bo)
 {
     return bo->num_cs_references == bo->rws->num_cs ||
            (bo->num_cs_references && radeon_get_reloc(cs->csc, bo) != -1);
 }
 
-static INLINE boolean radeon_bo_is_referenced_by_any_cs(struct radeon_bo *bo)
+static INLINE boolean
+radeon_bo_is_referenced_by_cs_for_write(struct radeon_drm_cs *cs,
+                                        struct radeon_bo *bo)
+{
+    int index;
+
+    if (!bo->num_cs_references)
+        return FALSE;
+
+    index = radeon_get_reloc(cs->csc, bo);
+    if (index == -1)
+        return FALSE;
+
+    return cs->csc->relocs[index].write_domain != 0;
+}
+
+static INLINE boolean
+radeon_bo_is_referenced_by_any_cs(struct radeon_bo *bo)
 {
     return bo->num_cs_references;
 }
index 3a208cdd4c467e7f5e21f2edd55da6a1f957bb0f..76d9dda422df3e301ba050a84bb79e4dc98d2c8e 100644 (file)
@@ -3,9 +3,9 @@
 
 #include "pipe/p_defines.h"
 
-struct r300_winsys_screen;
+struct radeon_winsys;
 
-struct r300_winsys_screen *r300_drm_winsys_screen_create(int fd);
+struct radeon_winsys *radeon_drm_winsys_create(int fd);
 
 static INLINE boolean is_r3xx(int pciid)
 {
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
new file mode 100644 (file)
index 0000000..37f6d18
--- /dev/null
@@ -0,0 +1,247 @@
+/*
+ * Copyright © 2009 Corbin Simpson
+ * Copyright © 2011 Marek Olšák <maraeo@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, 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 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, AUTHORS
+ * 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.
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ */
+/*
+ * Authors:
+ *      Corbin Simpson <MostAwesomeDude@gmail.com>
+ *      Joakim Sindholt <opensource@zhasha.com>
+ *      Marek Olšák <maraeo@gmail.com>
+ */
+
+#include "radeon_drm_bo.h"
+#include "radeon_drm_cs.h"
+#include "radeon_drm_public.h"
+
+#include "pipebuffer/pb_bufmgr.h"
+#include "util/u_memory.h"
+
+#include <xf86drm.h>
+#include <stdio.h>
+
+#ifndef RADEON_INFO_WANT_HYPERZ
+#define RADEON_INFO_WANT_HYPERZ 7
+#endif
+#ifndef RADEON_INFO_WANT_CMASK
+#define RADEON_INFO_WANT_CMASK 8
+#endif
+
+/* Enable/disable feature access. Return TRUE on success. */
+static boolean radeon_set_fd_access(int fd, unsigned request, boolean enable)
+{
+    struct drm_radeon_info info = {0};
+    unsigned value = enable ? 1 : 0;
+
+    info.value = (unsigned long)&value;
+    info.request = request;
+
+    if (drmCommandWriteRead(fd, DRM_RADEON_INFO, &info, sizeof(info)) != 0)
+        return FALSE;
+
+    if (enable && !value)
+        return FALSE;
+
+    return TRUE;
+}
+
+/* Helper function to do the ioctls needed for setup and init. */
+static void do_ioctls(struct radeon_drm_winsys *winsys)
+{
+    struct drm_radeon_gem_info gem_info = {0};
+    struct drm_radeon_info info = {0};
+    int target = 0;
+    int retval;
+    drmVersionPtr version;
+
+    info.value = (unsigned long)&target;
+
+    /* We do things in a specific order here.
+     *
+     * DRM version first. We need to be sure we're running on a KMS chipset.
+     * This is also for some features.
+     *
+     * Then, the PCI ID. This is essential and should return usable numbers
+     * for all Radeons. If this fails, we probably got handed an FD for some
+     * non-Radeon card.
+     *
+     * The GB and Z pipe requests should always succeed, but they might not
+     * return sensical values for all chipsets, but that's alright because
+     * the pipe drivers already know that.
+     *
+     * The GEM info is actually bogus on the kernel side, as well as our side
+     * (see radeon_gem_info_ioctl in radeon_gem.c) but that's alright because
+     * we don't actually use the info for anything yet. */
+
+    version = drmGetVersion(winsys->fd);
+    if (version->version_major != 2 ||
+        version->version_minor < 3) {
+        fprintf(stderr, "%s: DRM version is %d.%d.%d but this driver is "
+                "only compatible with 2.3.x (kernel 2.6.34) and later.\n",
+                __FUNCTION__,
+                version->version_major,
+                version->version_minor,
+                version->version_patchlevel);
+        drmFreeVersion(version);
+        exit(1);
+    }
+
+    winsys->drm_major = version->version_major;
+    winsys->drm_minor = version->version_minor;
+    winsys->drm_patchlevel = version->version_patchlevel;
+
+    info.request = RADEON_INFO_DEVICE_ID;
+    retval = drmCommandWriteRead(winsys->fd, DRM_RADEON_INFO, &info, sizeof(info));
+    if (retval) {
+        fprintf(stderr, "%s: Failed to get PCI ID, "
+                "error number %d\n", __FUNCTION__, retval);
+        exit(1);
+    }
+    winsys->pci_id = target;
+
+    info.request = RADEON_INFO_NUM_GB_PIPES;
+    retval = drmCommandWriteRead(winsys->fd, DRM_RADEON_INFO, &info, sizeof(info));
+    if (retval) {
+        fprintf(stderr, "%s: Failed to get GB pipe count, "
+                "error number %d\n", __FUNCTION__, retval);
+        exit(1);
+    }
+    winsys->gb_pipes = target;
+
+    info.request = RADEON_INFO_NUM_Z_PIPES;
+    retval = drmCommandWriteRead(winsys->fd, DRM_RADEON_INFO, &info, sizeof(info));
+    if (retval) {
+        fprintf(stderr, "%s: Failed to get Z pipe count, "
+                "error number %d\n", __FUNCTION__, retval);
+        exit(1);
+    }
+    winsys->z_pipes = target;
+
+    if (debug_get_bool_option("RADEON_HYPERZ", FALSE)) {
+        winsys->hyperz = radeon_set_fd_access(winsys->fd,
+                                              RADEON_INFO_WANT_HYPERZ, TRUE);
+    }
+
+    if (debug_get_bool_option("RADEON_CMASK", FALSE)) {
+        winsys->aacompress = radeon_set_fd_access(winsys->fd,
+                                                  RADEON_INFO_WANT_CMASK, TRUE);
+    }
+
+    retval = drmCommandWriteRead(winsys->fd, DRM_RADEON_GEM_INFO,
+            &gem_info, sizeof(gem_info));
+    if (retval) {
+        fprintf(stderr, "%s: Failed to get MM info, error number %d\n",
+                __FUNCTION__, retval);
+        exit(1);
+    }
+    winsys->gart_size = gem_info.gart_size;
+    winsys->vram_size = gem_info.vram_size;
+
+    drmFreeVersion(version);
+
+    winsys->num_cpus = sysconf(_SC_NPROCESSORS_ONLN);
+}
+
+static void radeon_winsys_destroy(struct radeon_winsys *rws)
+{
+    struct radeon_drm_winsys *ws = (struct radeon_drm_winsys*)rws;
+
+    ws->cman->destroy(ws->cman);
+    ws->kman->destroy(ws->kman);
+    FREE(rws);
+}
+
+static uint32_t radeon_get_value(struct radeon_winsys *rws,
+                                 enum radeon_value_id id)
+{
+    struct radeon_drm_winsys *ws = (struct radeon_drm_winsys *)rws;
+
+    switch(id) {
+    case RADEON_VID_PCI_ID:
+       return ws->pci_id;
+    case RADEON_VID_R300_GB_PIPES:
+       return ws->gb_pipes;
+    case RADEON_VID_R300_Z_PIPES:
+       return ws->z_pipes;
+    case RADEON_VID_GART_SIZE:
+        return ws->gart_size;
+    case RADEON_VID_VRAM_SIZE:
+        return ws->vram_size;
+    case RADEON_VID_DRM_MAJOR:
+        return ws->drm_major;
+    case RADEON_VID_DRM_MINOR:
+        return ws->drm_minor;
+    case RADEON_VID_DRM_PATCHLEVEL:
+        return ws->drm_patchlevel;
+    case RADEON_VID_DRM_2_6_0:
+        return ws->drm_major*100 + ws->drm_minor >= 206;
+    case RADEON_VID_DRM_2_8_0:
+        return ws->drm_major*100 + ws->drm_minor >= 208;
+    case RADEON_VID_CAN_HYPERZ:
+        return ws->hyperz;
+    case RADEON_VID_CAN_AACOMPRESS:
+        return ws->aacompress;
+    }
+    return 0;
+}
+
+struct radeon_winsys *radeon_drm_winsys_create(int fd)
+{
+    struct radeon_drm_winsys *ws = CALLOC_STRUCT(radeon_drm_winsys);
+    if (!ws) {
+        return NULL;
+    }
+
+    ws->fd = fd;
+    do_ioctls(ws);
+
+    if (!is_r3xx(ws->pci_id)) {
+        goto fail;
+    }
+
+    /* Create managers. */
+    ws->kman = radeon_bomgr_create(ws);
+    if (!ws->kman)
+       goto fail;
+    ws->cman = pb_cache_manager_create(ws->kman, 1000000);
+    if (!ws->cman)
+       goto fail;
+
+    /* Set functions. */
+    ws->base.destroy = radeon_winsys_destroy;
+    ws->base.get_value = radeon_get_value;
+
+    radeon_bomgr_init_functions(ws);
+    radeon_drm_cs_init_functions(ws);
+
+    return &ws->base;
+
+fail:
+    if (ws->cman)
+       ws->cman->destroy(ws->cman);
+    if (ws->kman)
+       ws->kman->destroy(ws->kman);
+    FREE(ws);
+    return NULL;
+}
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.h b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.h
new file mode 100644 (file)
index 0000000..e1b9493
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Copyright © 2009 Corbin Simpson
+ * 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 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, AUTHORS
+ * 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.
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ */
+/*
+ * Authors:
+ *      Corbin Simpson <MostAwesomeDude@gmail.com>
+ */
+#ifndef RADEON_DRM_WINSYS_H
+#define RADEON_DRM_WINSYS_H
+
+#include "radeon_winsys.h"
+
+struct radeon_drm_winsys {
+    struct radeon_winsys base;
+
+    int fd; /* DRM file descriptor */
+    int num_cs; /* The number of command streams created. */
+
+    struct pb_manager *kman;
+    struct pb_manager *cman;
+
+    uint32_t pci_id;        /* PCI ID */
+    uint32_t gb_pipes;      /* GB pipe count */
+    uint32_t z_pipes;       /* Z pipe count (rv530 only) */
+    uint32_t gart_size;     /* GART size. */
+    uint32_t vram_size;     /* VRAM size. */
+    uint32_t num_cpus;      /* Number of CPUs. */
+
+    unsigned drm_major;
+    unsigned drm_minor;
+    unsigned drm_patchlevel;
+
+    /* Hyper-Z user */
+    boolean hyperz;
+    /* AA compression (CMask) */
+    boolean aacompress;
+};
+
+static INLINE struct radeon_drm_winsys *
+radeon_drm_winsys(struct radeon_winsys *base)
+{
+    return (struct radeon_drm_winsys*)base;
+}
+
+#endif
index 9ecbb0745724482dda06595763c0d2876cbcbb8a..ca0e66241385e36a571a743df1c3bacefbeb826e 100644 (file)
 /*
- * Copyright © 2009 Corbin Simpson
- * All Rights Reserved.
+ * Copyright 2008 Corbin Simpson <MostAwesomeDude@gmail.com>
+ * Copyright 2010 Marek Olšák <maraeo@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, 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:
+ * 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 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, AUTHORS
- * 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.
+ * 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 above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- */
-/*
- * Authors:
- *      Corbin Simpson <MostAwesomeDude@gmail.com>
- */
+ * 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 AUTHOR(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. */
+
 #ifndef RADEON_WINSYS_H
 #define RADEON_WINSYS_H
 
-#include "r300_winsys.h"
+/* The public winsys interface header for the radeon driver. */
 
-struct radeon_drm_winsys {
-    struct r300_winsys_screen base;
+#include "pipebuffer/pb_bufmgr.h"
+#include "pipe/p_defines.h"
+#include "pipe/p_state.h"
 
-    int fd; /* DRM file descriptor */
-    int num_cs; /* The number of command streams created. */
+#define RADEON_MAX_CMDBUF_DWORDS (16 * 1024)
+#define RADEON_FLUSH_ASYNC       (1 << 0)
 
-    struct pb_manager *kman;
-    struct pb_manager *cman;
+/* Tiling flags. */
+enum radeon_bo_layout {
+    RADEON_LAYOUT_LINEAR = 0,
+    RADEON_LAYOUT_TILED,
+    RADEON_LAYOUT_SQUARETILED,
 
-    uint32_t pci_id;        /* PCI ID */
-    uint32_t gb_pipes;      /* GB pipe count */
-    uint32_t z_pipes;       /* Z pipe count (rv530 only) */
-    uint32_t gart_size;     /* GART size. */
-    uint32_t vram_size;     /* VRAM size. */
-    uint32_t num_cpus;      /* Number of CPUs. */
+    RADEON_LAYOUT_UNKNOWN
+};
+
+enum radeon_bo_domain { /* bitfield */
+    RADEON_DOMAIN_GTT  = 2,
+    RADEON_DOMAIN_VRAM = 4
+};
 
-    unsigned drm_major;
-    unsigned drm_minor;
-    unsigned drm_patchlevel;
+struct winsys_handle;
+struct radeon_winsys_cs_handle;   /* for write_reloc etc. */
 
-    /* Hyper-Z user */
-    boolean hyperz;
-    /* AA compression (CMask) */
-    boolean aacompress;
+struct radeon_winsys_cs {
+    unsigned cdw;  /* Number of used dwords. */
+    uint32_t *buf; /* The command buffer. */
 };
 
-static INLINE struct radeon_drm_winsys *
-radeon_drm_winsys(struct r300_winsys_screen *base)
-{
-    return (struct radeon_drm_winsys*)base;
-}
+enum radeon_value_id {
+    RADEON_VID_PCI_ID,
+    RADEON_VID_R300_GB_PIPES,
+    RADEON_VID_R300_Z_PIPES,
+    RADEON_VID_GART_SIZE,
+    RADEON_VID_VRAM_SIZE,
+    RADEON_VID_DRM_MAJOR,
+    RADEON_VID_DRM_MINOR,
+    RADEON_VID_DRM_PATCHLEVEL,
+
+    /* These should probably go away: */
+
+    /* R300 features:
+     * - Hyper-Z
+     * - GB_Z_PEQ_CONFIG on rv350->r4xx
+     * - R500 FG_ALPHA_VALUE
+     *
+     * R600 features:
+     * - TBD
+     */
+    RADEON_VID_DRM_2_6_0,
+
+    /* R300 features:
+     * - R500 US_FORMAT regs
+     * - R500 ARGB2101010 colorbuffer
+     * - CMask and AA regs
+     * - R16F/RG16F
+     *
+     * R600 features:
+     * - TBD
+     */
+    RADEON_VID_DRM_2_8_0,
+
+    RADEON_VID_CAN_HYPERZ,     /* ZMask + HiZ */
+    RADEON_VID_CAN_AACOMPRESS, /* CMask */
+};
+
+struct radeon_winsys {
+    /**
+     * Destroy this winsys.
+     *
+     * \param ws        The winsys this function is called from.
+     */
+    void (*destroy)(struct radeon_winsys *ws);
+
+    /**
+     * Query a system value from a winsys.
+     *
+     * \param ws        The winsys this function is called from.
+     * \param vid       One of the RADEON_VID_* enums.
+     */
+    uint32_t (*get_value)(struct radeon_winsys *ws,
+                          enum radeon_value_id vid);
+
+    /**************************************************************************
+     * Buffer management. Buffer attributes are mostly fixed over its lifetime.
+     *
+     * Remember that gallium gets to choose the interface it needs, and the
+     * window systems must then implement that interface (rather than the
+     * other way around...).
+     *************************************************************************/
+
+    /**
+     * Create a buffer object.
+     *
+     * \param ws        The winsys this function is called from.
+     * \param size      The size to allocate.
+     * \param alignment An alignment of the buffer in memory.
+     * \param bind      A bitmask of the PIPE_BIND_* flags.
+     * \param usage     A bitmask of the PIPE_USAGE_* flags.
+     * \param domain    A bitmask of the RADEON_DOMAIN_* flags.
+     * \return          The created buffer object.
+     */
+    struct pb_buffer *(*buffer_create)(struct radeon_winsys *ws,
+                                       unsigned size,
+                                       unsigned alignment,
+                                       unsigned bind,
+                                       unsigned usage,
+                                       enum radeon_bo_domain domain);
+
+    struct radeon_winsys_cs_handle *(*buffer_get_cs_handle)(
+            struct pb_buffer *buf);
+
+    /**
+     * Map the entire data store of a buffer object into the client's address
+     * space.
+     *
+     * \param buf       A winsys buffer object to map.
+     * \param cs        A command stream to flush if the buffer is referenced by it.
+     * \param usage     A bitmask of the PIPE_TRANSFER_* flags.
+     * \return          The pointer at the beginning of the buffer.
+     */
+    void *(*buffer_map)(struct pb_buffer *buf,
+                        struct radeon_winsys_cs *cs,
+                        enum pipe_transfer_usage usage);
+
+    /**
+     * Unmap a buffer object from the client's address space.
+     *
+     * \param buf       A winsys buffer object to unmap.
+     */
+    void (*buffer_unmap)(struct pb_buffer *buf);
+
+    /**
+     * Return TRUE if a buffer object is being used by the GPU.
+     *
+     * \param buf       A winsys buffer object.
+     */
+    boolean (*buffer_is_busy)(struct pb_buffer *buf);
+
+    /**
+     * Wait for a buffer object until it is not used by a GPU. This is
+     * equivalent to a fence placed after the last command using the buffer,
+     * and synchronizing to the fence.
+     *
+     * \param buf       A winsys buffer object to wait for.
+     */
+    void (*buffer_wait)(struct pb_buffer *buf);
+
+    /**
+     * Return tiling flags describing a memory layout of a buffer object.
+     *
+     * \param buf       A winsys buffer object to get the flags from.
+     * \param macrotile A pointer to the return value of the microtile flag.
+     * \param microtile A pointer to the return value of the macrotile flag.
+     *
+     * \note microtile and macrotile are not bitmasks!
+     */
+    void (*buffer_get_tiling)(struct pb_buffer *buf,
+                              enum radeon_bo_layout *microtile,
+                              enum radeon_bo_layout *macrotile);
+
+    /**
+     * Set tiling flags describing a memory layout of a buffer object.
+     *
+     * \param buf       A winsys buffer object to set the flags for.
+     * \param cs        A command stream to flush if the buffer is referenced by it.
+     * \param macrotile A macrotile flag.
+     * \param microtile A microtile flag.
+     * \param stride    A stride of the buffer in bytes, for texturing.
+     *
+     * \note microtile and macrotile are not bitmasks!
+     */
+    void (*buffer_set_tiling)(struct pb_buffer *buf,
+                              struct radeon_winsys_cs *cs,
+                              enum radeon_bo_layout microtile,
+                              enum radeon_bo_layout macrotile,
+                              unsigned stride);
+
+    /**
+     * Get a winsys buffer from a winsys handle. The internal structure
+     * of the handle is platform-specific and only a winsys should access it.
+     *
+     * \param ws        The winsys this function is called from.
+     * \param whandle   A winsys handle pointer as was received from a state
+     *                  tracker.
+     * \param stride    The returned buffer stride in bytes.
+     * \param size      The returned buffer size.
+     */
+    struct pb_buffer *(*buffer_from_handle)(struct radeon_winsys *ws,
+                                            struct winsys_handle *whandle,
+                                            unsigned *stride,
+                                            unsigned *size);
+
+    /**
+     * Get a winsys handle from a winsys buffer. The internal structure
+     * of the handle is platform-specific and only a winsys should access it.
+     *
+     * \param buf       A winsys buffer object to get the handle from.
+     * \param whandle   A winsys handle pointer.
+     * \param stride    A stride of the buffer in bytes, for texturing.
+     * \return          TRUE on success.
+     */
+    boolean (*buffer_get_handle)(struct pb_buffer *buf,
+                                 unsigned stride,
+                                 struct winsys_handle *whandle);
+
+    /**************************************************************************
+     * Command submission.
+     *
+     * Each pipe context should create its own command stream and submit
+     * commands independently of other contexts.
+     *************************************************************************/
+
+    /**
+     * Create a command stream.
+     *
+     * \param ws        The winsys this function is called from.
+     */
+    struct radeon_winsys_cs *(*cs_create)(struct radeon_winsys *ws);
+
+    /**
+     * Destroy a command stream.
+     *
+     * \param cs        A command stream to destroy.
+     */
+    void (*cs_destroy)(struct radeon_winsys_cs *cs);
+
+    /**
+     * Add a new buffer relocation. Every relocation must first be added
+     * before it can be written.
+     *
+     * \param cs  A command stream to add buffer for validation against.
+     * \param buf A winsys buffer to validate.
+     * \param rd  A read domain containing a bitmask of the RADEON_DOMAIN_* flags.
+     * \param wd  A write domain containing a bitmask of the RADEON_DOMAIN_* flags.
+     */
+    void (*cs_add_reloc)(struct radeon_winsys_cs *cs,
+                         struct radeon_winsys_cs_handle *buf,
+                         enum radeon_bo_domain rd,
+                         enum radeon_bo_domain wd);
+
+    /**
+     * Return TRUE if there is enough memory in VRAM and GTT for the relocs
+     * added so far.
+     *
+     * \param cs        A command stream to validate.
+     */
+    boolean (*cs_validate)(struct radeon_winsys_cs *cs);
+
+    /**
+     * Write a relocated dword to a command buffer.
+     *
+     * \param cs        A command stream the relocation is written to.
+     * \param buf       A winsys buffer to write the relocation for.
+     * \param rd        A read domain containing a bitmask of the RADEON_DOMAIN_* flags.
+     * \param wd        A write domain containing a bitmask of the RADEON_DOMAIN_* flags.
+     */
+    void (*cs_write_reloc)(struct radeon_winsys_cs *cs,
+                           struct radeon_winsys_cs_handle *buf);
+
+    /**
+     * Flush a command stream.
+     *
+     * \param cs        A command stream to flush.
+     * \param flags,    RADEON_FLUSH_ASYNC or 0.
+     */
+    void (*cs_flush)(struct radeon_winsys_cs *cs, unsigned flags);
+
+    /**
+     * Set a flush callback which is called from winsys when flush is
+     * required.
+     *
+     * \param cs        A command stream to set the callback for.
+     * \param flush     A flush callback function associated with the command stream.
+     * \param user      A user pointer that will be passed to the flush callback.
+     */
+    void (*cs_set_flush)(struct radeon_winsys_cs *cs,
+                         void (*flush)(void *ctx, unsigned flags),
+                         void *user);
+
+    /**
+     * Return TRUE if a buffer is referenced by a command stream.
+     *
+     * \param cs        A command stream.
+     * \param buf       A winsys buffer.
+     */
+    boolean (*cs_is_buffer_referenced)(struct radeon_winsys_cs *cs,
+                                       struct radeon_winsys_cs_handle *buf);
+};
 
 #endif
index e5cb8733952f3f05266f3618afdc4253cd1c58b1..67147b6718f3a409c9bc66284e8adf4927074bf4 100644 (file)
@@ -107,7 +107,11 @@ match_function_by_name(exec_list *instructions, const char *name,
     * FINISHME: matching signature but shader X + N contains an _exact_
     * FINISHME: matching signature.
     */
-   if (sig == NULL && (f == NULL || state->es_shader || !f->has_user_signature()) && state->symbols->get_type(name) == NULL && (state->language_version == 110 || state->symbols->get_variable(name) == NULL)) {
+   if (sig == NULL
+       && (f == NULL || state->es_shader || !f->has_user_signature())
+       && state->symbols->get_type(name) == NULL
+       && (state->language_version == 110
+          || state->symbols->get_variable(name) == NULL)) {
       /* The current shader doesn't contain a matching function or signature.
        * Before giving up, look for the prototype in the built-in functions.
        */
index cdb16fd492bfffeba4f978a388c82f0d100bf5ce..3b87f0d56de8543fd2099e1bba5b0760ce37f0b0 100644 (file)
@@ -848,6 +848,36 @@ do_comparison(void *mem_ctx, int operation, ir_rvalue *op0, ir_rvalue *op1)
    return cmp;
 }
 
+/* For logical operations, we want to ensure that the operands are
+ * scalar booleans.  If it isn't, emit an error and return a constant
+ * boolean to avoid triggering cascading error messages.
+ */
+ir_rvalue *
+get_scalar_boolean_operand(exec_list *instructions,
+                          struct _mesa_glsl_parse_state *state,
+                          ast_expression *parent_expr,
+                          int operand,
+                          const char *operand_name,
+                          bool *error_emitted)
+{
+   ast_expression *expr = parent_expr->subexpressions[operand];
+   void *ctx = state;
+   ir_rvalue *val = expr->hir(instructions, state);
+
+   if (val->type->is_boolean() && val->type->is_scalar())
+      return val;
+
+   if (!*error_emitted) {
+      YYLTYPE loc = expr->get_location();
+      _mesa_glsl_error(&loc, state, "%s of `%s' must be scalar boolean",
+                      operand_name,
+                      parent_expr->operator_string(parent_expr->oper));
+      *error_emitted = true;
+   }
+
+   return new(ctx) ir_constant(true);
+}
+
 ir_rvalue *
 ast_expression::hir(exec_list *instructions,
                    struct _mesa_glsl_parse_state *state)
@@ -910,7 +940,7 @@ ast_expression::hir(exec_list *instructions,
    };
    ir_rvalue *result = NULL;
    ir_rvalue *op[3];
-   const struct glsl_type *type = glsl_type::error_type;
+   const struct glsl_type *type; /* a temporary variable for switch cases */
    bool error_emitted = false;
    YYLTYPE loc;
 
@@ -924,7 +954,6 @@ ast_expression::hir(exec_list *instructions,
       result = do_assignment(instructions, state, op[0], op[1], false,
                             this->subexpressions[0]->get_location());
       error_emitted = result->type->is_error();
-      type = result->type;
       break;
    }
 
@@ -1043,10 +1072,12 @@ ast_expression::hir(exec_list *instructions,
         error_emitted = true;
       }
 
-      result = do_comparison(ctx, operations[this->oper], op[0], op[1]);
-      type = glsl_type::bool_type;
-
-      assert(error_emitted || (result->type == glsl_type::bool_type));
+      if (error_emitted) {
+        result = new(ctx) ir_constant(false);
+      } else {
+        result = do_comparison(ctx, operations[this->oper], op[0], op[1]);
+        assert(result->type == glsl_type::bool_type);
+      }
       break;
 
    case ast_bit_and:
@@ -1079,29 +1110,16 @@ ast_expression::hir(exec_list *instructions,
       break;
 
    case ast_logic_and: {
-      op[0] = this->subexpressions[0]->hir(instructions, state);
-
-      if (!op[0]->type->is_boolean() || !op[0]->type->is_scalar()) {
-        YYLTYPE loc = this->subexpressions[0]->get_location();
-
-        _mesa_glsl_error(& loc, state, "LHS of `%s' must be scalar boolean",
-                         operator_string(this->oper));
-        error_emitted = true;
-      }
+      exec_list rhs_instructions;
+      op[0] = get_scalar_boolean_operand(instructions, state, this, 0,
+                                        "LHS", &error_emitted);
+      op[1] = get_scalar_boolean_operand(&rhs_instructions, state, this, 1,
+                                        "RHS", &error_emitted);
 
       ir_constant *op0_const = op[0]->constant_expression_value();
       if (op0_const) {
         if (op0_const->value.b[0]) {
-           op[1] = this->subexpressions[1]->hir(instructions, state);
-
-           if (!op[1]->type->is_boolean() || !op[1]->type->is_scalar()) {
-              YYLTYPE loc = this->subexpressions[1]->get_location();
-
-              _mesa_glsl_error(& loc, state,
-                               "RHS of `%s' must be scalar boolean",
-                               operator_string(this->oper));
-              error_emitted = true;
-           }
+           instructions->append_list(&rhs_instructions);
            result = op[1];
         } else {
            result = op0_const;
@@ -1116,17 +1134,7 @@ ast_expression::hir(exec_list *instructions,
         ir_if *const stmt = new(ctx) ir_if(op[0]);
         instructions->push_tail(stmt);
 
-        op[1] = this->subexpressions[1]->hir(&stmt->then_instructions, state);
-
-        if (!op[1]->type->is_boolean() || !op[1]->type->is_scalar()) {
-           YYLTYPE loc = this->subexpressions[1]->get_location();
-
-           _mesa_glsl_error(& loc, state,
-                            "RHS of `%s' must be scalar boolean",
-                            operator_string(this->oper));
-           error_emitted = true;
-        }
-
+        stmt->then_instructions.append_list(&rhs_instructions);
         ir_dereference *const then_deref = new(ctx) ir_dereference_variable(tmp);
         ir_assignment *const then_assign =
            new(ctx) ir_assignment(then_deref, op[1], NULL);
@@ -1144,31 +1152,17 @@ ast_expression::hir(exec_list *instructions,
    }
 
    case ast_logic_or: {
-      op[0] = this->subexpressions[0]->hir(instructions, state);
-
-      if (!op[0]->type->is_boolean() || !op[0]->type->is_scalar()) {
-        YYLTYPE loc = this->subexpressions[0]->get_location();
-
-        _mesa_glsl_error(& loc, state, "LHS of `%s' must be scalar boolean",
-                         operator_string(this->oper));
-        error_emitted = true;
-      }
+      exec_list rhs_instructions;
+      op[0] = get_scalar_boolean_operand(instructions, state, this, 0,
+                                        "LHS", &error_emitted);
+      op[1] = get_scalar_boolean_operand(&rhs_instructions, state, this, 1,
+                                        "RHS", &error_emitted);
 
       ir_constant *op0_const = op[0]->constant_expression_value();
       if (op0_const) {
         if (op0_const->value.b[0]) {
            result = op0_const;
         } else {
-           op[1] = this->subexpressions[1]->hir(instructions, state);
-
-           if (!op[1]->type->is_boolean() || !op[1]->type->is_scalar()) {
-              YYLTYPE loc = this->subexpressions[1]->get_location();
-
-              _mesa_glsl_error(& loc, state,
-                               "RHS of `%s' must be scalar boolean",
-                               operator_string(this->oper));
-              error_emitted = true;
-           }
            result = op[1];
         }
         type = glsl_type::bool_type;
@@ -1181,21 +1175,12 @@ ast_expression::hir(exec_list *instructions,
         ir_if *const stmt = new(ctx) ir_if(op[0]);
         instructions->push_tail(stmt);
 
-        op[1] = this->subexpressions[1]->hir(&stmt->else_instructions, state);
-
-        if (!op[1]->type->is_boolean() || !op[1]->type->is_scalar()) {
-           YYLTYPE loc = this->subexpressions[1]->get_location();
-
-           _mesa_glsl_error(& loc, state, "RHS of `%s' must be scalar boolean",
-                            operator_string(this->oper));
-           error_emitted = true;
-        }
-
         ir_dereference *const then_deref = new(ctx) ir_dereference_variable(tmp);
         ir_assignment *const then_assign =
            new(ctx) ir_assignment(then_deref, new(ctx) ir_constant(true), NULL);
         stmt->then_instructions.push_tail(then_assign);
 
+        stmt->else_instructions.append_list(&rhs_instructions);
         ir_dereference *const else_deref = new(ctx) ir_dereference_variable(tmp);
         ir_assignment *const else_assign =
            new(ctx) ir_assignment(else_deref, op[1], NULL);
@@ -1208,29 +1193,27 @@ ast_expression::hir(exec_list *instructions,
    }
 
    case ast_logic_xor:
-      op[0] = this->subexpressions[0]->hir(instructions, state);
-      op[1] = this->subexpressions[1]->hir(instructions, state);
-
+      /* From page 33 (page 39 of the PDF) of the GLSL 1.10 spec:
+       *
+       *    "The logical binary operators and (&&), or ( | | ), and
+       *     exclusive or (^^). They operate only on two Boolean
+       *     expressions and result in a Boolean expression."
+       */
+      op[0] = get_scalar_boolean_operand(instructions, state, this, 0, "LHS",
+                                        &error_emitted);
+      op[1] = get_scalar_boolean_operand(instructions, state, this, 1, "RHS",
+                                        &error_emitted);
 
       result = new(ctx) ir_expression(operations[this->oper], glsl_type::bool_type,
                                      op[0], op[1]);
-      type = glsl_type::bool_type;
       break;
 
    case ast_logic_not:
-      op[0] = this->subexpressions[0]->hir(instructions, state);
-
-      if (!op[0]->type->is_boolean() || !op[0]->type->is_scalar()) {
-        YYLTYPE loc = this->subexpressions[0]->get_location();
-
-        _mesa_glsl_error(& loc, state,
-                         "operand of `!' must be scalar boolean");
-        error_emitted = true;
-      }
+      op[0] = get_scalar_boolean_operand(instructions, state, this, 0,
+                                        "operand", &error_emitted);
 
       result = new(ctx) ir_expression(operations[this->oper], glsl_type::bool_type,
                                      op[0], NULL);
-      type = glsl_type::bool_type;
       break;
 
    case ast_mul_assign:
@@ -1250,7 +1233,6 @@ ast_expression::hir(exec_list *instructions,
       result = do_assignment(instructions, state,
                             op[0]->clone(ctx, NULL), temp_rhs, false,
                             this->subexpressions[0]->get_location());
-      type = result->type;
       error_emitted = (op[0]->type->is_error());
 
       /* GLSL 1.10 does not allow array assignment.  However, we don't have to
@@ -1276,7 +1258,6 @@ ast_expression::hir(exec_list *instructions,
       result = do_assignment(instructions, state,
                             op[0]->clone(ctx, NULL), temp_rhs, false,
                             this->subexpressions[0]->get_location());
-      type = result->type;
       error_emitted = type->is_error();
       break;
    }
@@ -1313,20 +1294,14 @@ ast_expression::hir(exec_list *instructions,
    }
 
    case ast_conditional: {
-      op[0] = this->subexpressions[0]->hir(instructions, state);
-
       /* From page 59 (page 65 of the PDF) of the GLSL 1.50 spec:
        *
        *    "The ternary selection operator (?:). It operates on three
        *    expressions (exp1 ? exp2 : exp3). This operator evaluates the
        *    first expression, which must result in a scalar Boolean."
        */
-      if (!op[0]->type->is_boolean() || !op[0]->type->is_scalar()) {
-        YYLTYPE loc = this->subexpressions[0]->get_location();
-
-        _mesa_glsl_error(& loc, state, "?: condition must be scalar boolean");
-        error_emitted = true;
-      }
+      op[0] = get_scalar_boolean_operand(instructions, state, this, 0,
+                                        "condition", &error_emitted);
 
       /* The :? operator is implemented by generating an anonymous temporary
        * followed by an if-statement.  The last instruction in each branch of
@@ -1424,7 +1399,6 @@ ast_expression::hir(exec_list *instructions,
       result = do_assignment(instructions, state,
                             op[0]->clone(ctx, NULL), temp_rhs, false,
                             this->subexpressions[0]->get_location());
-      type = result->type;
       error_emitted = op[0]->type->is_error();
       break;
    }
@@ -1454,14 +1428,12 @@ ast_expression::hir(exec_list *instructions,
                          op[0]->clone(ctx, NULL), temp_rhs, false,
                          this->subexpressions[0]->get_location());
 
-      type = result->type;
       error_emitted = op[0]->type->is_error();
       break;
    }
 
    case ast_field_selection:
       result = _mesa_ast_field_selection_to_hir(this, instructions, state);
-      type = result->type;
       break;
 
    case ast_array_index: {
@@ -1577,7 +1549,7 @@ ast_expression::hir(exec_list *instructions,
             */
            ir_variable *v = array->whole_variable_referenced();
            if (v != NULL)
-              v->max_array_access = array->type->array_size();
+              v->max_array_access = array->type->array_size() - 1;
         }
       }
 
@@ -1618,7 +1590,6 @@ ast_expression::hir(exec_list *instructions,
       if (error_emitted)
         result->type = glsl_type::error_type;
 
-      type = result->type;
       break;
    }
 
@@ -1641,7 +1612,6 @@ ast_expression::hir(exec_list *instructions,
 
       if (var != NULL) {
         var->used = true;
-        type = result->type;
       } else {
         _mesa_glsl_error(& loc, state, "`%s' undeclared",
                          this->primary_expression.identifier);
@@ -1652,22 +1622,18 @@ ast_expression::hir(exec_list *instructions,
    }
 
    case ast_int_constant:
-      type = glsl_type::int_type;
       result = new(ctx) ir_constant(this->primary_expression.int_constant);
       break;
 
    case ast_uint_constant:
-      type = glsl_type::uint_type;
       result = new(ctx) ir_constant(this->primary_expression.uint_constant);
       break;
 
    case ast_float_constant:
-      type = glsl_type::float_type;
       result = new(ctx) ir_constant(this->primary_expression.float_constant);
       break;
 
    case ast_bool_constant:
-      type = glsl_type::bool_type;
       result = new(ctx) ir_constant(bool(this->primary_expression.bool_constant));
       break;
 
@@ -1682,10 +1648,42 @@ ast_expression::hir(exec_list *instructions,
        * therefore add instructions to the instruction list), they get dropped
        * on the floor.
        */
-      foreach_list_typed (ast_node, ast, link, &this->expressions)
-        result = ast->hir(instructions, state);
+      exec_node *previous_tail_pred = NULL;
+      YYLTYPE previous_operand_loc = loc;
+
+      foreach_list_typed (ast_node, ast, link, &this->expressions) {
+        /* If one of the operands of comma operator does not generate any
+         * code, we want to emit a warning.  At each pass through the loop
+         * previous_tail_pred will point to the last instruction in the
+         * stream *before* processing the previous operand.  Naturally,
+         * instructions->tail_pred will point to the last instruction in the
+         * stream *after* processing the previous operand.  If the two
+         * pointers match, then the previous operand had no effect.
+         *
+         * The warning behavior here differs slightly from GCC.  GCC will
+         * only emit a warning if none of the left-hand operands have an
+         * effect.  However, it will emit a warning for each.  I believe that
+         * there are some cases in C (especially with GCC extensions) where
+         * it is useful to have an intermediate step in a sequence have no
+         * effect, but I don't think these cases exist in GLSL.  Either way,
+         * it would be a giant hassle to replicate that behavior.
+         */
+        if (previous_tail_pred == instructions->tail_pred) {
+           _mesa_glsl_warning(&previous_operand_loc, state,
+                              "left-hand operand of comma expression has "
+                              "no effect");
+        }
+
+        /* tail_pred is directly accessed instead of using the get_tail()
+         * method for performance reasons.  get_tail() has extra code to
+         * return NULL when the list is empty.  We don't care about that
+         * here, so using tail_pred directly is fine.
+         */
+        previous_tail_pred = instructions->tail_pred;
+        previous_operand_loc = ast->get_location();
 
-      type = result->type;
+        result = ast->hir(instructions, state);
+      }
 
       /* Any errors should have already been emitted in the loop above.
        */
@@ -1693,8 +1691,10 @@ ast_expression::hir(exec_list *instructions,
       break;
    }
    }
+   type = NULL; /* use result->type, not type. */
+   assert(result != NULL);
 
-   if (type->is_error() && !error_emitted)
+   if (result->type->is_error() && !error_emitted)
       _mesa_glsl_error(& loc, state, "type mismatch");
 
    return result;
@@ -2676,17 +2676,24 @@ ast_declarator_list::hir(exec_list *instructions,
        *    preceded by one of these precision qualifiers [...] Literal
        *    constants do not have precision qualifiers. Neither do Boolean
        *    variables.
+       *
+       * In GLSL ES, sampler types are also allowed.
+       *
+       * From page 87 of the GLSL ES spec:
+       *    "RESOLUTION: Allow sampler types to take a precision qualifier."
        */
       if (this->type->specifier->precision != ast_precision_none
           && !var->type->is_float()
           && !var->type->is_integer()
+          && !(var->type->is_sampler() && state->es_shader)
           && !(var->type->is_array()
                && (var->type->fields.array->is_float()
                    || var->type->fields.array->is_integer()))) {
 
          _mesa_glsl_error(&loc, state,
-                          "precision qualifiers apply only to floating point "
-                          "and integer types");
+                          "precision qualifiers apply only to floating point"
+                          "%s types", state->es_shader ? ", integer, and sampler"
+                                                      : "and integer");
       }
 
       /* Process the initializer and add its instructions to a temporary
index 1f6e67fa062239bb828487efb31135b0e55a5a38..6f15e85a1221279f5a4d4f4f5f9c64c49fba8680 100644 (file)
@@ -95,16 +95,16 @@ _token_list_append_list (token_list_t *list, token_list_t *tail);
 static int
 _token_list_equal_ignoring_space (token_list_t *a, token_list_t *b);
 
-static active_list_t *
-_active_list_push (active_list_t *list,
-                  const char *identifier,
-                  token_node_t *marker);
+static void
+_parser_active_list_push (glcpp_parser_t *parser,
+                         const char *identifier,
+                         token_node_t *marker);
 
-static active_list_t *
-_active_list_pop (active_list_t *list);
+static void
+_parser_active_list_pop (glcpp_parser_t *parser);
 
-int
-_active_list_contains (active_list_t *list, const char *identifier);
+static int
+_parser_active_list_contains (glcpp_parser_t *parser, const char *identifier);
 
 static void
 _glcpp_parser_expand_if (glcpp_parser_t *parser, int type, token_list_t *list);
@@ -1468,7 +1468,7 @@ _glcpp_parser_expand_node (glcpp_parser_t *parser,
 
        /* Finally, don't expand this macro if we're already actively
         * expanding it, (to avoid infinite recursion). */
-       if (_active_list_contains (parser->active, identifier)) {
+       if (_parser_active_list_contains (parser, identifier)) {
                /* We change the token type here from IDENTIFIER to
                 * OTHER to prevent any future expansion of this
                 * unexpanded token. */
@@ -1498,51 +1498,53 @@ _glcpp_parser_expand_node (glcpp_parser_t *parser,
        return _glcpp_parser_expand_function (parser, node, last);
 }
 
-/* Push a new identifier onto the active list, returning the new list.
+/* Push a new identifier onto the parser's active list.
  *
  * Here, 'marker' is the token node that appears in the list after the
  * expansion of 'identifier'. That is, when the list iterator begins
- * examinging 'marker', then it is time to pop this node from the
+ * examining 'marker', then it is time to pop this node from the
  * active stack.
  */
-active_list_t *
-_active_list_push (active_list_t *list,
-                  const char *identifier,
-                  token_node_t *marker)
+static void
+_parser_active_list_push (glcpp_parser_t *parser,
+                         const char *identifier,
+                         token_node_t *marker)
 {
        active_list_t *node;
 
-       node = ralloc (list, active_list_t);
+       node = ralloc (parser->active, active_list_t);
        node->identifier = ralloc_strdup (node, identifier);
        node->marker = marker;
-       node->next = list;
+       node->next = parser->active;
 
-       return node;
+       parser->active = node;
 }
 
-active_list_t *
-_active_list_pop (active_list_t *list)
+static void
+_parser_active_list_pop (glcpp_parser_t *parser)
 {
-       active_list_t *node = list;
+       active_list_t *node = parser->active;
 
-       if (node == NULL)
-               return NULL;
+       if (node == NULL) {
+               parser->active = NULL;
+               return;
+       }
 
-       node = list->next;
-       ralloc_free (list);
+       node = parser->active->next;
+       ralloc_free (parser->active);
 
-       return node;
+       parser->active = node;
 }
 
-int
-_active_list_contains (active_list_t *list, const char *identifier)
+static int
+_parser_active_list_contains (glcpp_parser_t *parser, const char *identifier)
 {
        active_list_t *node;
 
-       if (list == NULL)
+       if (parser->active == NULL)
                return 0;
 
-       for (node = list; node; node = node->next)
+       for (node = parser->active; node; node = node->next)
                if (strcmp (node->identifier, identifier) == 0)
                        return 1;
 
@@ -1561,6 +1563,7 @@ _glcpp_parser_expand_token_list (glcpp_parser_t *parser,
        token_node_t *node_prev;
        token_node_t *node, *last = NULL;
        token_list_t *expansion;
+       active_list_t *active_initial = parser->active;
 
        if (list == NULL)
                return;
@@ -1573,10 +1576,8 @@ _glcpp_parser_expand_token_list (glcpp_parser_t *parser,
        while (node) {
 
                while (parser->active && parser->active->marker == node)
-                       parser->active = _active_list_pop (parser->active);
+                       _parser_active_list_pop (parser);
 
-               /* Find the expansion for node, which will replace all
-                * nodes from node to last, inclusive. */
                expansion = _glcpp_parser_expand_node (parser, node, &last);
                if (expansion) {
                        token_node_t *n;
@@ -1585,12 +1586,12 @@ _glcpp_parser_expand_token_list (glcpp_parser_t *parser,
                                while (parser->active &&
                                       parser->active->marker == n)
                                {
-                                       parser->active = _active_list_pop (parser->active);
+                                       _parser_active_list_pop (parser);
                                }
 
-                       parser->active = _active_list_push (parser->active,
-                                                           node->token->value.str,
-                                                           last->next);
+                       _parser_active_list_push (parser,
+                                                 node->token->value.str,
+                                                 last->next);
                        
                        /* Splice expansion into list, supporting a
                         * simple deletion if the expansion is
@@ -1617,8 +1618,11 @@ _glcpp_parser_expand_token_list (glcpp_parser_t *parser,
                node = node_prev ? node_prev->next : list->head;
        }
 
-       while (parser->active)
-               parser->active = _active_list_pop (parser->active);
+       /* Remove any lingering effects of this invocation on the
+        * active list. That is, pop until the list looks like it did
+        * at the beginning of this function. */
+       while (parser->active && parser->active != active_initial)
+               _parser_active_list_pop (parser);
 
        list->non_space_tail = list->tail;
 }
diff --git a/src/glsl/glcpp/tests/084-unbalanced-parentheses.c.expected b/src/glsl/glcpp/tests/084-unbalanced-parentheses.c.expected
new file mode 100644 (file)
index 0000000..af49a37
--- /dev/null
@@ -0,0 +1,2 @@
+0:2(8): preprocessor error: syntax error, unexpected $end
+
diff --git a/src/glsl/glcpp/tests/093-divide-by-zero.c.expected b/src/glsl/glcpp/tests/093-divide-by-zero.c.expected
new file mode 100644 (file)
index 0000000..08f183f
--- /dev/null
@@ -0,0 +1,4 @@
+0:1(13): preprocessor error: division by 0 in preprocessor directive
+
+
+
index a9c6f36def8be06613f94a8820535b05b664d3c6..04497b1791319a6f00941114268c3e9d5a4024bc 100644 (file)
@@ -1,2 +1,13 @@
+/* glcpp is generating a division-by-zero error for this case.  It's
+ * easy to argue that it should be short-circuiting the evaluation and
+ * not generating the diagnostic (which happens to be what gcc does).
+ * But it doesn't seem like we should force this behavior on our
+ * pre-processor, (and, as always, the GLSL specification of the
+ * pre-processor is too vague on this point).
+ *
+ * If a short-circuit evaluation optimization does get added to the
+ * pre-processor then it would legitimate to update the expected file
+ * for this test.
+*/
 #if 1 || (1 / 0)
 #endif
diff --git a/src/glsl/glcpp/tests/094-divide-by-zero-short-circuit.c.expected b/src/glsl/glcpp/tests/094-divide-by-zero-short-circuit.c.expected
new file mode 100644 (file)
index 0000000..84fdc50
--- /dev/null
@@ -0,0 +1,15 @@
+0:12(17): preprocessor error: division by 0 in preprocessor directive
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/glsl/glcpp/tests/095-recursive-define.c.expected b/src/glsl/glcpp/tests/095-recursive-define.c.expected
new file mode 100644 (file)
index 0000000..c7aa18f
--- /dev/null
@@ -0,0 +1,4 @@
+
+
+B(0, C)
+
index 5dc08ea6acbef7bb3427e0377f5425c8a4a81020..e8f3b546387049a7bd2b028d680f6e794f76900b 100755 (executable)
@@ -2,6 +2,34 @@
 
 trap 'rm $test.valgrind-errors; exit 1' INT QUIT
 
+usage ()
+{
+    cat <<EOF
+Usage: glcpp [options...]
+
+Run the test suite for mesa's GLSL pre-processor.
+
+Valid options include:
+
+       --valgrind      Run the test suite a second time under valgrind
+EOF
+}
+
+# Parse command-line options
+for option; do
+    if [ "${option}" = '--help' ] ; then
+       usage
+       exit 0
+    elif [ "${option}" = '--valgrind' ] ; then
+       do_valgrind=yes
+    else
+       echo "Unrecognized option: $option" >&2
+       echo >&2
+       usage
+       exit 1
+    fi
+done
+
 total=0
 pass=0
 clean=0
@@ -24,23 +52,25 @@ echo ""
 echo "$pass/$total tests returned correct results"
 echo ""
 
-echo "====== Testing for valgrind cleanliness ======"
-for test in *.c; do
-    echo -n "Testing $test with valgrind..."
-    valgrind --error-exitcode=31 --log-file=$test.valgrind-errors ../glcpp < $test >/dev/null 2>&1
-    if [ "$?" = "31" ]; then
-       echo "ERRORS"
-       cat $test.valgrind-errors
-    else
-       echo "CLEAN"
-       clean=$((clean+1))
-       rm $test.valgrind-errors
-    fi
-done
+if [ "$do_valgrind" = "yes" ]; then
+    echo "====== Testing for valgrind cleanliness ======"
+    for test in *.c; do
+       echo -n "Testing $test with valgrind..."
+       valgrind --error-exitcode=31 --log-file=$test.valgrind-errors ../glcpp < $test >/dev/null 2>&1
+       if [ "$?" = "31" ]; then
+           echo "ERRORS"
+           cat $test.valgrind-errors
+       else
+           echo "CLEAN"
+           clean=$((clean+1))
+           rm $test.valgrind-errors
+       fi
+    done
 
-echo ""
-echo "$pass/$total tests returned correct results"
-echo "$clean/$total tests are valgrind-clean"
+    echo ""
+    echo "$pass/$total tests returned correct results"
+    echo "$clean/$total tests are valgrind-clean"
+fi
 
 if [ "$pass" = "$total" ] && [ "$clean" = "$total" ]; then
     exit 0
index e8c60936fb6877c0722307522d7eb280b78dd649..5bb3a6f25a34d7dbcd75f1766542f4cf1b6bf5fb 100644 (file)
@@ -211,14 +211,13 @@ _mesa_glsl_process_extension(const char *name, YYLTYPE *name_locp,
         state->ARB_draw_buffers_warn = (ext_mode == extension_warn);
       }
    } else if (strcmp(name, "GL_ARB_draw_instanced") == 0) {
+      state->ARB_draw_instanced_enable = (ext_mode != extension_disable);
+      state->ARB_draw_instanced_warn = (ext_mode == extension_warn);
+
       /* This extension is only supported in vertex shaders.
        */
-      if (state->target != vertex_shader) {
-        unsupported = true;
-      } else {
-        state->ARB_draw_instanced_enable = (ext_mode != extension_disable);
-        state->ARB_draw_instanced_warn = (ext_mode == extension_warn);
-      }
+      unsupported = (state->target != vertex_shader)
+        ||  !state->extensions->ARB_draw_instanced;
    } else if (strcmp(name, "GL_ARB_explicit_attrib_location") == 0) {
       state->ARB_explicit_attrib_location_enable =
         (ext_mode != extension_disable);
@@ -242,13 +241,13 @@ _mesa_glsl_process_extension(const char *name, YYLTYPE *name_locp,
 
       unsupported = !state->extensions->EXT_texture_array;
    } else if (strcmp(name, "GL_ARB_shader_stencil_export") == 0) {
-      if (state->target != fragment_shader) {
-        unsupported = true;
-      } else {
-        state->ARB_shader_stencil_export_enable = (ext_mode != extension_disable);
-        state->ARB_shader_stencil_export_warn = (ext_mode == extension_warn);
-        unsupported = !state->extensions->ARB_shader_stencil_export;
-      }
+      state->ARB_shader_stencil_export_enable = (ext_mode != extension_disable);
+      state->ARB_shader_stencil_export_warn = (ext_mode == extension_warn);
+
+      /* This extension is only supported in fragment shaders.
+       */
+      unsupported = (state->target != fragment_shader)
+        || !state->extensions->ARB_shader_stencil_export;
    } else if (strcmp(name, "GL_AMD_conservative_depth") == 0) {
       /* The AMD_conservative spec does not forbid requiring the extension in
        * the vertex shader.
@@ -769,7 +768,7 @@ do_common_optimization(exec_list *ir, bool linked, unsigned max_unroll_iteration
    progress = do_if_simplification(ir) || progress;
    progress = do_discard_simplification(ir) || progress;
    progress = do_copy_propagation(ir) || progress;
-   /*progress = do_copy_propagation_elements(ir) || progress;*/
+   progress = do_copy_propagation_elements(ir) || progress;
    if (linked)
       progress = do_dead_code(ir) || progress;
    else
index b5c016fb3995e1be598b9569322dcdf1d372b94e..6df0e160ae382ef360060550ea7010cd62a618e9 100644 (file)
@@ -268,8 +268,8 @@ extern "C" {
 extern int preprocess(void *ctx, const char **shader, char **info_log,
                       const struct gl_extensions *extensions, int api);
 
-extern void _mesa_destroy_shader_compiler();
-extern void _mesa_destroy_shader_compiler_caches();
+extern void _mesa_destroy_shader_compiler(void);
+extern void _mesa_destroy_shader_compiler_caches(void);
 
 #ifdef __cplusplus
 }
index 39d4ebc7107e1b8b1c4ea60454194c3c06cf7641..a41984310b3e9930770999230504d11fcd28508e 100644 (file)
@@ -253,6 +253,16 @@ enum ir_depth_layout {
 const char*
 depth_layout_string(ir_depth_layout layout);
 
+/**
+ * Description of built-in state associated with a uniform
+ *
+ * \sa ir_variable::state_slots
+ */
+struct ir_state_slot {
+   int tokens[5];
+   int swizzle;
+};
+
 class ir_variable : public ir_instruction {
 public:
    ir_variable(const struct glsl_type *, const char *, ir_variable_mode);
@@ -385,6 +395,22 @@ public:
     */
    int location;
 
+   /**
+    * Built-in state that backs this uniform
+    *
+    * Once set at variable creation, \c state_slots must remain invariant.
+    * This is because, ideally, this array would be shared by all clones of
+    * this variable in the IR tree.  In other words, we'd really like for it
+    * to be a fly-weight.
+    *
+    * If the variable is not a uniform, \c num_state_slots will be zero and
+    * \c state_slots will be \c NULL.
+    */
+   /*@{*/
+   unsigned num_state_slots;    /**< Number of state slots used */
+   ir_state_slot *state_slots;  /**< State descriptors. */
+   /*@}*/
+
    /**
     * Emit a warning if this variable is accessed.
     */
index 2c0574dc6bf9bb5059808856cff23a12f191f6f9..069bb85e8ded0978e477359e612bd45fd60a8a23 100644 (file)
@@ -53,6 +53,18 @@ ir_variable::clone(void *mem_ctx, struct hash_table *ht) const
    var->origin_upper_left = this->origin_upper_left;
    var->pixel_center_integer = this->pixel_center_integer;
    var->explicit_location = this->explicit_location;
+
+   var->num_state_slots = this->num_state_slots;
+   if (this->state_slots) {
+      /* FINISHME: This really wants to use something like talloc_reference, but
+       * FINISHME: ralloc doesn't have any similar function.
+       */
+      var->state_slots = ralloc_array(var, ir_state_slot,
+                                     this->num_state_slots);
+      memcpy(var->state_slots, this->state_slots,
+            sizeof(this->state_slots[0]) * var->num_state_slots);
+   }
+
    if (this->explicit_location)
       var->location = this->location;
 
index a84f8dfc8a1c0635043f46565cf1baf7eae35e46..02f3d8149260bc971724266dc21de8d4d35a6804 100644 (file)
 #include "glsl_types.h"
 #include "glsl_parser_extras.h"
 
+extern "C" {
+#include "program/hash_table.h"
+}
+
 static void print_type(const glsl_type *t);
 
 void
@@ -67,6 +71,21 @@ _mesa_print_ir(exec_list *instructions,
    printf("\n)");
 }
 
+ir_print_visitor::ir_print_visitor()
+{
+   indentation = 0;
+   printable_names =
+      hash_table_ctor(32, hash_table_pointer_hash, hash_table_pointer_compare);
+   symbols = _mesa_symbol_table_ctor();
+   mem_ctx = ralloc_context(NULL);
+}
+
+ir_print_visitor::~ir_print_visitor()
+{
+   hash_table_dtor(printable_names);
+   _mesa_symbol_table_dtor(symbols);
+   ralloc_free(mem_ctx);
+}
 
 void ir_print_visitor::indent(void)
 {
@@ -74,6 +93,26 @@ void ir_print_visitor::indent(void)
       printf("  ");
 }
 
+const char *
+ir_print_visitor::unique_name(ir_variable *var)
+{
+   /* Do we already have a name for this variable? */
+   const char *name = (const char *) hash_table_find(this->printable_names, var);
+   if (name != NULL)
+      return name;
+
+   /* If there's no conflict, just use the original name */
+   if (_mesa_symbol_table_find_symbol(this->symbols, -1, var->name) == NULL) {
+      name = var->name;
+   } else {
+      static unsigned i = 1;
+      name = ralloc_asprintf(this->mem_ctx, "%s@%u", var->name, ++i);
+   }
+   hash_table_insert(this->printable_names, (void *) name, var);
+   _mesa_symbol_table_add_symbol(this->symbols, -1, name, var);
+   return name;
+}
+
 static void
 print_type(const glsl_type *t)
 {
@@ -104,12 +143,13 @@ void ir_print_visitor::visit(ir_variable *ir)
          cent, inv, mode[ir->mode], interp[ir->interpolation]);
 
    print_type(ir->type);
-   printf(" %s@%p)", ir->name, (void *) ir);
+   printf(" %s)", unique_name(ir));
 }
 
 
 void ir_print_visitor::visit(ir_function_signature *ir)
 {
+   _mesa_symbol_table_push_scope(symbols);
    printf("(signature ");
    indentation++;
 
@@ -148,6 +188,7 @@ void ir_print_visitor::visit(ir_function_signature *ir)
    indent();
    printf("))\n");
    indentation--;
+   _mesa_symbol_table_pop_scope(symbols);
 }
 
 
@@ -265,7 +306,7 @@ void ir_print_visitor::visit(ir_swizzle *ir)
 void ir_print_visitor::visit(ir_dereference_variable *ir)
 {
    ir_variable *var = ir->variable_referenced();
-   printf("(var_ref %s@%p) ", var->name, (void *) var);
+   printf("(var_ref %s) ", unique_name(var));
 }
 
 
index 4feeb8c184dd79580ea612cbc3da2d7622ddbf21..c7136f11a3bdfdc8652ca968fc6d04f0bd0e5115 100644 (file)
 #include "ir.h"
 #include "ir_visitor.h"
 
+extern "C" {
+#include "program/symbol_table.h"
+}
+
 extern void _mesa_print_ir(exec_list *instructions,
                           struct _mesa_glsl_parse_state *state);
 
@@ -37,15 +41,8 @@ extern void _mesa_print_ir(exec_list *instructions,
  */
 class ir_print_visitor : public ir_visitor {
 public:
-   ir_print_visitor()
-   {
-      indentation = 0;
-   }
-
-   virtual ~ir_print_visitor()
-   {
-      /* empty */
-   }
+   ir_print_visitor();
+   virtual ~ir_print_visitor();
 
    void indent(void);
 
@@ -77,6 +74,20 @@ public:
    /*@}*/
 
 private:
+   /**
+    * Fetch/generate a unique name for ir_variable.
+    *
+    * GLSL IR permits multiple ir_variables to share the same name.  This works
+    * fine until we try to print it, when we really need a unique one.
+    */
+   const char *unique_name(ir_variable *var);
+
+   /** A mapping from ir_variable * -> unique printable names. */
+   hash_table *printable_names;
+   _mesa_symbol_table *symbols;
+
+   void *mem_ctx;
+
    int indentation;
 };
 
index 0fc3baf869021166c7544d510490f9183a0cae11..7b1c19d65aa75fa2966db7fdf96714eff0f885e8 100644 (file)
@@ -254,7 +254,7 @@ ir_validate::visit_leave(ir_expression *ir)
 
    case ir_unop_f2i:
       assert(ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT);
-      assert(ir->type->base_type == GLSL_TYPE_INT);
+      assert(ir->type->is_integer());
       break;
    case ir_unop_i2f:
       assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT);
@@ -269,12 +269,12 @@ ir_validate::visit_leave(ir_expression *ir)
       assert(ir->type->base_type == GLSL_TYPE_FLOAT);
       break;
    case ir_unop_i2b:
-      assert(ir->operands[0]->type->base_type == GLSL_TYPE_INT);
+      assert(ir->operands[0]->type->is_integer());
       assert(ir->type->base_type == GLSL_TYPE_BOOL);
       break;
    case ir_unop_b2i:
       assert(ir->operands[0]->type->base_type == GLSL_TYPE_BOOL);
-      assert(ir->type->base_type == GLSL_TYPE_INT);
+      assert(ir->type->is_integer());
       break;
    case ir_unop_u2f:
       assert(ir->operands[0]->type->base_type == GLSL_TYPE_UINT);
@@ -473,6 +473,21 @@ ir_validate::visit(ir_variable *ir)
       assert(ralloc_parent(ir->name) == ir);
 
    hash_table_insert(ht, ir, ir);
+
+
+   /* If a variable is an array, verify that the maximum array index is in
+    * bounds.  There was once an error in AST-to-HIR conversion that set this
+    * to be out of bounds.
+    */
+   if (ir->type->array_size() > 0) {
+      if (ir->max_array_access >= ir->type->length) {
+        printf("ir_variable has maximum access out of bounds (%d vs %d)\n",
+               ir->max_array_access, ir->type->length - 1);
+        ir->print();
+        abort();
+      }
+   }
+
    return visit_continue;
 }
 
index 18a3e0fb0d9e120c0d2f1f0537708bd2c91e739b..f3577175691f7cb38313f08d463ca0e905dd558c 100644 (file)
 #include "glsl_parser_extras.h"
 #include "glsl_symbol_table.h"
 #include "builtin_variables.h"
+#include "main/uniforms.h"
+#include "program/prog_parameter.h"
+#include "program/prog_statevars.h"
+#include "program/prog_instruction.h"
 
 static void generate_ARB_draw_buffers_variables(exec_list *,
                                                struct _mesa_glsl_parse_state *,
@@ -35,10 +39,259 @@ generate_ARB_draw_instanced_variables(exec_list *,
                                       struct _mesa_glsl_parse_state *,
                                       bool, _mesa_glsl_parser_targets);
 
+static struct gl_builtin_uniform_element gl_DepthRange_elements[] = {
+   {"near", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_XXXX},
+   {"far", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_YYYY},
+   {"diff", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_ZZZZ},
+};
+
+static struct gl_builtin_uniform_element gl_ClipPlane_elements[] = {
+   {NULL, {STATE_CLIPPLANE, 0, 0}, SWIZZLE_XYZW}
+};
+
+static struct gl_builtin_uniform_element gl_Point_elements[] = {
+   {"size", {STATE_POINT_SIZE}, SWIZZLE_XXXX},
+   {"sizeMin", {STATE_POINT_SIZE}, SWIZZLE_YYYY},
+   {"sizeMax", {STATE_POINT_SIZE}, SWIZZLE_ZZZZ},
+   {"fadeThresholdSize", {STATE_POINT_SIZE}, SWIZZLE_WWWW},
+   {"distanceConstantAttenuation", {STATE_POINT_ATTENUATION}, SWIZZLE_XXXX},
+   {"distanceLinearAttenuation", {STATE_POINT_ATTENUATION}, SWIZZLE_YYYY},
+   {"distanceQuadraticAttenuation", {STATE_POINT_ATTENUATION}, SWIZZLE_ZZZZ},
+};
+
+static struct gl_builtin_uniform_element gl_FrontMaterial_elements[] = {
+   {"emission", {STATE_MATERIAL, 0, STATE_EMISSION}, SWIZZLE_XYZW},
+   {"ambient", {STATE_MATERIAL, 0, STATE_AMBIENT}, SWIZZLE_XYZW},
+   {"diffuse", {STATE_MATERIAL, 0, STATE_DIFFUSE}, SWIZZLE_XYZW},
+   {"specular", {STATE_MATERIAL, 0, STATE_SPECULAR}, SWIZZLE_XYZW},
+   {"shininess", {STATE_MATERIAL, 0, STATE_SHININESS}, SWIZZLE_XXXX},
+};
+
+static struct gl_builtin_uniform_element gl_BackMaterial_elements[] = {
+   {"emission", {STATE_MATERIAL, 1, STATE_EMISSION}, SWIZZLE_XYZW},
+   {"ambient", {STATE_MATERIAL, 1, STATE_AMBIENT}, SWIZZLE_XYZW},
+   {"diffuse", {STATE_MATERIAL, 1, STATE_DIFFUSE}, SWIZZLE_XYZW},
+   {"specular", {STATE_MATERIAL, 1, STATE_SPECULAR}, SWIZZLE_XYZW},
+   {"shininess", {STATE_MATERIAL, 1, STATE_SHININESS}, SWIZZLE_XXXX},
+};
+
+static struct gl_builtin_uniform_element gl_LightSource_elements[] = {
+   {"ambient", {STATE_LIGHT, 0, STATE_AMBIENT}, SWIZZLE_XYZW},
+   {"diffuse", {STATE_LIGHT, 0, STATE_DIFFUSE}, SWIZZLE_XYZW},
+   {"specular", {STATE_LIGHT, 0, STATE_SPECULAR}, SWIZZLE_XYZW},
+   {"position", {STATE_LIGHT, 0, STATE_POSITION}, SWIZZLE_XYZW},
+   {"halfVector", {STATE_LIGHT, 0, STATE_HALF_VECTOR}, SWIZZLE_XYZW},
+   {"spotDirection", {STATE_LIGHT, 0, STATE_SPOT_DIRECTION},
+    MAKE_SWIZZLE4(SWIZZLE_X,
+                 SWIZZLE_Y,
+                 SWIZZLE_Z,
+                 SWIZZLE_Z)},
+   {"spotCosCutoff", {STATE_LIGHT, 0, STATE_SPOT_DIRECTION}, SWIZZLE_WWWW},
+   {"spotCutoff", {STATE_LIGHT, 0, STATE_SPOT_CUTOFF}, SWIZZLE_XXXX},
+   {"spotExponent", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_WWWW},
+   {"constantAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_XXXX},
+   {"linearAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_YYYY},
+   {"quadraticAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_ZZZZ},
+};
+
+static struct gl_builtin_uniform_element gl_LightModel_elements[] = {
+   {"ambient", {STATE_LIGHTMODEL_AMBIENT, 0}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_FrontLightModelProduct_elements[] = {
+   {"sceneColor", {STATE_LIGHTMODEL_SCENECOLOR, 0}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_BackLightModelProduct_elements[] = {
+   {"sceneColor", {STATE_LIGHTMODEL_SCENECOLOR, 1}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_FrontLightProduct_elements[] = {
+   {"ambient", {STATE_LIGHTPROD, 0, 0, STATE_AMBIENT}, SWIZZLE_XYZW},
+   {"diffuse", {STATE_LIGHTPROD, 0, 0, STATE_DIFFUSE}, SWIZZLE_XYZW},
+   {"specular", {STATE_LIGHTPROD, 0, 0, STATE_SPECULAR}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_BackLightProduct_elements[] = {
+   {"ambient", {STATE_LIGHTPROD, 0, 1, STATE_AMBIENT}, SWIZZLE_XYZW},
+   {"diffuse", {STATE_LIGHTPROD, 0, 1, STATE_DIFFUSE}, SWIZZLE_XYZW},
+   {"specular", {STATE_LIGHTPROD, 0, 1, STATE_SPECULAR}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_TextureEnvColor_elements[] = {
+   {NULL, {STATE_TEXENV_COLOR, 0}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_EyePlaneS_elements[] = {
+   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_S}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_EyePlaneT_elements[] = {
+   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_T}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_EyePlaneR_elements[] = {
+   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_R}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_EyePlaneQ_elements[] = {
+   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_Q}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_ObjectPlaneS_elements[] = {
+   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_S}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_ObjectPlaneT_elements[] = {
+   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_T}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_ObjectPlaneR_elements[] = {
+   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_R}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_ObjectPlaneQ_elements[] = {
+   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_Q}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_Fog_elements[] = {
+   {"color", {STATE_FOG_COLOR}, SWIZZLE_XYZW},
+   {"density", {STATE_FOG_PARAMS}, SWIZZLE_XXXX},
+   {"start", {STATE_FOG_PARAMS}, SWIZZLE_YYYY},
+   {"end", {STATE_FOG_PARAMS}, SWIZZLE_ZZZZ},
+   {"scale", {STATE_FOG_PARAMS}, SWIZZLE_WWWW},
+};
+
+static struct gl_builtin_uniform_element gl_NormalScale_elements[] = {
+   {NULL, {STATE_NORMAL_SCALE}, SWIZZLE_XXXX},
+};
+
+static struct gl_builtin_uniform_element gl_MESABumpRotMatrix0_elements[] = {
+   {NULL, {STATE_INTERNAL, STATE_ROT_MATRIX_0}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_MESABumpRotMatrix1_elements[] = {
+   {NULL, {STATE_INTERNAL, STATE_ROT_MATRIX_1}, SWIZZLE_XYZW},
+};
+
+static struct gl_builtin_uniform_element gl_MESAFogParamsOptimized_elements[] = {
+   {NULL, {STATE_INTERNAL, STATE_FOG_PARAMS_OPTIMIZED}, SWIZZLE_XYZW},
+};
+
+#define MATRIX(name, statevar, modifier)                               \
+   static struct gl_builtin_uniform_element name ## _elements[] = {    \
+      { NULL, { statevar, 0, 0, 0, modifier}, SWIZZLE_XYZW },          \
+      { NULL, { statevar, 0, 1, 1, modifier}, SWIZZLE_XYZW },          \
+      { NULL, { statevar, 0, 2, 2, modifier}, SWIZZLE_XYZW },          \
+      { NULL, { statevar, 0, 3, 3, modifier}, SWIZZLE_XYZW },          \
+   }
+
+MATRIX(gl_ModelViewMatrix,
+       STATE_MODELVIEW_MATRIX, STATE_MATRIX_TRANSPOSE);
+MATRIX(gl_ModelViewMatrixInverse,
+       STATE_MODELVIEW_MATRIX, STATE_MATRIX_INVTRANS);
+MATRIX(gl_ModelViewMatrixTranspose,
+       STATE_MODELVIEW_MATRIX, 0);
+MATRIX(gl_ModelViewMatrixInverseTranspose,
+       STATE_MODELVIEW_MATRIX, STATE_MATRIX_INVERSE);
+
+MATRIX(gl_ProjectionMatrix,
+       STATE_PROJECTION_MATRIX, STATE_MATRIX_TRANSPOSE);
+MATRIX(gl_ProjectionMatrixInverse,
+       STATE_PROJECTION_MATRIX, STATE_MATRIX_INVTRANS);
+MATRIX(gl_ProjectionMatrixTranspose,
+       STATE_PROJECTION_MATRIX, 0);
+MATRIX(gl_ProjectionMatrixInverseTranspose,
+       STATE_PROJECTION_MATRIX, STATE_MATRIX_INVERSE);
+
+MATRIX(gl_ModelViewProjectionMatrix,
+       STATE_MVP_MATRIX, STATE_MATRIX_TRANSPOSE);
+MATRIX(gl_ModelViewProjectionMatrixInverse,
+       STATE_MVP_MATRIX, STATE_MATRIX_INVTRANS);
+MATRIX(gl_ModelViewProjectionMatrixTranspose,
+       STATE_MVP_MATRIX, 0);
+MATRIX(gl_ModelViewProjectionMatrixInverseTranspose,
+       STATE_MVP_MATRIX, STATE_MATRIX_INVERSE);
+
+MATRIX(gl_TextureMatrix,
+       STATE_TEXTURE_MATRIX, STATE_MATRIX_TRANSPOSE);
+MATRIX(gl_TextureMatrixInverse,
+       STATE_TEXTURE_MATRIX, STATE_MATRIX_INVTRANS);
+MATRIX(gl_TextureMatrixTranspose,
+       STATE_TEXTURE_MATRIX, 0);
+MATRIX(gl_TextureMatrixInverseTranspose,
+       STATE_TEXTURE_MATRIX, STATE_MATRIX_INVERSE);
+
+static struct gl_builtin_uniform_element gl_NormalMatrix_elements[] = {
+   { NULL, { STATE_MODELVIEW_MATRIX, 0, 0, 0, STATE_MATRIX_INVERSE},
+     SWIZZLE_XYZW },
+   { NULL, { STATE_MODELVIEW_MATRIX, 0, 1, 1, STATE_MATRIX_INVERSE},
+     SWIZZLE_XYZW },
+   { NULL, { STATE_MODELVIEW_MATRIX, 0, 2, 2, STATE_MATRIX_INVERSE},
+     SWIZZLE_XYZW },
+};
+
+#undef MATRIX
+
+#define STATEVAR(name) {#name, name ## _elements, Elements(name ## _elements)}
+
+const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[] = {
+   STATEVAR(gl_DepthRange),
+   STATEVAR(gl_ClipPlane),
+   STATEVAR(gl_Point),
+   STATEVAR(gl_FrontMaterial),
+   STATEVAR(gl_BackMaterial),
+   STATEVAR(gl_LightSource),
+   STATEVAR(gl_LightModel),
+   STATEVAR(gl_FrontLightModelProduct),
+   STATEVAR(gl_BackLightModelProduct),
+   STATEVAR(gl_FrontLightProduct),
+   STATEVAR(gl_BackLightProduct),
+   STATEVAR(gl_TextureEnvColor),
+   STATEVAR(gl_EyePlaneS),
+   STATEVAR(gl_EyePlaneT),
+   STATEVAR(gl_EyePlaneR),
+   STATEVAR(gl_EyePlaneQ),
+   STATEVAR(gl_ObjectPlaneS),
+   STATEVAR(gl_ObjectPlaneT),
+   STATEVAR(gl_ObjectPlaneR),
+   STATEVAR(gl_ObjectPlaneQ),
+   STATEVAR(gl_Fog),
+
+   STATEVAR(gl_ModelViewMatrix),
+   STATEVAR(gl_ModelViewMatrixInverse),
+   STATEVAR(gl_ModelViewMatrixTranspose),
+   STATEVAR(gl_ModelViewMatrixInverseTranspose),
+
+   STATEVAR(gl_ProjectionMatrix),
+   STATEVAR(gl_ProjectionMatrixInverse),
+   STATEVAR(gl_ProjectionMatrixTranspose),
+   STATEVAR(gl_ProjectionMatrixInverseTranspose),
+
+   STATEVAR(gl_ModelViewProjectionMatrix),
+   STATEVAR(gl_ModelViewProjectionMatrixInverse),
+   STATEVAR(gl_ModelViewProjectionMatrixTranspose),
+   STATEVAR(gl_ModelViewProjectionMatrixInverseTranspose),
+
+   STATEVAR(gl_TextureMatrix),
+   STATEVAR(gl_TextureMatrixInverse),
+   STATEVAR(gl_TextureMatrixTranspose),
+   STATEVAR(gl_TextureMatrixInverseTranspose),
+
+   STATEVAR(gl_NormalMatrix),
+   STATEVAR(gl_NormalScale),
+
+   STATEVAR(gl_MESABumpRotMatrix0),
+   STATEVAR(gl_MESABumpRotMatrix1),
+   STATEVAR(gl_MESAFogParamsOptimized),
+
+   {NULL, NULL, 0}
+};
+
 static ir_variable *
-add_variable(const char *name, enum ir_variable_mode mode, int slot,
-            const glsl_type *type, exec_list *instructions,
-                    glsl_symbol_table *symtab)
+add_variable(exec_list *instructions, glsl_symbol_table *symtab,
+            const char *name, const glsl_type *type,
+            enum ir_variable_mode mode, int slot)
 {
    ir_variable *var = new(symtab) ir_variable(type, name, mode);
 
@@ -71,17 +324,51 @@ add_variable(const char *name, enum ir_variable_mode mode, int slot,
 }
 
 static ir_variable *
-add_uniform(exec_list *instructions,
-           struct _mesa_glsl_parse_state *state,
+add_uniform(exec_list *instructions, glsl_symbol_table *symtab,
            const char *name, const glsl_type *type)
 {
-   return add_variable(name, ir_var_uniform, -1, type, instructions,
-                      state->symbols);
+   ir_variable *const uni =
+      add_variable(instructions, symtab, name, type, ir_var_uniform, -1);
+
+   unsigned i;
+   for (i = 0; _mesa_builtin_uniform_desc[i].name != NULL; i++) {
+      if (strcmp(_mesa_builtin_uniform_desc[i].name, name) == 0) {
+        break;
+      }
+   }
+
+   assert(_mesa_builtin_uniform_desc[i].name != NULL);
+   const struct gl_builtin_uniform_desc* const statevar =
+      &_mesa_builtin_uniform_desc[i];
+
+   const unsigned array_count = type->is_array() ? type->length : 1;
+   uni->num_state_slots = array_count * statevar->num_elements;
+
+   ir_state_slot *slots =
+      ralloc_array(uni, ir_state_slot, uni->num_state_slots);
+
+   uni->state_slots = slots;
+
+   for (unsigned a = 0; a < array_count; a++) {
+      for (unsigned j = 0; j < statevar->num_elements; j++) {
+        struct gl_builtin_uniform_element *element = &statevar->elements[j];
+
+        memcpy(slots->tokens, element->tokens, sizeof(element->tokens));
+        if (type->is_array()) {
+           slots->tokens[1] = a;
+        }
+
+        slots->swizzle = element->swizzle;
+        slots++;
+      }
+   }
+
+   return uni;
 }
 
 static void
-add_builtin_variable(const builtin_variable *proto, exec_list *instructions,
-                    glsl_symbol_table *symtab)
+add_builtin_variable(exec_list *instructions, glsl_symbol_table *symtab,
+                    const builtin_variable *proto)
 {
    /* Create a new variable declaration from the description supplied by
     * the caller.
@@ -90,18 +377,21 @@ add_builtin_variable(const builtin_variable *proto, exec_list *instructions,
 
    assert(type != NULL);
 
-   add_variable(proto->name, proto->mode, proto->slot, type, instructions,
-               symtab);
+   if (proto->mode == ir_var_uniform) {
+      add_uniform(instructions, symtab, proto->name, type);
+   } else {
+      add_variable(instructions, symtab, proto->name, type, proto->mode,
+                  proto->slot);
+   }
 }
 
 static void
-add_builtin_constant(exec_list *instructions,
-                    struct _mesa_glsl_parse_state *state,
+add_builtin_constant(exec_list *instructions, glsl_symbol_table *symtab,
                     const char *name, int value)
 {
-   ir_variable *const var = add_variable(name, ir_var_auto,
-                                        -1, glsl_type::int_type,
-                                        instructions, state->symbols);
+   ir_variable *const var = add_variable(instructions, symtab,
+                                        name, glsl_type::int_type,
+                                        ir_var_auto, -1);
    var->constant_value = new(var) ir_constant(value);
 }
 
@@ -112,22 +402,24 @@ static void
 generate_100ES_uniforms(exec_list *instructions,
                     struct _mesa_glsl_parse_state *state)
 {
-   add_builtin_constant(instructions, state, "gl_MaxVertexAttribs",
+   glsl_symbol_table *const symtab = state->symbols;
+
+   add_builtin_constant(instructions, symtab, "gl_MaxVertexAttribs",
                        state->Const.MaxVertexAttribs);
-   add_builtin_constant(instructions, state, "gl_MaxVertexUniformVectors",
+   add_builtin_constant(instructions, symtab, "gl_MaxVertexUniformVectors",
                        state->Const.MaxVertexUniformComponents);
-   add_builtin_constant(instructions, state, "gl_MaxVaryingVectors",
+   add_builtin_constant(instructions, symtab, "gl_MaxVaryingVectors",
                        state->Const.MaxVaryingFloats / 4);
-   add_builtin_constant(instructions, state, "gl_MaxVertexTextureImageUnits",
+   add_builtin_constant(instructions, symtab, "gl_MaxVertexTextureImageUnits",
                        state->Const.MaxVertexTextureImageUnits);
-   add_builtin_constant(instructions, state, "gl_MaxCombinedTextureImageUnits",
+   add_builtin_constant(instructions, symtab, "gl_MaxCombinedTextureImageUnits",
                        state->Const.MaxCombinedTextureImageUnits);
-   add_builtin_constant(instructions, state, "gl_MaxTextureImageUnits",
+   add_builtin_constant(instructions, symtab, "gl_MaxTextureImageUnits",
                        state->Const.MaxTextureImageUnits);
-   add_builtin_constant(instructions, state, "gl_MaxFragmentUniformVectors",
+   add_builtin_constant(instructions, symtab, "gl_MaxFragmentUniformVectors",
                        state->Const.MaxFragmentUniformComponents);
 
-   add_uniform(instructions, state, "gl_DepthRange",
+   add_uniform(instructions, symtab, "gl_DepthRange",
               state->symbols->get_type("gl_DepthRangeParameters"));
 }
 
@@ -135,95 +427,97 @@ static void
 generate_110_uniforms(exec_list *instructions,
                      struct _mesa_glsl_parse_state *state)
 {
+   glsl_symbol_table *const symtab = state->symbols;
+
    for (unsigned i = 0
           ; i < Elements(builtin_110_deprecated_uniforms)
           ; i++) {
-      add_builtin_variable(& builtin_110_deprecated_uniforms[i],
-                          instructions, state->symbols);
+      add_builtin_variable(instructions, symtab,
+                          & builtin_110_deprecated_uniforms[i]);
    }
 
-   add_builtin_constant(instructions, state, "gl_MaxLights",
+   add_builtin_constant(instructions, symtab, "gl_MaxLights",
                        state->Const.MaxLights);
-   add_builtin_constant(instructions, state, "gl_MaxClipPlanes",
+   add_builtin_constant(instructions, symtab, "gl_MaxClipPlanes",
                        state->Const.MaxClipPlanes);
-   add_builtin_constant(instructions, state, "gl_MaxTextureUnits",
+   add_builtin_constant(instructions, symtab, "gl_MaxTextureUnits",
                        state->Const.MaxTextureUnits);
-   add_builtin_constant(instructions, state, "gl_MaxTextureCoords",
+   add_builtin_constant(instructions, symtab, "gl_MaxTextureCoords",
                        state->Const.MaxTextureCoords);
-   add_builtin_constant(instructions, state, "gl_MaxVertexAttribs",
+   add_builtin_constant(instructions, symtab, "gl_MaxVertexAttribs",
                        state->Const.MaxVertexAttribs);
-   add_builtin_constant(instructions, state, "gl_MaxVertexUniformComponents",
+   add_builtin_constant(instructions, symtab, "gl_MaxVertexUniformComponents",
                        state->Const.MaxVertexUniformComponents);
-   add_builtin_constant(instructions, state, "gl_MaxVaryingFloats",
+   add_builtin_constant(instructions, symtab, "gl_MaxVaryingFloats",
                        state->Const.MaxVaryingFloats);
-   add_builtin_constant(instructions, state, "gl_MaxVertexTextureImageUnits",
+   add_builtin_constant(instructions, symtab, "gl_MaxVertexTextureImageUnits",
                        state->Const.MaxVertexTextureImageUnits);
-   add_builtin_constant(instructions, state, "gl_MaxCombinedTextureImageUnits",
+   add_builtin_constant(instructions, symtab, "gl_MaxCombinedTextureImageUnits",
                        state->Const.MaxCombinedTextureImageUnits);
-   add_builtin_constant(instructions, state, "gl_MaxTextureImageUnits",
+   add_builtin_constant(instructions, symtab, "gl_MaxTextureImageUnits",
                        state->Const.MaxTextureImageUnits);
-   add_builtin_constant(instructions, state, "gl_MaxFragmentUniformComponents",
+   add_builtin_constant(instructions, symtab, "gl_MaxFragmentUniformComponents",
                        state->Const.MaxFragmentUniformComponents);
 
    const glsl_type *const mat4_array_type =
       glsl_type::get_array_instance(glsl_type::mat4_type,
                                    state->Const.MaxTextureCoords);
 
-   add_uniform(instructions, state, "gl_TextureMatrix", mat4_array_type);
-   add_uniform(instructions, state, "gl_TextureMatrixInverse", mat4_array_type);
-   add_uniform(instructions, state, "gl_TextureMatrixTranspose", mat4_array_type);
-   add_uniform(instructions, state, "gl_TextureMatrixInverseTranspose", mat4_array_type);
+   add_uniform(instructions, symtab, "gl_TextureMatrix", mat4_array_type);
+   add_uniform(instructions, symtab, "gl_TextureMatrixInverse", mat4_array_type);
+   add_uniform(instructions, symtab, "gl_TextureMatrixTranspose", mat4_array_type);
+   add_uniform(instructions, symtab, "gl_TextureMatrixInverseTranspose", mat4_array_type);
 
-   add_uniform(instructions, state, "gl_DepthRange",
-               state->symbols->get_type("gl_DepthRangeParameters"));
+   add_uniform(instructions, symtab, "gl_DepthRange",
+               symtab->get_type("gl_DepthRangeParameters"));
 
-   add_uniform(instructions, state, "gl_ClipPlane",
+   add_uniform(instructions, symtab, "gl_ClipPlane",
               glsl_type::get_array_instance(glsl_type::vec4_type,
                                             state->Const.MaxClipPlanes));
-   add_uniform(instructions, state, "gl_Point",
-              state->symbols->get_type("gl_PointParameters"));
+   add_uniform(instructions, symtab, "gl_Point",
+              symtab->get_type("gl_PointParameters"));
 
    const glsl_type *const material_parameters_type =
-      state->symbols->get_type("gl_MaterialParameters");
-   add_uniform(instructions, state, "gl_FrontMaterial", material_parameters_type);
-   add_uniform(instructions, state, "gl_BackMaterial", material_parameters_type);
+      symtab->get_type("gl_MaterialParameters");
+   add_uniform(instructions, symtab, "gl_FrontMaterial", material_parameters_type);
+   add_uniform(instructions, symtab, "gl_BackMaterial", material_parameters_type);
 
    const glsl_type *const light_source_array_type =
-      glsl_type::get_array_instance(state->symbols->get_type("gl_LightSourceParameters"), state->Const.MaxLights);
+      glsl_type::get_array_instance(symtab->get_type("gl_LightSourceParameters"), state->Const.MaxLights);
 
-   add_uniform(instructions, state, "gl_LightSource", light_source_array_type);
+   add_uniform(instructions, symtab, "gl_LightSource", light_source_array_type);
 
    const glsl_type *const light_model_products_type =
-      state->symbols->get_type("gl_LightModelProducts");
-   add_uniform(instructions, state, "gl_FrontLightModelProduct",
+      symtab->get_type("gl_LightModelProducts");
+   add_uniform(instructions, symtab, "gl_FrontLightModelProduct",
               light_model_products_type);
-   add_uniform(instructions, state, "gl_BackLightModelProduct",
+   add_uniform(instructions, symtab, "gl_BackLightModelProduct",
               light_model_products_type);
 
    const glsl_type *const light_products_type =
-      glsl_type::get_array_instance(state->symbols->get_type("gl_LightProducts"),
+      glsl_type::get_array_instance(symtab->get_type("gl_LightProducts"),
                                    state->Const.MaxLights);
-   add_uniform(instructions, state, "gl_FrontLightProduct", light_products_type);
-   add_uniform(instructions, state, "gl_BackLightProduct", light_products_type);
+   add_uniform(instructions, symtab, "gl_FrontLightProduct", light_products_type);
+   add_uniform(instructions, symtab, "gl_BackLightProduct", light_products_type);
 
-   add_uniform(instructions, state, "gl_TextureEnvColor",
+   add_uniform(instructions, symtab, "gl_TextureEnvColor",
               glsl_type::get_array_instance(glsl_type::vec4_type,
                                             state->Const.MaxTextureUnits));
 
    const glsl_type *const texcoords_vec4 =
       glsl_type::get_array_instance(glsl_type::vec4_type,
                                    state->Const.MaxTextureCoords);
-   add_uniform(instructions, state, "gl_EyePlaneS", texcoords_vec4);
-   add_uniform(instructions, state, "gl_EyePlaneT", texcoords_vec4);
-   add_uniform(instructions, state, "gl_EyePlaneR", texcoords_vec4);
-   add_uniform(instructions, state, "gl_EyePlaneQ", texcoords_vec4);
-   add_uniform(instructions, state, "gl_ObjectPlaneS", texcoords_vec4);
-   add_uniform(instructions, state, "gl_ObjectPlaneT", texcoords_vec4);
-   add_uniform(instructions, state, "gl_ObjectPlaneR", texcoords_vec4);
-   add_uniform(instructions, state, "gl_ObjectPlaneQ", texcoords_vec4);
-
-   add_uniform(instructions, state, "gl_Fog",
-              state->symbols->get_type("gl_FogParameters"));
+   add_uniform(instructions, symtab, "gl_EyePlaneS", texcoords_vec4);
+   add_uniform(instructions, symtab, "gl_EyePlaneT", texcoords_vec4);
+   add_uniform(instructions, symtab, "gl_EyePlaneR", texcoords_vec4);
+   add_uniform(instructions, symtab, "gl_EyePlaneQ", texcoords_vec4);
+   add_uniform(instructions, symtab, "gl_ObjectPlaneS", texcoords_vec4);
+   add_uniform(instructions, symtab, "gl_ObjectPlaneT", texcoords_vec4);
+   add_uniform(instructions, symtab, "gl_ObjectPlaneR", texcoords_vec4);
+   add_uniform(instructions, symtab, "gl_ObjectPlaneQ", texcoords_vec4);
+
+   add_uniform(instructions, symtab, "gl_Fog",
+              symtab->get_type("gl_FogParameters"));
 }
 
 /* This function should only be called for ES, not desktop GL. */
@@ -232,8 +526,8 @@ generate_100ES_vs_variables(exec_list *instructions,
                          struct _mesa_glsl_parse_state *state)
 {
    for (unsigned i = 0; i < Elements(builtin_core_vs_variables); i++) {
-      add_builtin_variable(& builtin_core_vs_variables[i],
-                          instructions, state->symbols);
+      add_builtin_variable(instructions, state->symbols,
+                          & builtin_core_vs_variables[i]);
    }
 
    generate_100ES_uniforms(instructions, state);
@@ -248,15 +542,15 @@ generate_110_vs_variables(exec_list *instructions,
                          struct _mesa_glsl_parse_state *state)
 {
    for (unsigned i = 0; i < Elements(builtin_core_vs_variables); i++) {
-      add_builtin_variable(& builtin_core_vs_variables[i],
-                          instructions, state->symbols);
+      add_builtin_variable(instructions, state->symbols,
+                          & builtin_core_vs_variables[i]);
    }
 
    for (unsigned i = 0
           ; i < Elements(builtin_110_deprecated_vs_variables)
           ; i++) {
-      add_builtin_variable(& builtin_110_deprecated_vs_variables[i],
-                          instructions, state->symbols);
+      add_builtin_variable(instructions, state->symbols,
+                          & builtin_110_deprecated_vs_variables[i]);
    }
    generate_110_uniforms(instructions, state);
 
@@ -271,8 +565,8 @@ generate_110_vs_variables(exec_list *instructions,
    const glsl_type *const vec4_array_type =
       glsl_type::get_array_instance(glsl_type::vec4_type, 0);
 
-   add_variable("gl_TexCoord", ir_var_out, VERT_RESULT_TEX0, vec4_array_type,
-               instructions, state->symbols);
+   add_variable(instructions, state->symbols,
+               "gl_TexCoord", vec4_array_type, ir_var_out, VERT_RESULT_TEX0);
 
    generate_ARB_draw_buffers_variables(instructions, state, false,
                                       vertex_shader);
@@ -297,8 +591,8 @@ generate_130_vs_variables(exec_list *instructions,
    generate_120_vs_variables(instructions, state);
 
    for (unsigned i = 0; i < Elements(builtin_130_vs_variables); i++) {
-      add_builtin_variable(& builtin_130_vs_variables[i],
-                          instructions, state->symbols);
+      add_builtin_variable(instructions, state->symbols,
+                          & builtin_130_vs_variables[i]);
    }
 
    const glsl_type *const clip_distance_array_type =
@@ -306,8 +600,8 @@ generate_130_vs_variables(exec_list *instructions,
                                    state->Const.MaxClipPlanes);
 
    /* FINISHME: gl_ClipDistance needs a real location assigned. */
-   add_variable("gl_ClipDistance", ir_var_out, -1, clip_distance_array_type,
-               instructions, state->symbols);
+   add_variable(instructions, state->symbols,
+               "gl_ClipDistance", clip_distance_array_type, ir_var_out, -1);
 
 }
 
@@ -344,13 +638,13 @@ generate_100ES_fs_variables(exec_list *instructions,
                          struct _mesa_glsl_parse_state *state)
 {
    for (unsigned i = 0; i < Elements(builtin_core_fs_variables); i++) {
-      add_builtin_variable(& builtin_core_fs_variables[i],
-                          instructions, state->symbols);
+      add_builtin_variable(instructions, state->symbols,
+                          & builtin_core_fs_variables[i]);
    }
 
    for (unsigned i = 0; i < Elements(builtin_100ES_fs_variables); i++) {
-      add_builtin_variable(& builtin_100ES_fs_variables[i],
-                          instructions, state->symbols);
+      add_builtin_variable(instructions, state->symbols,
+                          & builtin_100ES_fs_variables[i]);
    }
 
    generate_100ES_uniforms(instructions, state);
@@ -364,20 +658,20 @@ generate_110_fs_variables(exec_list *instructions,
                          struct _mesa_glsl_parse_state *state)
 {
    for (unsigned i = 0; i < Elements(builtin_core_fs_variables); i++) {
-      add_builtin_variable(& builtin_core_fs_variables[i],
-                          instructions, state->symbols);
+      add_builtin_variable(instructions, state->symbols,
+                          & builtin_core_fs_variables[i]);
    }
 
    for (unsigned i = 0; i < Elements(builtin_110_fs_variables); i++) {
-      add_builtin_variable(& builtin_110_fs_variables[i],
-                          instructions, state->symbols);
+      add_builtin_variable(instructions, state->symbols,
+                          & builtin_110_fs_variables[i]);
    }
 
    for (unsigned i = 0
           ; i < Elements(builtin_110_deprecated_fs_variables)
           ; i++) {
-      add_builtin_variable(& builtin_110_deprecated_fs_variables[i],
-                          instructions, state->symbols);
+      add_builtin_variable(instructions, state->symbols,
+                          & builtin_110_deprecated_fs_variables[i]);
    }
    generate_110_uniforms(instructions, state);
 
@@ -392,8 +686,8 @@ generate_110_fs_variables(exec_list *instructions,
    const glsl_type *const vec4_array_type =
       glsl_type::get_array_instance(glsl_type::vec4_type, 0);
 
-   add_variable("gl_TexCoord", ir_var_in, FRAG_ATTRIB_TEX0, vec4_array_type,
-               instructions, state->symbols);
+   add_variable(instructions, state->symbols,
+               "gl_TexCoord", vec4_array_type, ir_var_in, FRAG_ATTRIB_TEX0);
 
    generate_ARB_draw_buffers_variables(instructions, state, false,
                                       fragment_shader);
@@ -408,8 +702,8 @@ generate_ARB_draw_buffers_variables(exec_list *instructions,
    /* gl_MaxDrawBuffers is available in all shader stages.
     */
    ir_variable *const mdb =
-      add_variable("gl_MaxDrawBuffers", ir_var_auto, -1,
-                  glsl_type::int_type, instructions, state->symbols);
+      add_variable(instructions, state->symbols,
+                  "gl_MaxDrawBuffers", glsl_type::int_type, ir_var_auto, -1);
 
    if (warn)
       mdb->warn_extension = "GL_ARB_draw_buffers";
@@ -426,8 +720,9 @@ generate_ARB_draw_buffers_variables(exec_list *instructions,
                                       state->Const.MaxDrawBuffers);
 
       ir_variable *const fd =
-        add_variable("gl_FragData", ir_var_out, FRAG_RESULT_DATA0,
-                     vec4_array_type, instructions, state->symbols);
+        add_variable(instructions, state->symbols,
+                     "gl_FragData", vec4_array_type,
+                     ir_var_out, FRAG_RESULT_DATA0);
 
       if (warn)
         fd->warn_extension = "GL_ARB_draw_buffers";
@@ -445,9 +740,9 @@ generate_ARB_draw_instanced_variables(exec_list *instructions,
     */
    if (target == vertex_shader) {
       ir_variable *const inst =
-         add_variable("gl_InstanceIDARB", ir_var_system_value,
-                      SYSTEM_VALUE_INSTANCE_ID,
-                      glsl_type::int_type, instructions, state->symbols);
+         add_variable(instructions, state->symbols,
+                     "gl_InstanceIDARB", glsl_type::int_type,
+                     ir_var_system_value, SYSTEM_VALUE_INSTANCE_ID);
 
       if (warn)
          inst->warn_extension = "GL_ARB_draw_instanced";
@@ -463,8 +758,9 @@ generate_ARB_shader_stencil_export_variables(exec_list *instructions,
    /* gl_FragStencilRefARB is only available in the fragment shader.
     */
    ir_variable *const fd =
-      add_variable("gl_FragStencilRefARB", ir_var_out, FRAG_RESULT_STENCIL,
-                  glsl_type::int_type, instructions, state->symbols);
+      add_variable(instructions, state->symbols,
+                  "gl_FragStencilRefARB", glsl_type::int_type,
+                  ir_var_out, FRAG_RESULT_STENCIL);
 
    if (warn)
       fd->warn_extension = "GL_ARB_shader_stencil_export";
@@ -479,8 +775,8 @@ generate_120_fs_variables(exec_list *instructions,
    for (unsigned i = 0
           ; i < Elements(builtin_120_fs_variables)
           ; i++) {
-      add_builtin_variable(& builtin_120_fs_variables[i],
-                          instructions, state->symbols);
+      add_builtin_variable(instructions, state->symbols,
+                          & builtin_120_fs_variables[i]);
    }
 }
 
@@ -495,8 +791,8 @@ generate_130_fs_variables(exec_list *instructions,
                                    state->Const.MaxClipPlanes);
 
    /* FINISHME: gl_ClipDistance needs a real location assigned. */
-   add_variable("gl_ClipDistance", ir_var_in, -1, clip_distance_array_type,
-               instructions, state->symbols);
+   add_variable(instructions, state->symbols,
+               "gl_ClipDistance", clip_distance_array_type, ir_var_in, -1);
 }
 
 static void
index 7db5c5e8d5313b4c5040bad5caeb53b51862c235..17492357f2dc6ed09174b1ab50a40043067543c6 100644 (file)
@@ -994,6 +994,19 @@ update_array_sizes(struct gl_shader_program *prog)
         }
 
         if (size + 1 != var->type->fields.array->length) {
+           /* If this is a built-in uniform (i.e., it's backed by some
+            * fixed-function state), adjust the number of state slots to
+            * match the new array size.  The number of slots per array entry
+            * is not known.  It seems saft to assume that the total number of
+            * slots is an integer multiple of the number of array elements.
+            * Determine the number of slots per array element by dividing by
+            * the old (total) size.
+            */
+           if (var->num_state_slots > 0) {
+              var->num_state_slots = (size + 1)
+                 * (var->num_state_slots / var->type->length);
+           }
+
            var->type = glsl_type::get_array_instance(var->type->fields.array,
                                                      size + 1);
            /* FINISHME: We should update the types of array
index 8541d9a8ee1ca80904b1e261047242211a844f84..a91e624cb720ae793a09ff2c0c185ab1f7a4ccc0 100644 (file)
@@ -161,9 +161,16 @@ ir_visitor_status
 ir_copy_propagation_elements_visitor::visit_leave(ir_assignment *ir)
 {
    ir_dereference_variable *lhs = ir->lhs->as_dereference_variable();
+   ir_variable *var = ir->lhs->variable_referenced();
+
+   if (var->type->is_scalar() || var->type->is_vector()) {
+      kill_entry *k;
+
+      if (lhs)
+        k = new(mem_ctx) kill_entry(var, ir->write_mask);
+      else
+        k = new(mem_ctx) kill_entry(var, ~0);
 
-   if (lhs && (lhs->type->is_scalar() || lhs->type->is_vector())) {
-      kill_entry *k = new(mem_ctx) kill_entry(lhs->var, ir->write_mask);
       kill(k);
    }
 
@@ -383,8 +390,10 @@ ir_copy_propagation_elements_visitor::kill(kill_entry *k)
 
       if (entry->lhs == k->var) {
         entry->write_mask = entry->write_mask & ~k->write_mask;
-        if (entry->write_mask == 0)
+        if (entry->write_mask == 0) {
            entry->remove();
+           continue;
+        }
       }
       if (entry->rhs == k->var) {
         entry->remove();
index 2c28bc271500a47e13a945159b2fca76d16d2f34..fc0237a4f6b122be9be662cd9104a3f6205a3c25 100644 (file)
@@ -945,6 +945,9 @@ handle_error:
 static void
 dri2DestroyDisplay(__GLXDRIdisplay * dpy)
 {
+   struct dri2_display *pdp = (struct dri2_display *) dpy;
+
+   __glxHashDestroy(pdp->dri2Hash);
    Xfree(dpy);
 }
 
index e35dcb73e89538802200c8db047e9ed4e60e5e79..278c71978fa9b372a0a9243153435c9570465adc 100644 (file)
@@ -250,19 +250,24 @@ glx_display_free(struct glx_display *priv)
 static int
 __glXCloseDisplay(Display * dpy, XExtCodes * codes)
 {
-   struct glx_display *priv, **prev;
+   struct glx_display *priv, **prev, *next;
 
    _XLockMutex(_Xglobal_lock);
    prev = &glx_displays;
    for (priv = glx_displays; priv; prev = &priv->next, priv = priv->next) {
       if (priv->dpy == dpy) {
-        (*prev) = priv->next;
         break;
       }
    }
-   _XUnlockMutex(_Xglobal_lock);
 
+   /* Only remove the display from the list after it's destroyed. The cleanup
+    * code (e.g. driReleaseDrawables()) ends up calling __glXInitialize(),
+    * which would create a new glx_display while we're trying to destroy this
+    * one. */
+   next = priv->next;
    glx_display_free(priv);
+   *prev = next;
+   _XUnlockMutex(_Xglobal_lock);
 
    return 1;
 }
index b2675c2958fe2e951aca85d07c913e69096ab13c..c80a237bedce32daf909331a96f5363b7d1d5baa 100644 (file)
@@ -8597,6 +8597,21 @@ __indirect_glDrawBuffersARB(GLsizei n, const GLenum * bufs)
     }
 }
 
+#define X_GLrop_ClampColorARB 234
+void
+__indirect_glClampColorARB(GLenum target, GLenum clamp)
+{
+    struct glx_context *const gc = __glXGetCurrentContext();
+    const GLuint cmdlen = 12;
+    emit_header(gc->pc, X_GLrop_ClampColorARB, cmdlen);
+    (void) memcpy((void *) (gc->pc + 4), (void *) (&target), 4);
+    (void) memcpy((void *) (gc->pc + 8), (void *) (&clamp), 4);
+    gc->pc += cmdlen;
+    if (__builtin_expect(gc->pc > gc->limit, 0)) {
+        (void) __glXFlushRenderBuffer(gc, gc->pc);
+    }
+}
+
 #define X_GLrop_RenderbufferStorageMultisample 4331
 void
 __indirect_glRenderbufferStorageMultisample(GLenum target, GLsizei samples,
index b610cc2027933d7bbdd65f3617340cd338b90122..22bdb827d96e027e9c9d5a2ee227e9c9e9983e58 100644 (file)
@@ -573,6 +573,7 @@ extern HIDDEN void __indirect_glGetQueryObjectuivARB(GLuint id, GLenum pname, GL
 extern HIDDEN void __indirect_glGetQueryivARB(GLenum target, GLenum pname, GLint * params);
 extern HIDDEN GLboolean __indirect_glIsQueryARB(GLuint id);
 extern HIDDEN void __indirect_glDrawBuffersARB(GLsizei n, const GLenum * bufs);
+extern HIDDEN void __indirect_glClampColorARB(GLenum target, GLenum clamp);
 extern HIDDEN void __indirect_glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
 extern HIDDEN void __indirect_glSampleMaskSGIS(GLclampf value, GLboolean invert);
 extern HIDDEN void __indirect_glSamplePatternSGIS(GLenum pattern);
index 9f1ee5930fc11ae4f30c7fbdcf79f55ee4c63dbf..7bb6754e38fe8efa1762a62b2747538a3ffe389f 100644 (file)
@@ -588,6 +588,10 @@ struct _glapi_table * __glXNewIndirectAPI( void )
 
     glAPI->DrawBuffersARB = __indirect_glDrawBuffersARB;
 
+    /*  39. GL_ARB_color_buffer_float */
+
+    glAPI->ClampColorARB = __indirect_glClampColorARB;
+
     /*  45. GL_ARB_framebuffer_object */
 
     glAPI->RenderbufferStorageMultisample = __indirect_glRenderbufferStorageMultisample;
diff --git a/src/mapi/glapi/gen/ARB_color_buffer_float.xml b/src/mapi/glapi/gen/ARB_color_buffer_float.xml
new file mode 100644 (file)
index 0000000..7acf271
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<!-- Note: no GLX protocol info yet. -->
+
+
+<OpenGLAPI>
+
+<category name="GL_ARB_color_buffer_float" number="39">
+
+  <enum name="RGBA_FLOAT_MODE_ARB"              value="0x8820"/>
+  <enum name="CLAMP_VERTEX_COLOR_ARB"           value="0x891A"/>
+  <enum name="CLAMP_FRAGMENT_COLOR_ARB"         value="0x891B"/>
+  <enum name="CLAMP_READ_COLOR_ARB"             value="0x891C"/>
+  <enum name="FIXED_ONLY_ARB"                   value="0x891D"/>
+
+  <function name="ClampColorARB" offset="assign">
+    <param name="target" type="GLenum"/>
+    <param name="clamp" type="GLenum"/>
+    <glx rop="234"/>
+  </function>
+
+</category>
+
+</OpenGLAPI>
diff --git a/src/mapi/glapi/gen/ARB_sampler_objects.xml b/src/mapi/glapi/gen/ARB_sampler_objects.xml
new file mode 100644 (file)
index 0000000..0d39db4
--- /dev/null
@@ -0,0 +1,96 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<!-- Note: no GLX protocol info yet. -->
+
+<OpenGLAPI>
+
+<category name="GL_ARB_sampler_objects" number="81">
+
+    <function name="GenSamplers" offset="assign">
+      <param name="count" type="GLsizei"/>
+      <param name="samplers" type="GLuint *"/>
+    </function>
+
+    <function name="DeleteSamplers" offset="assign">
+      <param name="count" type="GLsizei"/>
+      <param name="samplers" type="const GLuint *"/>
+    </function>
+
+    <function name="IsSampler" offset="assign">
+      <param name="sampler" type="GLuint"/>
+      <return type="GLboolean"/>
+    </function>
+
+    <function name="BindSampler" offset="assign">
+      <param name="unit" type="GLuint"/>
+      <param name="sampler" type="GLuint"/>
+    </function>
+
+    <function name="SamplerParameteri" offset="assign">
+      <param name="sampler" type="GLuint"/>
+      <param name="pname" type="GLenum"/>
+      <param name="param" type="GLint"/>
+    </function>
+
+    <function name="SamplerParameterf" offset="assign">
+      <param name="sampler" type="GLuint"/>
+      <param name="pname" type="GLenum"/>
+      <param name="param" type="GLfloat"/>
+    </function>
+
+    <function name="SamplerParameteriv" offset="assign">
+      <param name="sampler" type="GLuint"/>
+      <param name="pname" type="GLenum"/>
+      <param name="params" type="const GLint *"/>
+    </function>
+
+    <function name="SamplerParameterfv" offset="assign">
+      <param name="sampler" type="GLuint"/>
+      <param name="pname" type="GLenum"/>
+      <param name="params" type="const GLfloat *"/>
+    </function>
+
+    <function name="SamplerParameterIiv" offset="assign">
+      <param name="sampler" type="GLuint"/>
+      <param name="pname" type="GLenum"/>
+      <param name="params" type="const GLint *"/>
+    </function>
+
+    <function name="SamplerParameterIuiv" offset="assign">
+      <param name="sampler" type="GLuint"/>
+      <param name="pname" type="GLenum"/>
+      <param name="params" type="const GLuint *"/>
+    </function>
+
+    <function name="GetSamplerParameteriv" offset="assign">
+      <param name="sampler" type="GLuint"/>
+      <param name="pname" type="GLenum"/>
+      <param name="params" type="GLint *"/>
+    </function>
+
+    <function name="GetSamplerParameterfv" offset="assign">
+      <param name="sampler" type="GLuint"/>
+      <param name="pname" type="GLenum"/>
+      <param name="params" type="GLfloat *"/>
+    </function>
+
+    <function name="GetSamplerParameterIiv" offset="assign">
+      <param name="sampler" type="GLuint"/>
+      <param name="pname" type="GLenum"/>
+      <param name="params" type="GLint *"/>
+    </function>
+
+    <function name="GetSamplerParameterIuiv" offset="assign">
+      <param name="sampler" type="GLuint"/>
+      <param name="pname" type="GLenum"/>
+      <param name="params" type="GLuint *"/>
+    </function>
+
+    <enum name="SAMPLER_BINDING" count="1"  value="0x8919">
+        <size name="Get" mode="get"/>
+    </enum>
+
+</category>
+
+</OpenGLAPI>
diff --git a/src/mapi/glapi/gen/ARB_texture_buffer_object.xml b/src/mapi/glapi/gen/ARB_texture_buffer_object.xml
new file mode 100644 (file)
index 0000000..57680f5
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
+
+<OpenGLAPI>
+
+<category name="GL_ARB_texture_buffer_object" number="51">
+
+    <enum name="TEXTURE_BUFFER_ARB"                     value="0x8C2A"/>
+    <enum name="MAX_TEXTURE_BUFFER_SIZE_ARB"            value="0x8C2B"/>
+    <enum name="TEXTURE_BINDING_BUFFER_ARB"             value="0x8C2C"/>
+    <enum name="TEXTURE_BUFFER_DATA_STORE_BINDING_ARB"  value="0x8C2D"/>
+    <enum name="TEXTURE_BUFFER_FORMAT_ARB"              value="0x8C2E"/>
+
+    <function name="TexBufferARB" offset="assign">
+        <param name="target" type="GLenum"/>
+        <param name="internalFormat" type="GLenum"/>
+        <param name="buffer" type="GLuint"/>
+    </function>
+
+</category>
+
+</OpenGLAPI>
index 8d15c94970c45a5cd0cfdc939dfe1423b170592c..cec9c916efffc71345348cc8881f7bd5d3bffeba 100644 (file)
   <function name="ClearBufferfi" offset="assign">
     <param name="buffer" type="GLenum"/>
     <param name="drawbuffer" type="GLint"/>
-    <param name="depth" type="const GLfloat"/>
-    <param name="stencil" type="const GLint"/>
+    <param name="depth" type="GLfloat"/>
+    <param name="stencil" type="GLint"/>
   </function>
 
   <function name="GetStringi" offset="assign">
index 1f4642af5597d0aa89286442fe0fa6bc5bd56aa2..b56ce8639928730123ac314d369295c99fd17abd 100644 (file)
@@ -41,8 +41,6 @@ XORG_GLX_DIR = $(XORG_BASE)/glx
 XORG_GLAPI_DIR = $(XORG_BASE)/glx
 
 XORG_GLAPI_FILES = \
-       $(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 \
@@ -50,7 +48,6 @@ 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
@@ -72,6 +69,7 @@ XORG_OUTPUTS = \
 
 API_XML = \
        gl_API.xml \
+       ARB_color_buffer_float.xml \
        ARB_copy_buffer.xml \
        ARB_depth_clamp.xml \
        ARB_draw_buffers_blend.xml \
@@ -82,8 +80,10 @@ API_XML = \
        ARB_geometry_shader4.xml \
        ARB_instanced_arrays.xml \
        ARB_map_buffer_range.xml \
+       ARB_sampler_objects.xml \
        ARB_seamless_cube_map.xml \
        ARB_sync.xml \
+       ARB_texture_buffer_object.xml \
        ARB_vertex_array_object.xml \
        APPLE_object_purgeable.xml \
        APPLE_vertex_array_object.xml \
index 56c0ec71b36f94ef1b113acde10bbdbc9e6b0a7a..ef68ad62cf7a635dd5be4455f5d4c01ed68e06bd 100644 (file)
 
 <xi:include href="NV_texture_barrier.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
+<xi:include href="ARB_sampler_objects.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
 <xi:include href="EXT_transform_feedback.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
 <xi:include href="ARB_draw_instanced.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
 <xi:include href="ARB_geometry_shader4.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
+<xi:include href="ARB_color_buffer_float.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
 <!-- Non-ARB extensions sorted by extension number. -->
 
 
 <xi:include href="ARB_draw_buffers_blend.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
+<xi:include href="ARB_texture_buffer_object.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
 </OpenGLAPI>
index 660c8cfb711d2c22e4f6b11dd8be3ee642cf3ac9..4d414e8b0f8e7ae70a7cd6c24e69787ab7e0e928 100644 (file)
@@ -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(__CYGWIN__) && !defined(__MINGW32__)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) && defined(__ELF__))
 #    define %s  __attribute__((visibility("%s")))
 #  else
 #    define %s
index c3f9cd227ce99662f496c084e9121950ed4c1591..02a541edc44eca098653fccad5de963fa2007f94 100644 (file)
@@ -522,7 +522,7 @@ GLAPI void APIENTRY GLAPI_PREFIX(UniformMatrix3x4fv)(GLint location, GLsizei cou
 GLAPI void APIENTRY GLAPI_PREFIX(UniformMatrix4x2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
 GLAPI void APIENTRY GLAPI_PREFIX(UniformMatrix4x3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
 GLAPI void APIENTRY GLAPI_PREFIX(ClampColor)(GLenum target, GLenum clamp);
-GLAPI void APIENTRY GLAPI_PREFIX(ClearBufferfi)(GLenum buffer, GLint drawbuffer, const GLfloat depth, const GLint stencil);
+GLAPI void APIENTRY GLAPI_PREFIX(ClearBufferfi)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
 GLAPI void APIENTRY GLAPI_PREFIX(ClearBufferfv)(GLenum buffer, GLint drawbuffer, const GLfloat *value);
 GLAPI void APIENTRY GLAPI_PREFIX(ClearBufferiv)(GLenum buffer, GLint drawbuffer, const GLint *value);
 GLAPI void APIENTRY GLAPI_PREFIX(ClearBufferuiv)(GLenum buffer, GLint drawbuffer, const GLuint *value);
@@ -774,6 +774,7 @@ GLAPI GLint APIENTRY GLAPI_PREFIX(GetAttribLocation)(GLuint program, const GLcha
 GLAPI void APIENTRY GLAPI_PREFIX(DrawBuffersARB)(GLsizei n, const GLenum *bufs);
 GLAPI void APIENTRY GLAPI_PREFIX(DrawBuffers)(GLsizei n, const GLenum *bufs);
 GLAPI void APIENTRY GLAPI_PREFIX(DrawBuffersATI)(GLsizei n, const GLenum *bufs);
+GLAPI void APIENTRY GLAPI_PREFIX(ClampColorARB)(GLenum target, GLenum clamp);
 GLAPI void APIENTRY GLAPI_PREFIX(DrawArraysInstancedARB)(GLenum mode, GLint first, GLsizei count, GLsizei primcount);
 GLAPI void APIENTRY GLAPI_PREFIX(DrawArraysInstanced)(GLenum mode, GLint first, GLsizei count, GLsizei primcount);
 GLAPI void APIENTRY GLAPI_PREFIX(DrawArraysInstancedEXT)(GLenum mode, GLint first, GLsizei count, GLsizei primcount);
@@ -788,6 +789,7 @@ GLAPI void APIENTRY GLAPI_PREFIX(ProgramParameteriARB)(GLuint program, GLenum pn
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribDivisorARB)(GLuint index, GLuint divisor);
 GLAPI void APIENTRY GLAPI_PREFIX(FlushMappedBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length);
 GLAPI GLvoid * APIENTRY GLAPI_PREFIX(MapBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GLAPI void APIENTRY GLAPI_PREFIX(TexBufferARB)(GLenum target, GLenum internalFormat, GLuint buffer);
 GLAPI void APIENTRY GLAPI_PREFIX(BindVertexArray)(GLuint array);
 GLAPI void APIENTRY GLAPI_PREFIX(GenVertexArrays)(GLsizei n, GLuint *arrays);
 GLAPI void APIENTRY GLAPI_PREFIX(CopyBufferSubData)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
@@ -805,6 +807,20 @@ GLAPI void APIENTRY GLAPI_PREFIX(BlendEquationSeparateiARB)(GLuint buf, GLenum m
 GLAPI void APIENTRY GLAPI_PREFIX(BlendEquationiARB)(GLuint buf, GLenum mode);
 GLAPI void APIENTRY GLAPI_PREFIX(BlendFuncSeparateiARB)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcA, GLenum dstA);
 GLAPI void APIENTRY GLAPI_PREFIX(BlendFunciARB)(GLuint buf, GLenum src, GLenum dst);
+GLAPI void APIENTRY GLAPI_PREFIX(BindSampler)(GLuint unit, GLuint sampler);
+GLAPI void APIENTRY GLAPI_PREFIX(DeleteSamplers)(GLsizei count, const GLuint *samplers);
+GLAPI void APIENTRY GLAPI_PREFIX(GenSamplers)(GLsizei count, GLuint *samplers);
+GLAPI void APIENTRY GLAPI_PREFIX(GetSamplerParameterIiv)(GLuint sampler, GLenum pname, GLint *params);
+GLAPI void APIENTRY GLAPI_PREFIX(GetSamplerParameterIuiv)(GLuint sampler, GLenum pname, GLuint *params);
+GLAPI void APIENTRY GLAPI_PREFIX(GetSamplerParameterfv)(GLuint sampler, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY GLAPI_PREFIX(GetSamplerParameteriv)(GLuint sampler, GLenum pname, GLint *params);
+GLAPI GLboolean APIENTRY GLAPI_PREFIX(IsSampler)(GLuint sampler);
+GLAPI void APIENTRY GLAPI_PREFIX(SamplerParameterIiv)(GLuint sampler, GLenum pname, const GLint *params);
+GLAPI void APIENTRY GLAPI_PREFIX(SamplerParameterIuiv)(GLuint sampler, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY GLAPI_PREFIX(SamplerParameterf)(GLuint sampler, GLenum pname, GLfloat param);
+GLAPI void APIENTRY GLAPI_PREFIX(SamplerParameterfv)(GLuint sampler, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY GLAPI_PREFIX(SamplerParameteri)(GLuint sampler, GLenum pname, GLint param);
+GLAPI void APIENTRY GLAPI_PREFIX(SamplerParameteriv)(GLuint sampler, GLenum pname, const GLint *params);
 GLAPI void APIENTRY GLAPI_PREFIX(BindTransformFeedback)(GLenum target, GLuint id);
 GLAPI void APIENTRY GLAPI_PREFIX(DeleteTransformFeedbacks)(GLsizei n, const GLuint *ids);
 GLAPI void APIENTRY GLAPI_PREFIX(DrawTransformFeedback)(GLenum mode, GLuint id);
@@ -817,28 +833,28 @@ GLAPI void APIENTRY GLAPI_PREFIX(DepthRangef)(GLclampf zNear, GLclampf zFar);
 GLAPI void APIENTRY GLAPI_PREFIX(GetShaderPrecisionFormat)(GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
 GLAPI void APIENTRY GLAPI_PREFIX(ReleaseShaderCompiler)(void);
 GLAPI void APIENTRY GLAPI_PREFIX(ShaderBinary)(GLsizei n, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_610)(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_611)(GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_612)(GLuint program, GLenum pname, GLint value);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_626)(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_627)(GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_628)(GLuint program, GLenum pname, GLint value);
 GLAPI void APIENTRY GLAPI_PREFIX(PolygonOffsetEXT)(GLfloat factor, GLfloat bias);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_614)(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_615)(const GLfloat *coords);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_616)(GLint x, GLint y, GLint z, GLint width, GLint height);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_617)(const GLint *coords);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_618)(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_619)(const GLshort *coords);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_620)(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_621)(const GLfixed *coords);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_622)(GLenum type, GLsizei stride, const GLvoid *pointer);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_623)(GLenum pname, GLfloat *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_624)(GLenum pname, GLint *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_625)(GLenum pname, GLfloat param);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_626)(GLenum pname, const GLfloat *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_627)(GLenum pname, GLint param);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_628)(GLenum pname, const GLint *params);
-GLbitfield APIENTRY GLAPI_PREFIX(_dispatch_stub_629)(GLfixed *mantissa, GLint *exponent);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_630)(GLclampf value, GLboolean invert);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_631)(GLenum pattern);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_630)(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_631)(const GLfloat *coords);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_632)(GLint x, GLint y, GLint z, GLint width, GLint height);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_633)(const GLint *coords);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_634)(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_635)(const GLshort *coords);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_636)(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_637)(const GLfixed *coords);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_638)(GLenum type, GLsizei stride, const GLvoid *pointer);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_639)(GLenum pname, GLfloat *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_640)(GLenum pname, GLint *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_641)(GLenum pname, GLfloat param);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_642)(GLenum pname, const GLfloat *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_643)(GLenum pname, GLint param);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_644)(GLenum pname, const GLint *params);
+GLbitfield APIENTRY GLAPI_PREFIX(_dispatch_stub_645)(GLfixed *mantissa, GLint *exponent);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_646)(GLclampf value, GLboolean invert);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_647)(GLenum pattern);
 GLAPI void APIENTRY GLAPI_PREFIX(ColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
 GLAPI void APIENTRY GLAPI_PREFIX(EdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean *pointer);
 GLAPI void APIENTRY GLAPI_PREFIX(IndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
@@ -901,7 +917,7 @@ GLAPI void APIENTRY GLAPI_PREFIX(FogCoordfEXT)(GLfloat coord);
 GLAPI void APIENTRY GLAPI_PREFIX(FogCoordf)(GLfloat coord);
 GLAPI void APIENTRY GLAPI_PREFIX(FogCoordfvEXT)(const GLfloat *coord);
 GLAPI void APIENTRY GLAPI_PREFIX(FogCoordfv)(const GLfloat *coord);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_666)(GLenum mode);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_682)(GLenum mode);
 GLAPI void APIENTRY GLAPI_PREFIX(BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
 GLAPI void APIENTRY GLAPI_PREFIX(BlendFuncSeparate)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
 GLAPI void APIENTRY GLAPI_PREFIX(FlushVertexArrayRangeNV)(void);
@@ -976,15 +992,15 @@ GLAPI void APIENTRY GLAPI_PREFIX(WindowPos4iMESA)(GLint x, GLint y, GLint z, GLi
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos4ivMESA)(const GLint *v);
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w);
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos4svMESA)(const GLshort *v);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_708)(const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_709)(const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid * const *indices, GLsizei primcount, GLint modestride);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_710)(GLsizei n, const GLuint *fences);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_711)(GLuint fence);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_712)(GLsizei n, GLuint *fences);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_713)(GLuint fence, GLenum pname, GLint *params);
-GLboolean APIENTRY GLAPI_PREFIX(_dispatch_stub_714)(GLuint fence);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_715)(GLuint fence, GLenum condition);
-GLboolean APIENTRY GLAPI_PREFIX(_dispatch_stub_716)(GLuint fence);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_724)(const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_725)(const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid * const *indices, GLsizei primcount, GLint modestride);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_726)(GLsizei n, const GLuint *fences);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_727)(GLuint fence);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_728)(GLsizei n, GLuint *fences);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_729)(GLuint fence, GLenum pname, GLint *params);
+GLboolean APIENTRY GLAPI_PREFIX(_dispatch_stub_730)(GLuint fence);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_731)(GLuint fence, GLenum condition);
+GLboolean APIENTRY GLAPI_PREFIX(_dispatch_stub_732)(GLuint fence);
 GLAPI GLboolean APIENTRY GLAPI_PREFIX(AreProgramsResidentNV)(GLsizei n, const GLuint *ids, GLboolean *residences);
 GLAPI void APIENTRY GLAPI_PREFIX(BindProgramNV)(GLenum target, GLuint program);
 GLAPI void APIENTRY GLAPI_PREFIX(BindProgramARB)(GLenum target, GLuint program);
@@ -1073,12 +1089,12 @@ GLAPI void APIENTRY GLAPI_PREFIX(PointParameteriNV)(GLenum pname, GLint param);
 GLAPI void APIENTRY GLAPI_PREFIX(PointParameteri)(GLenum pname, GLint param);
 GLAPI void APIENTRY GLAPI_PREFIX(PointParameterivNV)(GLenum pname, const GLint *params);
 GLAPI void APIENTRY GLAPI_PREFIX(PointParameteriv)(GLenum pname, const GLint *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_797)(GLenum face);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_798)(GLuint array);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_799)(GLsizei n, const GLuint *arrays);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_813)(GLenum face);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_814)(GLuint array);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_815)(GLsizei n, const GLuint *arrays);
 GLAPI void APIENTRY GLAPI_PREFIX(DeleteVertexArrays)(GLsizei n, const GLuint *arrays);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_800)(GLsizei n, GLuint *arrays);
-GLboolean APIENTRY GLAPI_PREFIX(_dispatch_stub_801)(GLuint array);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_816)(GLsizei n, GLuint *arrays);
+GLboolean APIENTRY GLAPI_PREFIX(_dispatch_stub_817)(GLuint array);
 GLAPI GLboolean APIENTRY GLAPI_PREFIX(IsVertexArray)(GLuint array);
 GLAPI void APIENTRY GLAPI_PREFIX(GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte *name, GLdouble *params);
 GLAPI void APIENTRY GLAPI_PREFIX(GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte *name, GLfloat *params);
@@ -1089,54 +1105,54 @@ GLAPI void APIENTRY GLAPI_PREFIX(ProgramNamedParameter4fvNV)(GLuint id, GLsizei
 GLAPI void APIENTRY GLAPI_PREFIX(PrimitiveRestartIndexNV)(GLuint index);
 GLAPI void APIENTRY GLAPI_PREFIX(PrimitiveRestartIndex)(GLuint index);
 GLAPI void APIENTRY GLAPI_PREFIX(PrimitiveRestartNV)(void);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_810)(GLenum func, GLclampx ref);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_811)(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_812)(GLclampx depth);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_813)(GLenum plane, const GLfixed *equation);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_814)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_815)(GLclampx zNear, GLclampx zFar);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_816)(GLenum pname, GLfixed param);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_817)(GLenum pname, const GLfixed *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_818)(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_819)(GLenum plane, GLfixed *equation);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_820)(GLenum pname, GLfixed *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_821)(GLenum light, GLenum pname, GLfixed *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_822)(GLenum face, GLenum pname, GLfixed *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_823)(GLenum target, GLenum pname, GLfixed *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_824)(GLenum coord, GLenum pname, GLfixed *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_825)(GLenum target, GLenum pname, GLfixed *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_826)(GLenum pname, GLfixed param);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_827)(GLenum pname, const GLfixed *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_828)(GLenum light, GLenum pname, GLfixed param);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_829)(GLenum light, GLenum pname, const GLfixed *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_830)(GLfixed width);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_831)(const GLfixed *m);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_832)(GLenum face, GLenum pname, GLfixed param);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_833)(GLenum face, GLenum pname, const GLfixed *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_834)(const GLfixed *m);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_835)(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_836)(GLfixed nx, GLfixed ny, GLfixed nz);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_837)(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_838)(GLenum pname, GLfixed param);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_839)(GLenum pname, const GLfixed *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_840)(GLfixed size);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_841)(GLfixed factor, GLfixed units);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_842)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_843)(GLclampx value, GLboolean invert);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_844)(GLfixed x, GLfixed y, GLfixed z);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_845)(GLenum target, GLenum pname, GLfixed param);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_846)(GLenum target, GLenum pname, const GLfixed *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_847)(GLenum coord, GLenum pname, GLint param);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_848)(GLenum coord, GLenum pname, const GLfixed *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_849)(GLenum target, GLenum pname, GLfixed param);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_850)(GLenum target, GLenum pname, const GLfixed *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_851)(GLfixed x, GLfixed y, GLfixed z);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_852)(GLenum plane, const GLfloat *equation);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_853)(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_854)(GLenum plane, GLfloat *equation);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_855)(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_856)(GLclampd zmin, GLclampd zmax);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_857)(GLenum modeRGB, GLenum modeA);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_826)(GLenum func, GLclampx ref);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_827)(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_828)(GLclampx depth);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_829)(GLenum plane, const GLfixed *equation);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_830)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_831)(GLclampx zNear, GLclampx zFar);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_832)(GLenum pname, GLfixed param);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_833)(GLenum pname, const GLfixed *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_834)(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_835)(GLenum plane, GLfixed *equation);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_836)(GLenum pname, GLfixed *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_837)(GLenum light, GLenum pname, GLfixed *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_838)(GLenum face, GLenum pname, GLfixed *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_839)(GLenum target, GLenum pname, GLfixed *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_840)(GLenum coord, GLenum pname, GLfixed *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_841)(GLenum target, GLenum pname, GLfixed *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_842)(GLenum pname, GLfixed param);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_843)(GLenum pname, const GLfixed *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_844)(GLenum light, GLenum pname, GLfixed param);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_845)(GLenum light, GLenum pname, const GLfixed *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_846)(GLfixed width);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_847)(const GLfixed *m);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_848)(GLenum face, GLenum pname, GLfixed param);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_849)(GLenum face, GLenum pname, const GLfixed *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_850)(const GLfixed *m);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_851)(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_852)(GLfixed nx, GLfixed ny, GLfixed nz);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_853)(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_854)(GLenum pname, GLfixed param);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_855)(GLenum pname, const GLfixed *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_856)(GLfixed size);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_857)(GLfixed factor, GLfixed units);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_858)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_859)(GLclampx value, GLboolean invert);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_860)(GLfixed x, GLfixed y, GLfixed z);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_861)(GLenum target, GLenum pname, GLfixed param);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_862)(GLenum target, GLenum pname, const GLfixed *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_863)(GLenum coord, GLenum pname, GLint param);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_864)(GLenum coord, GLenum pname, const GLfixed *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_865)(GLenum target, GLenum pname, GLfixed param);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_866)(GLenum target, GLenum pname, const GLfixed *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_867)(GLfixed x, GLfixed y, GLfixed z);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_868)(GLenum plane, const GLfloat *equation);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_869)(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_870)(GLenum plane, GLfloat *equation);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_871)(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_872)(GLclampd zmin, GLclampd zmax);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_873)(GLenum modeRGB, GLenum modeA);
 GLAPI void APIENTRY GLAPI_PREFIX(BlendEquationSeparate)(GLenum modeRGB, GLenum modeA);
 GLAPI void APIENTRY GLAPI_PREFIX(BindFramebufferEXT)(GLenum target, GLuint framebuffer);
 GLAPI void APIENTRY GLAPI_PREFIX(BindFramebuffer)(GLenum target, GLuint framebuffer);
@@ -1172,10 +1188,10 @@ GLAPI GLboolean APIENTRY GLAPI_PREFIX(IsRenderbufferEXT)(GLuint renderbuffer);
 GLAPI GLboolean APIENTRY GLAPI_PREFIX(IsRenderbuffer)(GLuint renderbuffer);
 GLAPI void APIENTRY GLAPI_PREFIX(RenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
 GLAPI void APIENTRY GLAPI_PREFIX(RenderbufferStorage)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_875)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_891)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
 GLAPI void APIENTRY GLAPI_PREFIX(BlitFramebuffer)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_876)(GLenum target, GLenum pname, GLint param);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_877)(GLenum target, GLintptr offset, GLsizeiptr size);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_892)(GLenum target, GLenum pname, GLint param);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_893)(GLenum target, GLintptr offset, GLsizeiptr size);
 GLAPI void APIENTRY GLAPI_PREFIX(BindFragDataLocationEXT)(GLuint program, GLuint colorNumber, const GLchar *name);
 GLAPI void APIENTRY GLAPI_PREFIX(BindFragDataLocation)(GLuint program, GLuint colorNumber, const GLchar *name);
 GLAPI GLint APIENTRY GLAPI_PREFIX(GetFragDataLocationEXT)(GLuint program, const GLchar *name);
@@ -1287,8 +1303,8 @@ GLAPI void APIENTRY GLAPI_PREFIX(TransformFeedbackVaryingsEXT)(GLuint program, G
 GLAPI void APIENTRY GLAPI_PREFIX(TransformFeedbackVaryings)(GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode);
 GLAPI void APIENTRY GLAPI_PREFIX(ProvokingVertexEXT)(GLenum mode);
 GLAPI void APIENTRY GLAPI_PREFIX(ProvokingVertex)(GLenum mode);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_935)(GLenum target, GLenum pname, GLvoid **params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_936)(GLenum target, GLsizei length, GLvoid *pointer);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_951)(GLenum target, GLenum pname, GLvoid **params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_952)(GLenum target, GLsizei length, GLvoid *pointer);
 GLAPI void APIENTRY GLAPI_PREFIX(GetObjectParameterivAPPLE)(GLenum objectType, GLuint name, GLenum pname, GLint *value);
 GLAPI GLenum APIENTRY GLAPI_PREFIX(ObjectPurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option);
 GLAPI GLenum APIENTRY GLAPI_PREFIX(ObjectUnpurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option);
@@ -1296,11 +1312,11 @@ GLAPI void APIENTRY GLAPI_PREFIX(ActiveProgramEXT)(GLuint program);
 GLAPI GLuint APIENTRY GLAPI_PREFIX(CreateShaderProgramEXT)(GLenum type, const GLchar *string);
 GLAPI void APIENTRY GLAPI_PREFIX(UseShaderProgramEXT)(GLenum type, GLuint program);
 GLAPI void APIENTRY GLAPI_PREFIX(TextureBarrierNV)(void);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_944)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_945)(GLenum target, GLuint index, GLsizei count, const GLfloat *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_946)(GLenum target, GLuint index, GLsizei count, const GLfloat *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_947)(GLuint id, GLenum pname, GLint64EXT *params);
-void APIENTRY GLAPI_PREFIX(_dispatch_stub_948)(GLuint id, GLenum pname, GLuint64EXT *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_960)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_961)(GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_962)(GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_963)(GLuint id, GLenum pname, GLint64EXT *params);
+void APIENTRY GLAPI_PREFIX(_dispatch_stub_964)(GLuint id, GLenum pname, GLuint64EXT *params);
 GLAPI void APIENTRY GLAPI_PREFIX(EGLImageTargetRenderbufferStorageOES)(GLenum target, GLvoid *writeOffset);
 GLAPI void APIENTRY GLAPI_PREFIX(EGLImageTargetTexture2DOES)(GLenum target, GLvoid *writeOffset);
 #undef MAPI_TMP_DEFINES
@@ -4751,11 +4767,11 @@ GLAPI void APIENTRY GLAPI_PREFIX(ClampColor)(GLenum target, GLenum clamp)
    ((void (APIENTRY *)(GLenum target, GLenum clamp)) _func)(target, clamp);
 }
 
-GLAPI void APIENTRY GLAPI_PREFIX(ClearBufferfi)(GLenum buffer, GLint drawbuffer, const GLfloat depth, const GLint stencil)
+GLAPI void APIENTRY GLAPI_PREFIX(ClearBufferfi)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
 {
    const struct mapi_table *_tbl = entry_current_get();
    mapi_func _func = ((const mapi_func *) _tbl)[431];
-   ((void (APIENTRY *)(GLenum buffer, GLint drawbuffer, const GLfloat depth, const GLint stencil)) _func)(buffer, drawbuffer, depth, stencil);
+   ((void (APIENTRY *)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)) _func)(buffer, drawbuffer, depth, stencil);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ClearBufferfv)(GLenum buffer, GLint drawbuffer, const GLfloat *value)
@@ -6515,3048 +6531,3160 @@ GLAPI void APIENTRY GLAPI_PREFIX(DrawBuffersATI)(GLsizei n, const GLenum *bufs)
    ((void (APIENTRY *)(GLsizei n, const GLenum *bufs)) _func)(n, bufs);
 }
 
-GLAPI void APIENTRY GLAPI_PREFIX(DrawArraysInstancedARB)(GLenum mode, GLint first, GLsizei count, GLsizei primcount)
+GLAPI void APIENTRY GLAPI_PREFIX(ClampColorARB)(GLenum target, GLenum clamp)
 {
    const struct mapi_table *_tbl = entry_current_get();
    mapi_func _func = ((const mapi_func *) _tbl)[572];
+   ((void (APIENTRY *)(GLenum target, GLenum clamp)) _func)(target, clamp);
+}
+
+GLAPI void APIENTRY GLAPI_PREFIX(DrawArraysInstancedARB)(GLenum mode, GLint first, GLsizei count, GLsizei primcount)
+{
+   const struct mapi_table *_tbl = entry_current_get();
+   mapi_func _func = ((const mapi_func *) _tbl)[573];
    ((void (APIENTRY *)(GLenum mode, GLint first, GLsizei count, GLsizei primcount)) _func)(mode, first, count, primcount);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DrawArraysInstanced)(GLenum mode, GLint first, GLsizei count, GLsizei primcount)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[572];
+   mapi_func _func = ((const mapi_func *) _tbl)[573];
    ((void (APIENTRY *)(GLenum mode, GLint first, GLsizei count, GLsizei primcount)) _func)(mode, first, count, primcount);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DrawArraysInstancedEXT)(GLenum mode, GLint first, GLsizei count, GLsizei primcount)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[572];
+   mapi_func _func = ((const mapi_func *) _tbl)[573];
    ((void (APIENTRY *)(GLenum mode, GLint first, GLsizei count, GLsizei primcount)) _func)(mode, first, count, primcount);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DrawElementsInstancedARB)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[573];
+   mapi_func _func = ((const mapi_func *) _tbl)[574];
    ((void (APIENTRY *)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount)) _func)(mode, count, type, indices, primcount);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DrawElementsInstanced)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[573];
+   mapi_func _func = ((const mapi_func *) _tbl)[574];
    ((void (APIENTRY *)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount)) _func)(mode, count, type, indices, primcount);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DrawElementsInstancedEXT)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[573];
+   mapi_func _func = ((const mapi_func *) _tbl)[574];
    ((void (APIENTRY *)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount)) _func)(mode, count, type, indices, primcount);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(RenderbufferStorageMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[574];
+   mapi_func _func = ((const mapi_func *) _tbl)[575];
    ((void (APIENTRY *)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)) _func)(target, samples, internalformat, width, height);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(RenderbufferStorageMultisampleEXT)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[574];
+   mapi_func _func = ((const mapi_func *) _tbl)[575];
    ((void (APIENTRY *)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)) _func)(target, samples, internalformat, width, height);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FramebufferTextureARB)(GLenum target, GLenum attachment, GLuint texture, GLint level)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[575];
+   mapi_func _func = ((const mapi_func *) _tbl)[576];
    ((void (APIENTRY *)(GLenum target, GLenum attachment, GLuint texture, GLint level)) _func)(target, attachment, texture, level);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FramebufferTextureFaceARB)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[576];
+   mapi_func _func = ((const mapi_func *) _tbl)[577];
    ((void (APIENTRY *)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face)) _func)(target, attachment, texture, level, face);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ProgramParameteriARB)(GLuint program, GLenum pname, GLint value)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[577];
+   mapi_func _func = ((const mapi_func *) _tbl)[578];
    ((void (APIENTRY *)(GLuint program, GLenum pname, GLint value)) _func)(program, pname, value);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribDivisorARB)(GLuint index, GLuint divisor)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[578];
+   mapi_func _func = ((const mapi_func *) _tbl)[579];
    ((void (APIENTRY *)(GLuint index, GLuint divisor)) _func)(index, divisor);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FlushMappedBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[579];
+   mapi_func _func = ((const mapi_func *) _tbl)[580];
    ((void (APIENTRY *)(GLenum target, GLintptr offset, GLsizeiptr length)) _func)(target, offset, length);
 }
 
 GLAPI GLvoid * APIENTRY GLAPI_PREFIX(MapBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[580];
+   mapi_func _func = ((const mapi_func *) _tbl)[581];
    return ((GLvoid * (APIENTRY *)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)) _func)(target, offset, length, access);
 }
 
+GLAPI void APIENTRY GLAPI_PREFIX(TexBufferARB)(GLenum target, GLenum internalFormat, GLuint buffer)
+{
+   const struct mapi_table *_tbl = entry_current_get();
+   mapi_func _func = ((const mapi_func *) _tbl)[582];
+   ((void (APIENTRY *)(GLenum target, GLenum internalFormat, GLuint buffer)) _func)(target, internalFormat, buffer);
+}
+
 GLAPI void APIENTRY GLAPI_PREFIX(BindVertexArray)(GLuint array)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[581];
+   mapi_func _func = ((const mapi_func *) _tbl)[583];
    ((void (APIENTRY *)(GLuint array)) _func)(array);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GenVertexArrays)(GLsizei n, GLuint *arrays)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[582];
+   mapi_func _func = ((const mapi_func *) _tbl)[584];
    ((void (APIENTRY *)(GLsizei n, GLuint *arrays)) _func)(n, arrays);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(CopyBufferSubData)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[583];
+   mapi_func _func = ((const mapi_func *) _tbl)[585];
    ((void (APIENTRY *)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)) _func)(readTarget, writeTarget, readOffset, writeOffset, size);
 }
 
 GLAPI GLenum APIENTRY GLAPI_PREFIX(ClientWaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[584];
+   mapi_func _func = ((const mapi_func *) _tbl)[586];
    return ((GLenum (APIENTRY *)(GLsync sync, GLbitfield flags, GLuint64 timeout)) _func)(sync, flags, timeout);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DeleteSync)(GLsync sync)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[585];
+   mapi_func _func = ((const mapi_func *) _tbl)[587];
    ((void (APIENTRY *)(GLsync sync)) _func)(sync);
 }
 
 GLAPI GLsync APIENTRY GLAPI_PREFIX(FenceSync)(GLenum condition, GLbitfield flags)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[586];
+   mapi_func _func = ((const mapi_func *) _tbl)[588];
    return ((GLsync (APIENTRY *)(GLenum condition, GLbitfield flags)) _func)(condition, flags);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetInteger64v)(GLenum pname, GLint64 *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[587];
+   mapi_func _func = ((const mapi_func *) _tbl)[589];
    ((void (APIENTRY *)(GLenum pname, GLint64 *params)) _func)(pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetSynciv)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[588];
+   mapi_func _func = ((const mapi_func *) _tbl)[590];
    ((void (APIENTRY *)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)) _func)(sync, pname, bufSize, length, values);
 }
 
 GLAPI GLboolean APIENTRY GLAPI_PREFIX(IsSync)(GLsync sync)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[589];
+   mapi_func _func = ((const mapi_func *) _tbl)[591];
    return ((GLboolean (APIENTRY *)(GLsync sync)) _func)(sync);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[590];
+   mapi_func _func = ((const mapi_func *) _tbl)[592];
    ((void (APIENTRY *)(GLsync sync, GLbitfield flags, GLuint64 timeout)) _func)(sync, flags, timeout);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DrawElementsBaseVertex)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[591];
+   mapi_func _func = ((const mapi_func *) _tbl)[593];
    ((void (APIENTRY *)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex)) _func)(mode, count, type, indices, basevertex);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DrawRangeElementsBaseVertex)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[592];
+   mapi_func _func = ((const mapi_func *) _tbl)[594];
    ((void (APIENTRY *)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex)) _func)(mode, start, end, count, type, indices, basevertex);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(MultiDrawElementsBaseVertex)(GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount, const GLint *basevertex)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[593];
+   mapi_func _func = ((const mapi_func *) _tbl)[595];
    ((void (APIENTRY *)(GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount, const GLint *basevertex)) _func)(mode, count, type, indices, primcount, basevertex);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BlendEquationSeparateiARB)(GLuint buf, GLenum modeRGB, GLenum modeA)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[594];
+   mapi_func _func = ((const mapi_func *) _tbl)[596];
    ((void (APIENTRY *)(GLuint buf, GLenum modeRGB, GLenum modeA)) _func)(buf, modeRGB, modeA);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BlendEquationiARB)(GLuint buf, GLenum mode)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[595];
+   mapi_func _func = ((const mapi_func *) _tbl)[597];
    ((void (APIENTRY *)(GLuint buf, GLenum mode)) _func)(buf, mode);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BlendFuncSeparateiARB)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcA, GLenum dstA)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[596];
+   mapi_func _func = ((const mapi_func *) _tbl)[598];
    ((void (APIENTRY *)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcA, GLenum dstA)) _func)(buf, srcRGB, dstRGB, srcA, dstA);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BlendFunciARB)(GLuint buf, GLenum src, GLenum dst)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[597];
+   mapi_func _func = ((const mapi_func *) _tbl)[599];
    ((void (APIENTRY *)(GLuint buf, GLenum src, GLenum dst)) _func)(buf, src, dst);
 }
 
+GLAPI void APIENTRY GLAPI_PREFIX(BindSampler)(GLuint unit, GLuint sampler)
+{
+   const struct mapi_table *_tbl = entry_current_get();
+   mapi_func _func = ((const mapi_func *) _tbl)[600];
+   ((void (APIENTRY *)(GLuint unit, GLuint sampler)) _func)(unit, sampler);
+}
+
+GLAPI void APIENTRY GLAPI_PREFIX(DeleteSamplers)(GLsizei count, const GLuint *samplers)
+{
+   const struct mapi_table *_tbl = entry_current_get();
+   mapi_func _func = ((const mapi_func *) _tbl)[601];
+   ((void (APIENTRY *)(GLsizei count, const GLuint *samplers)) _func)(count, samplers);
+}
+
+GLAPI void APIENTRY GLAPI_PREFIX(GenSamplers)(GLsizei count, GLuint *samplers)
+{
+   const struct mapi_table *_tbl = entry_current_get();
+   mapi_func _func = ((const mapi_func *) _tbl)[602];
+   ((void (APIENTRY *)(GLsizei count, GLuint *samplers)) _func)(count, samplers);
+}
+
+GLAPI void APIENTRY GLAPI_PREFIX(GetSamplerParameterIiv)(GLuint sampler, GLenum pname, GLint *params)
+{
+   const struct mapi_table *_tbl = entry_current_get();
+   mapi_func _func = ((const mapi_func *) _tbl)[603];
+   ((void (APIENTRY *)(GLuint sampler, GLenum pname, GLint *params)) _func)(sampler, pname, params);
+}
+
+GLAPI void APIENTRY GLAPI_PREFIX(GetSamplerParameterIuiv)(GLuint sampler, GLenum pname, GLuint *params)
+{
+   const struct mapi_table *_tbl = entry_current_get();
+   mapi_func _func = ((const mapi_func *) _tbl)[604];
+   ((void (APIENTRY *)(GLuint sampler, GLenum pname, GLuint *params)) _func)(sampler, pname, params);
+}
+
+GLAPI void APIENTRY GLAPI_PREFIX(GetSamplerParameterfv)(GLuint sampler, GLenum pname, GLfloat *params)
+{
+   const struct mapi_table *_tbl = entry_current_get();
+   mapi_func _func = ((const mapi_func *) _tbl)[605];
+   ((void (APIENTRY *)(GLuint sampler, GLenum pname, GLfloat *params)) _func)(sampler, pname, params);
+}
+
+GLAPI void APIENTRY GLAPI_PREFIX(GetSamplerParameteriv)(GLuint sampler, GLenum pname, GLint *params)
+{
+   const struct mapi_table *_tbl = entry_current_get();
+   mapi_func _func = ((const mapi_func *) _tbl)[606];
+   ((void (APIENTRY *)(GLuint sampler, GLenum pname, GLint *params)) _func)(sampler, pname, params);
+}
+
+GLAPI GLboolean APIENTRY GLAPI_PREFIX(IsSampler)(GLuint sampler)
+{
+   const struct mapi_table *_tbl = entry_current_get();
+   mapi_func _func = ((const mapi_func *) _tbl)[607];
+   return ((GLboolean (APIENTRY *)(GLuint sampler)) _func)(sampler);
+}
+
+GLAPI void APIENTRY GLAPI_PREFIX(SamplerParameterIiv)(GLuint sampler, GLenum pname, const GLint *params)
+{
+   const struct mapi_table *_tbl = entry_current_get();
+   mapi_func _func = ((const mapi_func *) _tbl)[608];
+   ((void (APIENTRY *)(GLuint sampler, GLenum pname, const GLint *params)) _func)(sampler, pname, params);
+}
+
+GLAPI void APIENTRY GLAPI_PREFIX(SamplerParameterIuiv)(GLuint sampler, GLenum pname, const GLuint *params)
+{
+   const struct mapi_table *_tbl = entry_current_get();
+   mapi_func _func = ((const mapi_func *) _tbl)[609];
+   ((void (APIENTRY *)(GLuint sampler, GLenum pname, const GLuint *params)) _func)(sampler, pname, params);
+}
+
+GLAPI void APIENTRY GLAPI_PREFIX(SamplerParameterf)(GLuint sampler, GLenum pname, GLfloat param)
+{
+   const struct mapi_table *_tbl = entry_current_get();
+   mapi_func _func = ((const mapi_func *) _tbl)[610];
+   ((void (APIENTRY *)(GLuint sampler, GLenum pname, GLfloat param)) _func)(sampler, pname, param);
+}
+
+GLAPI void APIENTRY GLAPI_PREFIX(SamplerParameterfv)(GLuint sampler, GLenum pname, const GLfloat *params)
+{
+   const struct mapi_table *_tbl = entry_current_get();
+   mapi_func _func = ((const mapi_func *) _tbl)[611];
+   ((void (APIENTRY *)(GLuint sampler, GLenum pname, const GLfloat *params)) _func)(sampler, pname, params);
+}
+
+GLAPI void APIENTRY GLAPI_PREFIX(SamplerParameteri)(GLuint sampler, GLenum pname, GLint param)
+{
+   const struct mapi_table *_tbl = entry_current_get();
+   mapi_func _func = ((const mapi_func *) _tbl)[612];
+   ((void (APIENTRY *)(GLuint sampler, GLenum pname, GLint param)) _func)(sampler, pname, param);
+}
+
+GLAPI void APIENTRY GLAPI_PREFIX(SamplerParameteriv)(GLuint sampler, GLenum pname, const GLint *params)
+{
+   const struct mapi_table *_tbl = entry_current_get();
+   mapi_func _func = ((const mapi_func *) _tbl)[613];
+   ((void (APIENTRY *)(GLuint sampler, GLenum pname, const GLint *params)) _func)(sampler, pname, params);
+}
+
 GLAPI void APIENTRY GLAPI_PREFIX(BindTransformFeedback)(GLenum target, GLuint id)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[598];
+   mapi_func _func = ((const mapi_func *) _tbl)[614];
    ((void (APIENTRY *)(GLenum target, GLuint id)) _func)(target, id);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DeleteTransformFeedbacks)(GLsizei n, const GLuint *ids)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[599];
+   mapi_func _func = ((const mapi_func *) _tbl)[615];
    ((void (APIENTRY *)(GLsizei n, const GLuint *ids)) _func)(n, ids);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DrawTransformFeedback)(GLenum mode, GLuint id)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[600];
+   mapi_func _func = ((const mapi_func *) _tbl)[616];
    ((void (APIENTRY *)(GLenum mode, GLuint id)) _func)(mode, id);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GenTransformFeedbacks)(GLsizei n, GLuint *ids)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[601];
+   mapi_func _func = ((const mapi_func *) _tbl)[617];
    ((void (APIENTRY *)(GLsizei n, GLuint *ids)) _func)(n, ids);
 }
 
 GLAPI GLboolean APIENTRY GLAPI_PREFIX(IsTransformFeedback)(GLuint id)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[602];
+   mapi_func _func = ((const mapi_func *) _tbl)[618];
    return ((GLboolean (APIENTRY *)(GLuint id)) _func)(id);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(PauseTransformFeedback)(void)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[603];
+   mapi_func _func = ((const mapi_func *) _tbl)[619];
    ((void (APIENTRY *)(void)) _func)();
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ResumeTransformFeedback)(void)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[604];
+   mapi_func _func = ((const mapi_func *) _tbl)[620];
    ((void (APIENTRY *)(void)) _func)();
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ClearDepthf)(GLclampf depth)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[605];
+   mapi_func _func = ((const mapi_func *) _tbl)[621];
    ((void (APIENTRY *)(GLclampf depth)) _func)(depth);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DepthRangef)(GLclampf zNear, GLclampf zFar)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[606];
+   mapi_func _func = ((const mapi_func *) _tbl)[622];
    ((void (APIENTRY *)(GLclampf zNear, GLclampf zFar)) _func)(zNear, zFar);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetShaderPrecisionFormat)(GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[607];
+   mapi_func _func = ((const mapi_func *) _tbl)[623];
    ((void (APIENTRY *)(GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision)) _func)(shadertype, precisiontype, range, precision);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ReleaseShaderCompiler)(void)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[608];
+   mapi_func _func = ((const mapi_func *) _tbl)[624];
    ((void (APIENTRY *)(void)) _func)();
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ShaderBinary)(GLsizei n, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[609];
+   mapi_func _func = ((const mapi_func *) _tbl)[625];
    ((void (APIENTRY *)(GLsizei n, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length)) _func)(n, shaders, binaryformat, binary, length);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(PolygonOffsetEXT)(GLfloat factor, GLfloat bias)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[613];
+   mapi_func _func = ((const mapi_func *) _tbl)[629];
    ((void (APIENTRY *)(GLfloat factor, GLfloat bias)) _func)(factor, bias);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[632];
+   mapi_func _func = ((const mapi_func *) _tbl)[648];
    ((void (APIENTRY *)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer)) _func)(size, type, stride, count, pointer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(EdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean *pointer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[633];
+   mapi_func _func = ((const mapi_func *) _tbl)[649];
    ((void (APIENTRY *)(GLsizei stride, GLsizei count, const GLboolean *pointer)) _func)(stride, count, pointer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(IndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[634];
+   mapi_func _func = ((const mapi_func *) _tbl)[650];
    ((void (APIENTRY *)(GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer)) _func)(type, stride, count, pointer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(NormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[635];
+   mapi_func _func = ((const mapi_func *) _tbl)[651];
    ((void (APIENTRY *)(GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer)) _func)(type, stride, count, pointer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(TexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[636];
+   mapi_func _func = ((const mapi_func *) _tbl)[652];
    ((void (APIENTRY *)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer)) _func)(size, type, stride, count, pointer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[637];
+   mapi_func _func = ((const mapi_func *) _tbl)[653];
    ((void (APIENTRY *)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer)) _func)(size, type, stride, count, pointer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(PointParameterfEXT)(GLenum pname, GLfloat param)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[638];
+   mapi_func _func = ((const mapi_func *) _tbl)[654];
    ((void (APIENTRY *)(GLenum pname, GLfloat param)) _func)(pname, param);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(PointParameterf)(GLenum pname, GLfloat param)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[638];
+   mapi_func _func = ((const mapi_func *) _tbl)[654];
    ((void (APIENTRY *)(GLenum pname, GLfloat param)) _func)(pname, param);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(PointParameterfARB)(GLenum pname, GLfloat param)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[638];
+   mapi_func _func = ((const mapi_func *) _tbl)[654];
    ((void (APIENTRY *)(GLenum pname, GLfloat param)) _func)(pname, param);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(PointParameterfvEXT)(GLenum pname, const GLfloat *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[639];
+   mapi_func _func = ((const mapi_func *) _tbl)[655];
    ((void (APIENTRY *)(GLenum pname, const GLfloat *params)) _func)(pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(PointParameterfv)(GLenum pname, const GLfloat *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[639];
+   mapi_func _func = ((const mapi_func *) _tbl)[655];
    ((void (APIENTRY *)(GLenum pname, const GLfloat *params)) _func)(pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(PointParameterfvARB)(GLenum pname, const GLfloat *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[639];
+   mapi_func _func = ((const mapi_func *) _tbl)[655];
    ((void (APIENTRY *)(GLenum pname, const GLfloat *params)) _func)(pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(LockArraysEXT)(GLint first, GLsizei count)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[640];
+   mapi_func _func = ((const mapi_func *) _tbl)[656];
    ((void (APIENTRY *)(GLint first, GLsizei count)) _func)(first, count);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(UnlockArraysEXT)(void)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[641];
+   mapi_func _func = ((const mapi_func *) _tbl)[657];
    ((void (APIENTRY *)(void)) _func)();
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3bEXT)(GLbyte red, GLbyte green, GLbyte blue)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[642];
+   mapi_func _func = ((const mapi_func *) _tbl)[658];
    ((void (APIENTRY *)(GLbyte red, GLbyte green, GLbyte blue)) _func)(red, green, blue);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3b)(GLbyte red, GLbyte green, GLbyte blue)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[642];
+   mapi_func _func = ((const mapi_func *) _tbl)[658];
    ((void (APIENTRY *)(GLbyte red, GLbyte green, GLbyte blue)) _func)(red, green, blue);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3bvEXT)(const GLbyte *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[643];
+   mapi_func _func = ((const mapi_func *) _tbl)[659];
    ((void (APIENTRY *)(const GLbyte *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3bv)(const GLbyte *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[643];
+   mapi_func _func = ((const mapi_func *) _tbl)[659];
    ((void (APIENTRY *)(const GLbyte *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[644];
+   mapi_func _func = ((const mapi_func *) _tbl)[660];
    ((void (APIENTRY *)(GLdouble red, GLdouble green, GLdouble blue)) _func)(red, green, blue);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3d)(GLdouble red, GLdouble green, GLdouble blue)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[644];
+   mapi_func _func = ((const mapi_func *) _tbl)[660];
    ((void (APIENTRY *)(GLdouble red, GLdouble green, GLdouble blue)) _func)(red, green, blue);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3dvEXT)(const GLdouble *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[645];
+   mapi_func _func = ((const mapi_func *) _tbl)[661];
    ((void (APIENTRY *)(const GLdouble *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3dv)(const GLdouble *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[645];
+   mapi_func _func = ((const mapi_func *) _tbl)[661];
    ((void (APIENTRY *)(const GLdouble *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[646];
+   mapi_func _func = ((const mapi_func *) _tbl)[662];
    ((void (APIENTRY *)(GLfloat red, GLfloat green, GLfloat blue)) _func)(red, green, blue);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3f)(GLfloat red, GLfloat green, GLfloat blue)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[646];
+   mapi_func _func = ((const mapi_func *) _tbl)[662];
    ((void (APIENTRY *)(GLfloat red, GLfloat green, GLfloat blue)) _func)(red, green, blue);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3fvEXT)(const GLfloat *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[647];
+   mapi_func _func = ((const mapi_func *) _tbl)[663];
    ((void (APIENTRY *)(const GLfloat *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3fv)(const GLfloat *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[647];
+   mapi_func _func = ((const mapi_func *) _tbl)[663];
    ((void (APIENTRY *)(const GLfloat *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3iEXT)(GLint red, GLint green, GLint blue)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[648];
+   mapi_func _func = ((const mapi_func *) _tbl)[664];
    ((void (APIENTRY *)(GLint red, GLint green, GLint blue)) _func)(red, green, blue);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3i)(GLint red, GLint green, GLint blue)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[648];
+   mapi_func _func = ((const mapi_func *) _tbl)[664];
    ((void (APIENTRY *)(GLint red, GLint green, GLint blue)) _func)(red, green, blue);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3ivEXT)(const GLint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[649];
+   mapi_func _func = ((const mapi_func *) _tbl)[665];
    ((void (APIENTRY *)(const GLint *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3iv)(const GLint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[649];
+   mapi_func _func = ((const mapi_func *) _tbl)[665];
    ((void (APIENTRY *)(const GLint *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[650];
+   mapi_func _func = ((const mapi_func *) _tbl)[666];
    ((void (APIENTRY *)(GLshort red, GLshort green, GLshort blue)) _func)(red, green, blue);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3s)(GLshort red, GLshort green, GLshort blue)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[650];
+   mapi_func _func = ((const mapi_func *) _tbl)[666];
    ((void (APIENTRY *)(GLshort red, GLshort green, GLshort blue)) _func)(red, green, blue);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3svEXT)(const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[651];
+   mapi_func _func = ((const mapi_func *) _tbl)[667];
    ((void (APIENTRY *)(const GLshort *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3sv)(const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[651];
+   mapi_func _func = ((const mapi_func *) _tbl)[667];
    ((void (APIENTRY *)(const GLshort *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[652];
+   mapi_func _func = ((const mapi_func *) _tbl)[668];
    ((void (APIENTRY *)(GLubyte red, GLubyte green, GLubyte blue)) _func)(red, green, blue);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3ub)(GLubyte red, GLubyte green, GLubyte blue)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[652];
+   mapi_func _func = ((const mapi_func *) _tbl)[668];
    ((void (APIENTRY *)(GLubyte red, GLubyte green, GLubyte blue)) _func)(red, green, blue);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3ubvEXT)(const GLubyte *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[653];
+   mapi_func _func = ((const mapi_func *) _tbl)[669];
    ((void (APIENTRY *)(const GLubyte *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3ubv)(const GLubyte *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[653];
+   mapi_func _func = ((const mapi_func *) _tbl)[669];
    ((void (APIENTRY *)(const GLubyte *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[654];
+   mapi_func _func = ((const mapi_func *) _tbl)[670];
    ((void (APIENTRY *)(GLuint red, GLuint green, GLuint blue)) _func)(red, green, blue);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3ui)(GLuint red, GLuint green, GLuint blue)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[654];
+   mapi_func _func = ((const mapi_func *) _tbl)[670];
    ((void (APIENTRY *)(GLuint red, GLuint green, GLuint blue)) _func)(red, green, blue);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3uivEXT)(const GLuint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[655];
+   mapi_func _func = ((const mapi_func *) _tbl)[671];
    ((void (APIENTRY *)(const GLuint *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3uiv)(const GLuint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[655];
+   mapi_func _func = ((const mapi_func *) _tbl)[671];
    ((void (APIENTRY *)(const GLuint *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[656];
+   mapi_func _func = ((const mapi_func *) _tbl)[672];
    ((void (APIENTRY *)(GLushort red, GLushort green, GLushort blue)) _func)(red, green, blue);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3us)(GLushort red, GLushort green, GLushort blue)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[656];
+   mapi_func _func = ((const mapi_func *) _tbl)[672];
    ((void (APIENTRY *)(GLushort red, GLushort green, GLushort blue)) _func)(red, green, blue);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3usvEXT)(const GLushort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[657];
+   mapi_func _func = ((const mapi_func *) _tbl)[673];
    ((void (APIENTRY *)(const GLushort *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColor3usv)(const GLushort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[657];
+   mapi_func _func = ((const mapi_func *) _tbl)[673];
    ((void (APIENTRY *)(const GLushort *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[658];
+   mapi_func _func = ((const mapi_func *) _tbl)[674];
    ((void (APIENTRY *)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)) _func)(size, type, stride, pointer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SecondaryColorPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[658];
+   mapi_func _func = ((const mapi_func *) _tbl)[674];
    ((void (APIENTRY *)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)) _func)(size, type, stride, pointer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(MultiDrawArraysEXT)(GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[659];
+   mapi_func _func = ((const mapi_func *) _tbl)[675];
    ((void (APIENTRY *)(GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount)) _func)(mode, first, count, primcount);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(MultiDrawArrays)(GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[659];
+   mapi_func _func = ((const mapi_func *) _tbl)[675];
    ((void (APIENTRY *)(GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount)) _func)(mode, first, count, primcount);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(MultiDrawElementsEXT)(GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[660];
+   mapi_func _func = ((const mapi_func *) _tbl)[676];
    ((void (APIENTRY *)(GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount)) _func)(mode, count, type, indices, primcount);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(MultiDrawElements)(GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[660];
+   mapi_func _func = ((const mapi_func *) _tbl)[676];
    ((void (APIENTRY *)(GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount)) _func)(mode, count, type, indices, primcount);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FogCoordPointerEXT)(GLenum type, GLsizei stride, const GLvoid *pointer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[661];
+   mapi_func _func = ((const mapi_func *) _tbl)[677];
    ((void (APIENTRY *)(GLenum type, GLsizei stride, const GLvoid *pointer)) _func)(type, stride, pointer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FogCoordPointer)(GLenum type, GLsizei stride, const GLvoid *pointer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[661];
+   mapi_func _func = ((const mapi_func *) _tbl)[677];
    ((void (APIENTRY *)(GLenum type, GLsizei stride, const GLvoid *pointer)) _func)(type, stride, pointer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FogCoorddEXT)(GLdouble coord)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[662];
+   mapi_func _func = ((const mapi_func *) _tbl)[678];
    ((void (APIENTRY *)(GLdouble coord)) _func)(coord);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FogCoordd)(GLdouble coord)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[662];
+   mapi_func _func = ((const mapi_func *) _tbl)[678];
    ((void (APIENTRY *)(GLdouble coord)) _func)(coord);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FogCoorddvEXT)(const GLdouble *coord)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[663];
+   mapi_func _func = ((const mapi_func *) _tbl)[679];
    ((void (APIENTRY *)(const GLdouble *coord)) _func)(coord);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FogCoorddv)(const GLdouble *coord)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[663];
+   mapi_func _func = ((const mapi_func *) _tbl)[679];
    ((void (APIENTRY *)(const GLdouble *coord)) _func)(coord);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FogCoordfEXT)(GLfloat coord)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[664];
+   mapi_func _func = ((const mapi_func *) _tbl)[680];
    ((void (APIENTRY *)(GLfloat coord)) _func)(coord);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FogCoordf)(GLfloat coord)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[664];
+   mapi_func _func = ((const mapi_func *) _tbl)[680];
    ((void (APIENTRY *)(GLfloat coord)) _func)(coord);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FogCoordfvEXT)(const GLfloat *coord)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[665];
+   mapi_func _func = ((const mapi_func *) _tbl)[681];
    ((void (APIENTRY *)(const GLfloat *coord)) _func)(coord);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FogCoordfv)(const GLfloat *coord)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[665];
+   mapi_func _func = ((const mapi_func *) _tbl)[681];
    ((void (APIENTRY *)(const GLfloat *coord)) _func)(coord);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[667];
+   mapi_func _func = ((const mapi_func *) _tbl)[683];
    ((void (APIENTRY *)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)) _func)(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BlendFuncSeparate)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[667];
+   mapi_func _func = ((const mapi_func *) _tbl)[683];
    ((void (APIENTRY *)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)) _func)(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FlushVertexArrayRangeNV)(void)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[668];
+   mapi_func _func = ((const mapi_func *) _tbl)[684];
    ((void (APIENTRY *)(void)) _func)();
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexArrayRangeNV)(GLsizei length, const GLvoid *pointer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[669];
+   mapi_func _func = ((const mapi_func *) _tbl)[685];
    ((void (APIENTRY *)(GLsizei length, const GLvoid *pointer)) _func)(length, pointer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(CombinerInputNV)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[670];
+   mapi_func _func = ((const mapi_func *) _tbl)[686];
    ((void (APIENTRY *)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage)) _func)(stage, portion, variable, input, mapping, componentUsage);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(CombinerOutputNV)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[671];
+   mapi_func _func = ((const mapi_func *) _tbl)[687];
    ((void (APIENTRY *)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum)) _func)(stage, portion, abOutput, cdOutput, sumOutput, scale, bias, abDotProduct, cdDotProduct, muxSum);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(CombinerParameterfNV)(GLenum pname, GLfloat param)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[672];
+   mapi_func _func = ((const mapi_func *) _tbl)[688];
    ((void (APIENTRY *)(GLenum pname, GLfloat param)) _func)(pname, param);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(CombinerParameterfvNV)(GLenum pname, const GLfloat *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[673];
+   mapi_func _func = ((const mapi_func *) _tbl)[689];
    ((void (APIENTRY *)(GLenum pname, const GLfloat *params)) _func)(pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(CombinerParameteriNV)(GLenum pname, GLint param)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[674];
+   mapi_func _func = ((const mapi_func *) _tbl)[690];
    ((void (APIENTRY *)(GLenum pname, GLint param)) _func)(pname, param);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(CombinerParameterivNV)(GLenum pname, const GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[675];
+   mapi_func _func = ((const mapi_func *) _tbl)[691];
    ((void (APIENTRY *)(GLenum pname, const GLint *params)) _func)(pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FinalCombinerInputNV)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[676];
+   mapi_func _func = ((const mapi_func *) _tbl)[692];
    ((void (APIENTRY *)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage)) _func)(variable, input, mapping, componentUsage);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetCombinerInputParameterfvNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[677];
+   mapi_func _func = ((const mapi_func *) _tbl)[693];
    ((void (APIENTRY *)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params)) _func)(stage, portion, variable, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetCombinerInputParameterivNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[678];
+   mapi_func _func = ((const mapi_func *) _tbl)[694];
    ((void (APIENTRY *)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params)) _func)(stage, portion, variable, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetCombinerOutputParameterfvNV)(GLenum stage, GLenum portion, GLenum pname, GLfloat *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[679];
+   mapi_func _func = ((const mapi_func *) _tbl)[695];
    ((void (APIENTRY *)(GLenum stage, GLenum portion, GLenum pname, GLfloat *params)) _func)(stage, portion, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetCombinerOutputParameterivNV)(GLenum stage, GLenum portion, GLenum pname, GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[680];
+   mapi_func _func = ((const mapi_func *) _tbl)[696];
    ((void (APIENTRY *)(GLenum stage, GLenum portion, GLenum pname, GLint *params)) _func)(stage, portion, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetFinalCombinerInputParameterfvNV)(GLenum variable, GLenum pname, GLfloat *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[681];
+   mapi_func _func = ((const mapi_func *) _tbl)[697];
    ((void (APIENTRY *)(GLenum variable, GLenum pname, GLfloat *params)) _func)(variable, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetFinalCombinerInputParameterivNV)(GLenum variable, GLenum pname, GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[682];
+   mapi_func _func = ((const mapi_func *) _tbl)[698];
    ((void (APIENTRY *)(GLenum variable, GLenum pname, GLint *params)) _func)(variable, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ResizeBuffersMESA)(void)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[683];
+   mapi_func _func = ((const mapi_func *) _tbl)[699];
    ((void (APIENTRY *)(void)) _func)();
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2dMESA)(GLdouble x, GLdouble y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[684];
+   mapi_func _func = ((const mapi_func *) _tbl)[700];
    ((void (APIENTRY *)(GLdouble x, GLdouble y)) _func)(x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2d)(GLdouble x, GLdouble y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[684];
+   mapi_func _func = ((const mapi_func *) _tbl)[700];
    ((void (APIENTRY *)(GLdouble x, GLdouble y)) _func)(x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2dARB)(GLdouble x, GLdouble y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[684];
+   mapi_func _func = ((const mapi_func *) _tbl)[700];
    ((void (APIENTRY *)(GLdouble x, GLdouble y)) _func)(x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2dvMESA)(const GLdouble *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[685];
+   mapi_func _func = ((const mapi_func *) _tbl)[701];
    ((void (APIENTRY *)(const GLdouble *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2dv)(const GLdouble *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[685];
+   mapi_func _func = ((const mapi_func *) _tbl)[701];
    ((void (APIENTRY *)(const GLdouble *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2dvARB)(const GLdouble *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[685];
+   mapi_func _func = ((const mapi_func *) _tbl)[701];
    ((void (APIENTRY *)(const GLdouble *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2fMESA)(GLfloat x, GLfloat y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[686];
+   mapi_func _func = ((const mapi_func *) _tbl)[702];
    ((void (APIENTRY *)(GLfloat x, GLfloat y)) _func)(x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2f)(GLfloat x, GLfloat y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[686];
+   mapi_func _func = ((const mapi_func *) _tbl)[702];
    ((void (APIENTRY *)(GLfloat x, GLfloat y)) _func)(x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2fARB)(GLfloat x, GLfloat y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[686];
+   mapi_func _func = ((const mapi_func *) _tbl)[702];
    ((void (APIENTRY *)(GLfloat x, GLfloat y)) _func)(x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2fvMESA)(const GLfloat *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[687];
+   mapi_func _func = ((const mapi_func *) _tbl)[703];
    ((void (APIENTRY *)(const GLfloat *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2fv)(const GLfloat *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[687];
+   mapi_func _func = ((const mapi_func *) _tbl)[703];
    ((void (APIENTRY *)(const GLfloat *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2fvARB)(const GLfloat *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[687];
+   mapi_func _func = ((const mapi_func *) _tbl)[703];
    ((void (APIENTRY *)(const GLfloat *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2iMESA)(GLint x, GLint y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[688];
+   mapi_func _func = ((const mapi_func *) _tbl)[704];
    ((void (APIENTRY *)(GLint x, GLint y)) _func)(x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2i)(GLint x, GLint y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[688];
+   mapi_func _func = ((const mapi_func *) _tbl)[704];
    ((void (APIENTRY *)(GLint x, GLint y)) _func)(x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2iARB)(GLint x, GLint y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[688];
+   mapi_func _func = ((const mapi_func *) _tbl)[704];
    ((void (APIENTRY *)(GLint x, GLint y)) _func)(x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2ivMESA)(const GLint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[689];
+   mapi_func _func = ((const mapi_func *) _tbl)[705];
    ((void (APIENTRY *)(const GLint *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2iv)(const GLint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[689];
+   mapi_func _func = ((const mapi_func *) _tbl)[705];
    ((void (APIENTRY *)(const GLint *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2ivARB)(const GLint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[689];
+   mapi_func _func = ((const mapi_func *) _tbl)[705];
    ((void (APIENTRY *)(const GLint *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2sMESA)(GLshort x, GLshort y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[690];
+   mapi_func _func = ((const mapi_func *) _tbl)[706];
    ((void (APIENTRY *)(GLshort x, GLshort y)) _func)(x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2s)(GLshort x, GLshort y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[690];
+   mapi_func _func = ((const mapi_func *) _tbl)[706];
    ((void (APIENTRY *)(GLshort x, GLshort y)) _func)(x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2sARB)(GLshort x, GLshort y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[690];
+   mapi_func _func = ((const mapi_func *) _tbl)[706];
    ((void (APIENTRY *)(GLshort x, GLshort y)) _func)(x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2svMESA)(const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[691];
+   mapi_func _func = ((const mapi_func *) _tbl)[707];
    ((void (APIENTRY *)(const GLshort *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2sv)(const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[691];
+   mapi_func _func = ((const mapi_func *) _tbl)[707];
    ((void (APIENTRY *)(const GLshort *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos2svARB)(const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[691];
+   mapi_func _func = ((const mapi_func *) _tbl)[707];
    ((void (APIENTRY *)(const GLshort *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3dMESA)(GLdouble x, GLdouble y, GLdouble z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[692];
+   mapi_func _func = ((const mapi_func *) _tbl)[708];
    ((void (APIENTRY *)(GLdouble x, GLdouble y, GLdouble z)) _func)(x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3d)(GLdouble x, GLdouble y, GLdouble z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[692];
+   mapi_func _func = ((const mapi_func *) _tbl)[708];
    ((void (APIENTRY *)(GLdouble x, GLdouble y, GLdouble z)) _func)(x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3dARB)(GLdouble x, GLdouble y, GLdouble z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[692];
+   mapi_func _func = ((const mapi_func *) _tbl)[708];
    ((void (APIENTRY *)(GLdouble x, GLdouble y, GLdouble z)) _func)(x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3dvMESA)(const GLdouble *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[693];
+   mapi_func _func = ((const mapi_func *) _tbl)[709];
    ((void (APIENTRY *)(const GLdouble *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3dv)(const GLdouble *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[693];
+   mapi_func _func = ((const mapi_func *) _tbl)[709];
    ((void (APIENTRY *)(const GLdouble *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3dvARB)(const GLdouble *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[693];
+   mapi_func _func = ((const mapi_func *) _tbl)[709];
    ((void (APIENTRY *)(const GLdouble *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3fMESA)(GLfloat x, GLfloat y, GLfloat z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[694];
+   mapi_func _func = ((const mapi_func *) _tbl)[710];
    ((void (APIENTRY *)(GLfloat x, GLfloat y, GLfloat z)) _func)(x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3f)(GLfloat x, GLfloat y, GLfloat z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[694];
+   mapi_func _func = ((const mapi_func *) _tbl)[710];
    ((void (APIENTRY *)(GLfloat x, GLfloat y, GLfloat z)) _func)(x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3fARB)(GLfloat x, GLfloat y, GLfloat z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[694];
+   mapi_func _func = ((const mapi_func *) _tbl)[710];
    ((void (APIENTRY *)(GLfloat x, GLfloat y, GLfloat z)) _func)(x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3fvMESA)(const GLfloat *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[695];
+   mapi_func _func = ((const mapi_func *) _tbl)[711];
    ((void (APIENTRY *)(const GLfloat *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3fv)(const GLfloat *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[695];
+   mapi_func _func = ((const mapi_func *) _tbl)[711];
    ((void (APIENTRY *)(const GLfloat *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3fvARB)(const GLfloat *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[695];
+   mapi_func _func = ((const mapi_func *) _tbl)[711];
    ((void (APIENTRY *)(const GLfloat *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3iMESA)(GLint x, GLint y, GLint z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[696];
+   mapi_func _func = ((const mapi_func *) _tbl)[712];
    ((void (APIENTRY *)(GLint x, GLint y, GLint z)) _func)(x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3i)(GLint x, GLint y, GLint z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[696];
+   mapi_func _func = ((const mapi_func *) _tbl)[712];
    ((void (APIENTRY *)(GLint x, GLint y, GLint z)) _func)(x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3iARB)(GLint x, GLint y, GLint z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[696];
+   mapi_func _func = ((const mapi_func *) _tbl)[712];
    ((void (APIENTRY *)(GLint x, GLint y, GLint z)) _func)(x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3ivMESA)(const GLint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[697];
+   mapi_func _func = ((const mapi_func *) _tbl)[713];
    ((void (APIENTRY *)(const GLint *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3iv)(const GLint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[697];
+   mapi_func _func = ((const mapi_func *) _tbl)[713];
    ((void (APIENTRY *)(const GLint *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3ivARB)(const GLint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[697];
+   mapi_func _func = ((const mapi_func *) _tbl)[713];
    ((void (APIENTRY *)(const GLint *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3sMESA)(GLshort x, GLshort y, GLshort z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[698];
+   mapi_func _func = ((const mapi_func *) _tbl)[714];
    ((void (APIENTRY *)(GLshort x, GLshort y, GLshort z)) _func)(x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3s)(GLshort x, GLshort y, GLshort z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[698];
+   mapi_func _func = ((const mapi_func *) _tbl)[714];
    ((void (APIENTRY *)(GLshort x, GLshort y, GLshort z)) _func)(x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3sARB)(GLshort x, GLshort y, GLshort z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[698];
+   mapi_func _func = ((const mapi_func *) _tbl)[714];
    ((void (APIENTRY *)(GLshort x, GLshort y, GLshort z)) _func)(x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3svMESA)(const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[699];
+   mapi_func _func = ((const mapi_func *) _tbl)[715];
    ((void (APIENTRY *)(const GLshort *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3sv)(const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[699];
+   mapi_func _func = ((const mapi_func *) _tbl)[715];
    ((void (APIENTRY *)(const GLshort *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos3svARB)(const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[699];
+   mapi_func _func = ((const mapi_func *) _tbl)[715];
    ((void (APIENTRY *)(const GLshort *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[700];
+   mapi_func _func = ((const mapi_func *) _tbl)[716];
    ((void (APIENTRY *)(GLdouble x, GLdouble y, GLdouble z, GLdouble w)) _func)(x, y, z, w);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos4dvMESA)(const GLdouble *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[701];
+   mapi_func _func = ((const mapi_func *) _tbl)[717];
    ((void (APIENTRY *)(const GLdouble *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[702];
+   mapi_func _func = ((const mapi_func *) _tbl)[718];
    ((void (APIENTRY *)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)) _func)(x, y, z, w);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos4fvMESA)(const GLfloat *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[703];
+   mapi_func _func = ((const mapi_func *) _tbl)[719];
    ((void (APIENTRY *)(const GLfloat *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[704];
+   mapi_func _func = ((const mapi_func *) _tbl)[720];
    ((void (APIENTRY *)(GLint x, GLint y, GLint z, GLint w)) _func)(x, y, z, w);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos4ivMESA)(const GLint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[705];
+   mapi_func _func = ((const mapi_func *) _tbl)[721];
    ((void (APIENTRY *)(const GLint *v)) _func)(v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[706];
+   mapi_func _func = ((const mapi_func *) _tbl)[722];
    ((void (APIENTRY *)(GLshort x, GLshort y, GLshort z, GLshort w)) _func)(x, y, z, w);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(WindowPos4svMESA)(const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[707];
+   mapi_func _func = ((const mapi_func *) _tbl)[723];
    ((void (APIENTRY *)(const GLshort *v)) _func)(v);
 }
 
 GLAPI GLboolean APIENTRY GLAPI_PREFIX(AreProgramsResidentNV)(GLsizei n, const GLuint *ids, GLboolean *residences)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[717];
+   mapi_func _func = ((const mapi_func *) _tbl)[733];
    return ((GLboolean (APIENTRY *)(GLsizei n, const GLuint *ids, GLboolean *residences)) _func)(n, ids, residences);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BindProgramNV)(GLenum target, GLuint program)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[718];
+   mapi_func _func = ((const mapi_func *) _tbl)[734];
    ((void (APIENTRY *)(GLenum target, GLuint program)) _func)(target, program);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BindProgramARB)(GLenum target, GLuint program)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[718];
+   mapi_func _func = ((const mapi_func *) _tbl)[734];
    ((void (APIENTRY *)(GLenum target, GLuint program)) _func)(target, program);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DeleteProgramsNV)(GLsizei n, const GLuint *programs)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[719];
+   mapi_func _func = ((const mapi_func *) _tbl)[735];
    ((void (APIENTRY *)(GLsizei n, const GLuint *programs)) _func)(n, programs);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DeleteProgramsARB)(GLsizei n, const GLuint *programs)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[719];
+   mapi_func _func = ((const mapi_func *) _tbl)[735];
    ((void (APIENTRY *)(GLsizei n, const GLuint *programs)) _func)(n, programs);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ExecuteProgramNV)(GLenum target, GLuint id, const GLfloat *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[720];
+   mapi_func _func = ((const mapi_func *) _tbl)[736];
    ((void (APIENTRY *)(GLenum target, GLuint id, const GLfloat *params)) _func)(target, id, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GenProgramsNV)(GLsizei n, GLuint *programs)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[721];
+   mapi_func _func = ((const mapi_func *) _tbl)[737];
    ((void (APIENTRY *)(GLsizei n, GLuint *programs)) _func)(n, programs);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GenProgramsARB)(GLsizei n, GLuint *programs)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[721];
+   mapi_func _func = ((const mapi_func *) _tbl)[737];
    ((void (APIENTRY *)(GLsizei n, GLuint *programs)) _func)(n, programs);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetProgramParameterdvNV)(GLenum target, GLuint index, GLenum pname, GLdouble *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[722];
+   mapi_func _func = ((const mapi_func *) _tbl)[738];
    ((void (APIENTRY *)(GLenum target, GLuint index, GLenum pname, GLdouble *params)) _func)(target, index, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[723];
+   mapi_func _func = ((const mapi_func *) _tbl)[739];
    ((void (APIENTRY *)(GLenum target, GLuint index, GLenum pname, GLfloat *params)) _func)(target, index, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetProgramStringNV)(GLuint id, GLenum pname, GLubyte *program)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[724];
+   mapi_func _func = ((const mapi_func *) _tbl)[740];
    ((void (APIENTRY *)(GLuint id, GLenum pname, GLubyte *program)) _func)(id, pname, program);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetProgramivNV)(GLuint id, GLenum pname, GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[725];
+   mapi_func _func = ((const mapi_func *) _tbl)[741];
    ((void (APIENTRY *)(GLuint id, GLenum pname, GLint *params)) _func)(id, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[726];
+   mapi_func _func = ((const mapi_func *) _tbl)[742];
    ((void (APIENTRY *)(GLenum target, GLuint address, GLenum pname, GLint *params)) _func)(target, address, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetVertexAttribPointervNV)(GLuint index, GLenum pname, GLvoid **pointer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[727];
+   mapi_func _func = ((const mapi_func *) _tbl)[743];
    ((void (APIENTRY *)(GLuint index, GLenum pname, GLvoid **pointer)) _func)(index, pname, pointer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetVertexAttribPointerv)(GLuint index, GLenum pname, GLvoid **pointer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[727];
+   mapi_func _func = ((const mapi_func *) _tbl)[743];
    ((void (APIENTRY *)(GLuint index, GLenum pname, GLvoid **pointer)) _func)(index, pname, pointer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetVertexAttribPointervARB)(GLuint index, GLenum pname, GLvoid **pointer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[727];
+   mapi_func _func = ((const mapi_func *) _tbl)[743];
    ((void (APIENTRY *)(GLuint index, GLenum pname, GLvoid **pointer)) _func)(index, pname, pointer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[728];
+   mapi_func _func = ((const mapi_func *) _tbl)[744];
    ((void (APIENTRY *)(GLuint index, GLenum pname, GLdouble *params)) _func)(index, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[729];
+   mapi_func _func = ((const mapi_func *) _tbl)[745];
    ((void (APIENTRY *)(GLuint index, GLenum pname, GLfloat *params)) _func)(index, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetVertexAttribivNV)(GLuint index, GLenum pname, GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[730];
+   mapi_func _func = ((const mapi_func *) _tbl)[746];
    ((void (APIENTRY *)(GLuint index, GLenum pname, GLint *params)) _func)(index, pname, params);
 }
 
 GLAPI GLboolean APIENTRY GLAPI_PREFIX(IsProgramNV)(GLuint program)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[731];
+   mapi_func _func = ((const mapi_func *) _tbl)[747];
    return ((GLboolean (APIENTRY *)(GLuint program)) _func)(program);
 }
 
 GLAPI GLboolean APIENTRY GLAPI_PREFIX(IsProgramARB)(GLuint program)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[731];
+   mapi_func _func = ((const mapi_func *) _tbl)[747];
    return ((GLboolean (APIENTRY *)(GLuint program)) _func)(program);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(LoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte *program)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[732];
+   mapi_func _func = ((const mapi_func *) _tbl)[748];
    ((void (APIENTRY *)(GLenum target, GLuint id, GLsizei len, const GLubyte *program)) _func)(target, id, len, program);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ProgramParameters4dvNV)(GLenum target, GLuint index, GLsizei num, const GLdouble *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[733];
+   mapi_func _func = ((const mapi_func *) _tbl)[749];
    ((void (APIENTRY *)(GLenum target, GLuint index, GLsizei num, const GLdouble *params)) _func)(target, index, num, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ProgramParameters4fvNV)(GLenum target, GLuint index, GLsizei num, const GLfloat *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[734];
+   mapi_func _func = ((const mapi_func *) _tbl)[750];
    ((void (APIENTRY *)(GLenum target, GLuint index, GLsizei num, const GLfloat *params)) _func)(target, index, num, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(RequestResidentProgramsNV)(GLsizei n, const GLuint *ids)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[735];
+   mapi_func _func = ((const mapi_func *) _tbl)[751];
    ((void (APIENTRY *)(GLsizei n, const GLuint *ids)) _func)(n, ids);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(TrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[736];
+   mapi_func _func = ((const mapi_func *) _tbl)[752];
    ((void (APIENTRY *)(GLenum target, GLuint address, GLenum matrix, GLenum transform)) _func)(target, address, matrix, transform);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib1dNV)(GLuint index, GLdouble x)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[737];
+   mapi_func _func = ((const mapi_func *) _tbl)[753];
    ((void (APIENTRY *)(GLuint index, GLdouble x)) _func)(index, x);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib1dvNV)(GLuint index, const GLdouble *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[738];
+   mapi_func _func = ((const mapi_func *) _tbl)[754];
    ((void (APIENTRY *)(GLuint index, const GLdouble *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib1fNV)(GLuint index, GLfloat x)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[739];
+   mapi_func _func = ((const mapi_func *) _tbl)[755];
    ((void (APIENTRY *)(GLuint index, GLfloat x)) _func)(index, x);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib1fvNV)(GLuint index, const GLfloat *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[740];
+   mapi_func _func = ((const mapi_func *) _tbl)[756];
    ((void (APIENTRY *)(GLuint index, const GLfloat *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib1sNV)(GLuint index, GLshort x)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[741];
+   mapi_func _func = ((const mapi_func *) _tbl)[757];
    ((void (APIENTRY *)(GLuint index, GLshort x)) _func)(index, x);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib1svNV)(GLuint index, const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[742];
+   mapi_func _func = ((const mapi_func *) _tbl)[758];
    ((void (APIENTRY *)(GLuint index, const GLshort *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[743];
+   mapi_func _func = ((const mapi_func *) _tbl)[759];
    ((void (APIENTRY *)(GLuint index, GLdouble x, GLdouble y)) _func)(index, x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib2dvNV)(GLuint index, const GLdouble *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[744];
+   mapi_func _func = ((const mapi_func *) _tbl)[760];
    ((void (APIENTRY *)(GLuint index, const GLdouble *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[745];
+   mapi_func _func = ((const mapi_func *) _tbl)[761];
    ((void (APIENTRY *)(GLuint index, GLfloat x, GLfloat y)) _func)(index, x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib2fvNV)(GLuint index, const GLfloat *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[746];
+   mapi_func _func = ((const mapi_func *) _tbl)[762];
    ((void (APIENTRY *)(GLuint index, const GLfloat *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[747];
+   mapi_func _func = ((const mapi_func *) _tbl)[763];
    ((void (APIENTRY *)(GLuint index, GLshort x, GLshort y)) _func)(index, x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib2svNV)(GLuint index, const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[748];
+   mapi_func _func = ((const mapi_func *) _tbl)[764];
    ((void (APIENTRY *)(GLuint index, const GLshort *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[749];
+   mapi_func _func = ((const mapi_func *) _tbl)[765];
    ((void (APIENTRY *)(GLuint index, GLdouble x, GLdouble y, GLdouble z)) _func)(index, x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib3dvNV)(GLuint index, const GLdouble *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[750];
+   mapi_func _func = ((const mapi_func *) _tbl)[766];
    ((void (APIENTRY *)(GLuint index, const GLdouble *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[751];
+   mapi_func _func = ((const mapi_func *) _tbl)[767];
    ((void (APIENTRY *)(GLuint index, GLfloat x, GLfloat y, GLfloat z)) _func)(index, x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib3fvNV)(GLuint index, const GLfloat *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[752];
+   mapi_func _func = ((const mapi_func *) _tbl)[768];
    ((void (APIENTRY *)(GLuint index, const GLfloat *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[753];
+   mapi_func _func = ((const mapi_func *) _tbl)[769];
    ((void (APIENTRY *)(GLuint index, GLshort x, GLshort y, GLshort z)) _func)(index, x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib3svNV)(GLuint index, const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[754];
+   mapi_func _func = ((const mapi_func *) _tbl)[770];
    ((void (APIENTRY *)(GLuint index, const GLshort *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[755];
+   mapi_func _func = ((const mapi_func *) _tbl)[771];
    ((void (APIENTRY *)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)) _func)(index, x, y, z, w);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib4dvNV)(GLuint index, const GLdouble *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[756];
+   mapi_func _func = ((const mapi_func *) _tbl)[772];
    ((void (APIENTRY *)(GLuint index, const GLdouble *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[757];
+   mapi_func _func = ((const mapi_func *) _tbl)[773];
    ((void (APIENTRY *)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)) _func)(index, x, y, z, w);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib4fvNV)(GLuint index, const GLfloat *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[758];
+   mapi_func _func = ((const mapi_func *) _tbl)[774];
    ((void (APIENTRY *)(GLuint index, const GLfloat *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[759];
+   mapi_func _func = ((const mapi_func *) _tbl)[775];
    ((void (APIENTRY *)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w)) _func)(index, x, y, z, w);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib4svNV)(GLuint index, const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[760];
+   mapi_func _func = ((const mapi_func *) _tbl)[776];
    ((void (APIENTRY *)(GLuint index, const GLshort *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[761];
+   mapi_func _func = ((const mapi_func *) _tbl)[777];
    ((void (APIENTRY *)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w)) _func)(index, x, y, z, w);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttrib4ubvNV)(GLuint index, const GLubyte *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[762];
+   mapi_func _func = ((const mapi_func *) _tbl)[778];
    ((void (APIENTRY *)(GLuint index, const GLubyte *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[763];
+   mapi_func _func = ((const mapi_func *) _tbl)[779];
    ((void (APIENTRY *)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)) _func)(index, size, type, stride, pointer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[764];
+   mapi_func _func = ((const mapi_func *) _tbl)[780];
    ((void (APIENTRY *)(GLuint index, GLsizei n, const GLdouble *v)) _func)(index, n, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[765];
+   mapi_func _func = ((const mapi_func *) _tbl)[781];
    ((void (APIENTRY *)(GLuint index, GLsizei n, const GLfloat *v)) _func)(index, n, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[766];
+   mapi_func _func = ((const mapi_func *) _tbl)[782];
    ((void (APIENTRY *)(GLuint index, GLsizei n, const GLshort *v)) _func)(index, n, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[767];
+   mapi_func _func = ((const mapi_func *) _tbl)[783];
    ((void (APIENTRY *)(GLuint index, GLsizei n, const GLdouble *v)) _func)(index, n, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[768];
+   mapi_func _func = ((const mapi_func *) _tbl)[784];
    ((void (APIENTRY *)(GLuint index, GLsizei n, const GLfloat *v)) _func)(index, n, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[769];
+   mapi_func _func = ((const mapi_func *) _tbl)[785];
    ((void (APIENTRY *)(GLuint index, GLsizei n, const GLshort *v)) _func)(index, n, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[770];
+   mapi_func _func = ((const mapi_func *) _tbl)[786];
    ((void (APIENTRY *)(GLuint index, GLsizei n, const GLdouble *v)) _func)(index, n, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[771];
+   mapi_func _func = ((const mapi_func *) _tbl)[787];
    ((void (APIENTRY *)(GLuint index, GLsizei n, const GLfloat *v)) _func)(index, n, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[772];
+   mapi_func _func = ((const mapi_func *) _tbl)[788];
    ((void (APIENTRY *)(GLuint index, GLsizei n, const GLshort *v)) _func)(index, n, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[773];
+   mapi_func _func = ((const mapi_func *) _tbl)[789];
    ((void (APIENTRY *)(GLuint index, GLsizei n, const GLdouble *v)) _func)(index, n, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[774];
+   mapi_func _func = ((const mapi_func *) _tbl)[790];
    ((void (APIENTRY *)(GLuint index, GLsizei n, const GLfloat *v)) _func)(index, n, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[775];
+   mapi_func _func = ((const mapi_func *) _tbl)[791];
    ((void (APIENTRY *)(GLuint index, GLsizei n, const GLshort *v)) _func)(index, n, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[776];
+   mapi_func _func = ((const mapi_func *) _tbl)[792];
    ((void (APIENTRY *)(GLuint index, GLsizei n, const GLubyte *v)) _func)(index, n, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetTexBumpParameterfvATI)(GLenum pname, GLfloat *param)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[777];
+   mapi_func _func = ((const mapi_func *) _tbl)[793];
    ((void (APIENTRY *)(GLenum pname, GLfloat *param)) _func)(pname, param);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetTexBumpParameterivATI)(GLenum pname, GLint *param)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[778];
+   mapi_func _func = ((const mapi_func *) _tbl)[794];
    ((void (APIENTRY *)(GLenum pname, GLint *param)) _func)(pname, param);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(TexBumpParameterfvATI)(GLenum pname, const GLfloat *param)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[779];
+   mapi_func _func = ((const mapi_func *) _tbl)[795];
    ((void (APIENTRY *)(GLenum pname, const GLfloat *param)) _func)(pname, param);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(TexBumpParameterivATI)(GLenum pname, const GLint *param)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[780];
+   mapi_func _func = ((const mapi_func *) _tbl)[796];
    ((void (APIENTRY *)(GLenum pname, const GLint *param)) _func)(pname, param);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(AlphaFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[781];
+   mapi_func _func = ((const mapi_func *) _tbl)[797];
    ((void (APIENTRY *)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod)) _func)(op, dst, dstMod, arg1, arg1Rep, arg1Mod);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(AlphaFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[782];
+   mapi_func _func = ((const mapi_func *) _tbl)[798];
    ((void (APIENTRY *)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod)) _func)(op, dst, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(AlphaFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[783];
+   mapi_func _func = ((const mapi_func *) _tbl)[799];
    ((void (APIENTRY *)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod)) _func)(op, dst, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BeginFragmentShaderATI)(void)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[784];
+   mapi_func _func = ((const mapi_func *) _tbl)[800];
    ((void (APIENTRY *)(void)) _func)();
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BindFragmentShaderATI)(GLuint id)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[785];
+   mapi_func _func = ((const mapi_func *) _tbl)[801];
    ((void (APIENTRY *)(GLuint id)) _func)(id);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ColorFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[786];
+   mapi_func _func = ((const mapi_func *) _tbl)[802];
    ((void (APIENTRY *)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod)) _func)(op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ColorFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[787];
+   mapi_func _func = ((const mapi_func *) _tbl)[803];
    ((void (APIENTRY *)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod)) _func)(op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ColorFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[788];
+   mapi_func _func = ((const mapi_func *) _tbl)[804];
    ((void (APIENTRY *)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod)) _func)(op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DeleteFragmentShaderATI)(GLuint id)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[789];
+   mapi_func _func = ((const mapi_func *) _tbl)[805];
    ((void (APIENTRY *)(GLuint id)) _func)(id);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(EndFragmentShaderATI)(void)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[790];
+   mapi_func _func = ((const mapi_func *) _tbl)[806];
    ((void (APIENTRY *)(void)) _func)();
 }
 
 GLAPI GLuint APIENTRY GLAPI_PREFIX(GenFragmentShadersATI)(GLuint range)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[791];
+   mapi_func _func = ((const mapi_func *) _tbl)[807];
    return ((GLuint (APIENTRY *)(GLuint range)) _func)(range);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(PassTexCoordATI)(GLuint dst, GLuint coord, GLenum swizzle)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[792];
+   mapi_func _func = ((const mapi_func *) _tbl)[808];
    ((void (APIENTRY *)(GLuint dst, GLuint coord, GLenum swizzle)) _func)(dst, coord, swizzle);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SampleMapATI)(GLuint dst, GLuint interp, GLenum swizzle)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[793];
+   mapi_func _func = ((const mapi_func *) _tbl)[809];
    ((void (APIENTRY *)(GLuint dst, GLuint interp, GLenum swizzle)) _func)(dst, interp, swizzle);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(SetFragmentShaderConstantATI)(GLuint dst, const GLfloat *value)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[794];
+   mapi_func _func = ((const mapi_func *) _tbl)[810];
    ((void (APIENTRY *)(GLuint dst, const GLfloat *value)) _func)(dst, value);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(PointParameteriNV)(GLenum pname, GLint param)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[795];
+   mapi_func _func = ((const mapi_func *) _tbl)[811];
    ((void (APIENTRY *)(GLenum pname, GLint param)) _func)(pname, param);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(PointParameteri)(GLenum pname, GLint param)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[795];
+   mapi_func _func = ((const mapi_func *) _tbl)[811];
    ((void (APIENTRY *)(GLenum pname, GLint param)) _func)(pname, param);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(PointParameterivNV)(GLenum pname, const GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[796];
+   mapi_func _func = ((const mapi_func *) _tbl)[812];
    ((void (APIENTRY *)(GLenum pname, const GLint *params)) _func)(pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(PointParameteriv)(GLenum pname, const GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[796];
+   mapi_func _func = ((const mapi_func *) _tbl)[812];
    ((void (APIENTRY *)(GLenum pname, const GLint *params)) _func)(pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DeleteVertexArrays)(GLsizei n, const GLuint *arrays)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[799];
+   mapi_func _func = ((const mapi_func *) _tbl)[815];
    ((void (APIENTRY *)(GLsizei n, const GLuint *arrays)) _func)(n, arrays);
 }
 
 GLAPI GLboolean APIENTRY GLAPI_PREFIX(IsVertexArray)(GLuint array)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[801];
+   mapi_func _func = ((const mapi_func *) _tbl)[817];
    return ((GLboolean (APIENTRY *)(GLuint array)) _func)(array);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte *name, GLdouble *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[802];
+   mapi_func _func = ((const mapi_func *) _tbl)[818];
    ((void (APIENTRY *)(GLuint id, GLsizei len, const GLubyte *name, GLdouble *params)) _func)(id, len, name, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte *name, GLfloat *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[803];
+   mapi_func _func = ((const mapi_func *) _tbl)[819];
    ((void (APIENTRY *)(GLuint id, GLsizei len, const GLubyte *name, GLfloat *params)) _func)(id, len, name, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[804];
+   mapi_func _func = ((const mapi_func *) _tbl)[820];
    ((void (APIENTRY *)(GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w)) _func)(id, len, name, x, y, z, w);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[805];
+   mapi_func _func = ((const mapi_func *) _tbl)[821];
    ((void (APIENTRY *)(GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v)) _func)(id, len, name, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[806];
+   mapi_func _func = ((const mapi_func *) _tbl)[822];
    ((void (APIENTRY *)(GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)) _func)(id, len, name, x, y, z, w);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[807];
+   mapi_func _func = ((const mapi_func *) _tbl)[823];
    ((void (APIENTRY *)(GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v)) _func)(id, len, name, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(PrimitiveRestartIndexNV)(GLuint index)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[808];
+   mapi_func _func = ((const mapi_func *) _tbl)[824];
    ((void (APIENTRY *)(GLuint index)) _func)(index);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(PrimitiveRestartIndex)(GLuint index)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[808];
+   mapi_func _func = ((const mapi_func *) _tbl)[824];
    ((void (APIENTRY *)(GLuint index)) _func)(index);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(PrimitiveRestartNV)(void)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[809];
+   mapi_func _func = ((const mapi_func *) _tbl)[825];
    ((void (APIENTRY *)(void)) _func)();
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BlendEquationSeparate)(GLenum modeRGB, GLenum modeA)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[857];
+   mapi_func _func = ((const mapi_func *) _tbl)[873];
    ((void (APIENTRY *)(GLenum modeRGB, GLenum modeA)) _func)(modeRGB, modeA);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BindFramebufferEXT)(GLenum target, GLuint framebuffer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[858];
+   mapi_func _func = ((const mapi_func *) _tbl)[874];
    ((void (APIENTRY *)(GLenum target, GLuint framebuffer)) _func)(target, framebuffer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BindFramebuffer)(GLenum target, GLuint framebuffer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[858];
+   mapi_func _func = ((const mapi_func *) _tbl)[874];
    ((void (APIENTRY *)(GLenum target, GLuint framebuffer)) _func)(target, framebuffer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BindRenderbufferEXT)(GLenum target, GLuint renderbuffer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[859];
+   mapi_func _func = ((const mapi_func *) _tbl)[875];
    ((void (APIENTRY *)(GLenum target, GLuint renderbuffer)) _func)(target, renderbuffer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BindRenderbuffer)(GLenum target, GLuint renderbuffer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[859];
+   mapi_func _func = ((const mapi_func *) _tbl)[875];
    ((void (APIENTRY *)(GLenum target, GLuint renderbuffer)) _func)(target, renderbuffer);
 }
 
 GLAPI GLenum APIENTRY GLAPI_PREFIX(CheckFramebufferStatusEXT)(GLenum target)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[860];
+   mapi_func _func = ((const mapi_func *) _tbl)[876];
    return ((GLenum (APIENTRY *)(GLenum target)) _func)(target);
 }
 
 GLAPI GLenum APIENTRY GLAPI_PREFIX(CheckFramebufferStatus)(GLenum target)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[860];
+   mapi_func _func = ((const mapi_func *) _tbl)[876];
    return ((GLenum (APIENTRY *)(GLenum target)) _func)(target);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DeleteFramebuffersEXT)(GLsizei n, const GLuint *framebuffers)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[861];
+   mapi_func _func = ((const mapi_func *) _tbl)[877];
    ((void (APIENTRY *)(GLsizei n, const GLuint *framebuffers)) _func)(n, framebuffers);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DeleteFramebuffers)(GLsizei n, const GLuint *framebuffers)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[861];
+   mapi_func _func = ((const mapi_func *) _tbl)[877];
    ((void (APIENTRY *)(GLsizei n, const GLuint *framebuffers)) _func)(n, framebuffers);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DeleteRenderbuffersEXT)(GLsizei n, const GLuint *renderbuffers)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[862];
+   mapi_func _func = ((const mapi_func *) _tbl)[878];
    ((void (APIENTRY *)(GLsizei n, const GLuint *renderbuffers)) _func)(n, renderbuffers);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DeleteRenderbuffers)(GLsizei n, const GLuint *renderbuffers)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[862];
+   mapi_func _func = ((const mapi_func *) _tbl)[878];
    ((void (APIENTRY *)(GLsizei n, const GLuint *renderbuffers)) _func)(n, renderbuffers);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[863];
+   mapi_func _func = ((const mapi_func *) _tbl)[879];
    ((void (APIENTRY *)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)) _func)(target, attachment, renderbuffertarget, renderbuffer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FramebufferRenderbuffer)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[863];
+   mapi_func _func = ((const mapi_func *) _tbl)[879];
    ((void (APIENTRY *)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)) _func)(target, attachment, renderbuffertarget, renderbuffer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[864];
+   mapi_func _func = ((const mapi_func *) _tbl)[880];
    ((void (APIENTRY *)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)) _func)(target, attachment, textarget, texture, level);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FramebufferTexture1D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[864];
+   mapi_func _func = ((const mapi_func *) _tbl)[880];
    ((void (APIENTRY *)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)) _func)(target, attachment, textarget, texture, level);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[865];
+   mapi_func _func = ((const mapi_func *) _tbl)[881];
    ((void (APIENTRY *)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)) _func)(target, attachment, textarget, texture, level);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FramebufferTexture2D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[865];
+   mapi_func _func = ((const mapi_func *) _tbl)[881];
    ((void (APIENTRY *)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)) _func)(target, attachment, textarget, texture, level);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[866];
+   mapi_func _func = ((const mapi_func *) _tbl)[882];
    ((void (APIENTRY *)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)) _func)(target, attachment, textarget, texture, level, zoffset);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FramebufferTexture3D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[866];
+   mapi_func _func = ((const mapi_func *) _tbl)[882];
    ((void (APIENTRY *)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)) _func)(target, attachment, textarget, texture, level, zoffset);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GenFramebuffersEXT)(GLsizei n, GLuint *framebuffers)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[867];
+   mapi_func _func = ((const mapi_func *) _tbl)[883];
    ((void (APIENTRY *)(GLsizei n, GLuint *framebuffers)) _func)(n, framebuffers);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GenFramebuffers)(GLsizei n, GLuint *framebuffers)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[867];
+   mapi_func _func = ((const mapi_func *) _tbl)[883];
    ((void (APIENTRY *)(GLsizei n, GLuint *framebuffers)) _func)(n, framebuffers);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GenRenderbuffersEXT)(GLsizei n, GLuint *renderbuffers)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[868];
+   mapi_func _func = ((const mapi_func *) _tbl)[884];
    ((void (APIENTRY *)(GLsizei n, GLuint *renderbuffers)) _func)(n, renderbuffers);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GenRenderbuffers)(GLsizei n, GLuint *renderbuffers)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[868];
+   mapi_func _func = ((const mapi_func *) _tbl)[884];
    ((void (APIENTRY *)(GLsizei n, GLuint *renderbuffers)) _func)(n, renderbuffers);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GenerateMipmapEXT)(GLenum target)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[869];
+   mapi_func _func = ((const mapi_func *) _tbl)[885];
    ((void (APIENTRY *)(GLenum target)) _func)(target);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GenerateMipmap)(GLenum target)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[869];
+   mapi_func _func = ((const mapi_func *) _tbl)[885];
    ((void (APIENTRY *)(GLenum target)) _func)(target);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[870];
+   mapi_func _func = ((const mapi_func *) _tbl)[886];
    ((void (APIENTRY *)(GLenum target, GLenum attachment, GLenum pname, GLint *params)) _func)(target, attachment, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetFramebufferAttachmentParameteriv)(GLenum target, GLenum attachment, GLenum pname, GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[870];
+   mapi_func _func = ((const mapi_func *) _tbl)[886];
    ((void (APIENTRY *)(GLenum target, GLenum attachment, GLenum pname, GLint *params)) _func)(target, attachment, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[871];
+   mapi_func _func = ((const mapi_func *) _tbl)[887];
    ((void (APIENTRY *)(GLenum target, GLenum pname, GLint *params)) _func)(target, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetRenderbufferParameteriv)(GLenum target, GLenum pname, GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[871];
+   mapi_func _func = ((const mapi_func *) _tbl)[887];
    ((void (APIENTRY *)(GLenum target, GLenum pname, GLint *params)) _func)(target, pname, params);
 }
 
 GLAPI GLboolean APIENTRY GLAPI_PREFIX(IsFramebufferEXT)(GLuint framebuffer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[872];
+   mapi_func _func = ((const mapi_func *) _tbl)[888];
    return ((GLboolean (APIENTRY *)(GLuint framebuffer)) _func)(framebuffer);
 }
 
 GLAPI GLboolean APIENTRY GLAPI_PREFIX(IsFramebuffer)(GLuint framebuffer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[872];
+   mapi_func _func = ((const mapi_func *) _tbl)[888];
    return ((GLboolean (APIENTRY *)(GLuint framebuffer)) _func)(framebuffer);
 }
 
 GLAPI GLboolean APIENTRY GLAPI_PREFIX(IsRenderbufferEXT)(GLuint renderbuffer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[873];
+   mapi_func _func = ((const mapi_func *) _tbl)[889];
    return ((GLboolean (APIENTRY *)(GLuint renderbuffer)) _func)(renderbuffer);
 }
 
 GLAPI GLboolean APIENTRY GLAPI_PREFIX(IsRenderbuffer)(GLuint renderbuffer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[873];
+   mapi_func _func = ((const mapi_func *) _tbl)[889];
    return ((GLboolean (APIENTRY *)(GLuint renderbuffer)) _func)(renderbuffer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(RenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[874];
+   mapi_func _func = ((const mapi_func *) _tbl)[890];
    ((void (APIENTRY *)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)) _func)(target, internalformat, width, height);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(RenderbufferStorage)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[874];
+   mapi_func _func = ((const mapi_func *) _tbl)[890];
    ((void (APIENTRY *)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)) _func)(target, internalformat, width, height);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BlitFramebuffer)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[875];
+   mapi_func _func = ((const mapi_func *) _tbl)[891];
    ((void (APIENTRY *)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)) _func)(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BindFragDataLocationEXT)(GLuint program, GLuint colorNumber, const GLchar *name)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[878];
+   mapi_func _func = ((const mapi_func *) _tbl)[894];
    ((void (APIENTRY *)(GLuint program, GLuint colorNumber, const GLchar *name)) _func)(program, colorNumber, name);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BindFragDataLocation)(GLuint program, GLuint colorNumber, const GLchar *name)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[878];
+   mapi_func _func = ((const mapi_func *) _tbl)[894];
    ((void (APIENTRY *)(GLuint program, GLuint colorNumber, const GLchar *name)) _func)(program, colorNumber, name);
 }
 
 GLAPI GLint APIENTRY GLAPI_PREFIX(GetFragDataLocationEXT)(GLuint program, const GLchar *name)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[879];
+   mapi_func _func = ((const mapi_func *) _tbl)[895];
    return ((GLint (APIENTRY *)(GLuint program, const GLchar *name)) _func)(program, name);
 }
 
 GLAPI GLint APIENTRY GLAPI_PREFIX(GetFragDataLocation)(GLuint program, const GLchar *name)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[879];
+   mapi_func _func = ((const mapi_func *) _tbl)[895];
    return ((GLint (APIENTRY *)(GLuint program, const GLchar *name)) _func)(program, name);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetUniformuivEXT)(GLuint program, GLint location, GLuint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[880];
+   mapi_func _func = ((const mapi_func *) _tbl)[896];
    ((void (APIENTRY *)(GLuint program, GLint location, GLuint *params)) _func)(program, location, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetUniformuiv)(GLuint program, GLint location, GLuint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[880];
+   mapi_func _func = ((const mapi_func *) _tbl)[896];
    ((void (APIENTRY *)(GLuint program, GLint location, GLuint *params)) _func)(program, location, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetVertexAttribIivEXT)(GLuint index, GLenum pname, GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[881];
+   mapi_func _func = ((const mapi_func *) _tbl)[897];
    ((void (APIENTRY *)(GLuint index, GLenum pname, GLint *params)) _func)(index, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetVertexAttribIiv)(GLuint index, GLenum pname, GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[881];
+   mapi_func _func = ((const mapi_func *) _tbl)[897];
    ((void (APIENTRY *)(GLuint index, GLenum pname, GLint *params)) _func)(index, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetVertexAttribIuivEXT)(GLuint index, GLenum pname, GLuint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[882];
+   mapi_func _func = ((const mapi_func *) _tbl)[898];
    ((void (APIENTRY *)(GLuint index, GLenum pname, GLuint *params)) _func)(index, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetVertexAttribIuiv)(GLuint index, GLenum pname, GLuint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[882];
+   mapi_func _func = ((const mapi_func *) _tbl)[898];
    ((void (APIENTRY *)(GLuint index, GLenum pname, GLuint *params)) _func)(index, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(Uniform1uiEXT)(GLint location, GLuint x)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[883];
+   mapi_func _func = ((const mapi_func *) _tbl)[899];
    ((void (APIENTRY *)(GLint location, GLuint x)) _func)(location, x);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(Uniform1ui)(GLint location, GLuint x)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[883];
+   mapi_func _func = ((const mapi_func *) _tbl)[899];
    ((void (APIENTRY *)(GLint location, GLuint x)) _func)(location, x);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(Uniform1uivEXT)(GLint location, GLsizei count, const GLuint *value)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[884];
+   mapi_func _func = ((const mapi_func *) _tbl)[900];
    ((void (APIENTRY *)(GLint location, GLsizei count, const GLuint *value)) _func)(location, count, value);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(Uniform1uiv)(GLint location, GLsizei count, const GLuint *value)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[884];
+   mapi_func _func = ((const mapi_func *) _tbl)[900];
    ((void (APIENTRY *)(GLint location, GLsizei count, const GLuint *value)) _func)(location, count, value);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(Uniform2uiEXT)(GLint location, GLuint x, GLuint y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[885];
+   mapi_func _func = ((const mapi_func *) _tbl)[901];
    ((void (APIENTRY *)(GLint location, GLuint x, GLuint y)) _func)(location, x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(Uniform2ui)(GLint location, GLuint x, GLuint y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[885];
+   mapi_func _func = ((const mapi_func *) _tbl)[901];
    ((void (APIENTRY *)(GLint location, GLuint x, GLuint y)) _func)(location, x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(Uniform2uivEXT)(GLint location, GLsizei count, const GLuint *value)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[886];
+   mapi_func _func = ((const mapi_func *) _tbl)[902];
    ((void (APIENTRY *)(GLint location, GLsizei count, const GLuint *value)) _func)(location, count, value);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(Uniform2uiv)(GLint location, GLsizei count, const GLuint *value)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[886];
+   mapi_func _func = ((const mapi_func *) _tbl)[902];
    ((void (APIENTRY *)(GLint location, GLsizei count, const GLuint *value)) _func)(location, count, value);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(Uniform3uiEXT)(GLint location, GLuint x, GLuint y, GLuint z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[887];
+   mapi_func _func = ((const mapi_func *) _tbl)[903];
    ((void (APIENTRY *)(GLint location, GLuint x, GLuint y, GLuint z)) _func)(location, x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(Uniform3ui)(GLint location, GLuint x, GLuint y, GLuint z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[887];
+   mapi_func _func = ((const mapi_func *) _tbl)[903];
    ((void (APIENTRY *)(GLint location, GLuint x, GLuint y, GLuint z)) _func)(location, x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(Uniform3uivEXT)(GLint location, GLsizei count, const GLuint *value)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[888];
+   mapi_func _func = ((const mapi_func *) _tbl)[904];
    ((void (APIENTRY *)(GLint location, GLsizei count, const GLuint *value)) _func)(location, count, value);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(Uniform3uiv)(GLint location, GLsizei count, const GLuint *value)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[888];
+   mapi_func _func = ((const mapi_func *) _tbl)[904];
    ((void (APIENTRY *)(GLint location, GLsizei count, const GLuint *value)) _func)(location, count, value);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(Uniform4uiEXT)(GLint location, GLuint x, GLuint y, GLuint z, GLuint w)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[889];
+   mapi_func _func = ((const mapi_func *) _tbl)[905];
    ((void (APIENTRY *)(GLint location, GLuint x, GLuint y, GLuint z, GLuint w)) _func)(location, x, y, z, w);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(Uniform4ui)(GLint location, GLuint x, GLuint y, GLuint z, GLuint w)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[889];
+   mapi_func _func = ((const mapi_func *) _tbl)[905];
    ((void (APIENTRY *)(GLint location, GLuint x, GLuint y, GLuint z, GLuint w)) _func)(location, x, y, z, w);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(Uniform4uivEXT)(GLint location, GLsizei count, const GLuint *value)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[890];
+   mapi_func _func = ((const mapi_func *) _tbl)[906];
    ((void (APIENTRY *)(GLint location, GLsizei count, const GLuint *value)) _func)(location, count, value);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(Uniform4uiv)(GLint location, GLsizei count, const GLuint *value)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[890];
+   mapi_func _func = ((const mapi_func *) _tbl)[906];
    ((void (APIENTRY *)(GLint location, GLsizei count, const GLuint *value)) _func)(location, count, value);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI1iEXT)(GLuint index, GLint x)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[891];
+   mapi_func _func = ((const mapi_func *) _tbl)[907];
    ((void (APIENTRY *)(GLuint index, GLint x)) _func)(index, x);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI1i)(GLuint index, GLint x)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[891];
+   mapi_func _func = ((const mapi_func *) _tbl)[907];
    ((void (APIENTRY *)(GLuint index, GLint x)) _func)(index, x);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI1ivEXT)(GLuint index, const GLint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[892];
+   mapi_func _func = ((const mapi_func *) _tbl)[908];
    ((void (APIENTRY *)(GLuint index, const GLint *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI1iv)(GLuint index, const GLint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[892];
+   mapi_func _func = ((const mapi_func *) _tbl)[908];
    ((void (APIENTRY *)(GLuint index, const GLint *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI1uiEXT)(GLuint index, GLuint x)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[893];
+   mapi_func _func = ((const mapi_func *) _tbl)[909];
    ((void (APIENTRY *)(GLuint index, GLuint x)) _func)(index, x);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI1ui)(GLuint index, GLuint x)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[893];
+   mapi_func _func = ((const mapi_func *) _tbl)[909];
    ((void (APIENTRY *)(GLuint index, GLuint x)) _func)(index, x);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI1uivEXT)(GLuint index, const GLuint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[894];
+   mapi_func _func = ((const mapi_func *) _tbl)[910];
    ((void (APIENTRY *)(GLuint index, const GLuint *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI1uiv)(GLuint index, const GLuint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[894];
+   mapi_func _func = ((const mapi_func *) _tbl)[910];
    ((void (APIENTRY *)(GLuint index, const GLuint *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI2iEXT)(GLuint index, GLint x, GLint y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[895];
+   mapi_func _func = ((const mapi_func *) _tbl)[911];
    ((void (APIENTRY *)(GLuint index, GLint x, GLint y)) _func)(index, x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI2i)(GLuint index, GLint x, GLint y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[895];
+   mapi_func _func = ((const mapi_func *) _tbl)[911];
    ((void (APIENTRY *)(GLuint index, GLint x, GLint y)) _func)(index, x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI2ivEXT)(GLuint index, const GLint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[896];
+   mapi_func _func = ((const mapi_func *) _tbl)[912];
    ((void (APIENTRY *)(GLuint index, const GLint *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI2iv)(GLuint index, const GLint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[896];
+   mapi_func _func = ((const mapi_func *) _tbl)[912];
    ((void (APIENTRY *)(GLuint index, const GLint *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI2uiEXT)(GLuint index, GLuint x, GLuint y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[897];
+   mapi_func _func = ((const mapi_func *) _tbl)[913];
    ((void (APIENTRY *)(GLuint index, GLuint x, GLuint y)) _func)(index, x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI2ui)(GLuint index, GLuint x, GLuint y)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[897];
+   mapi_func _func = ((const mapi_func *) _tbl)[913];
    ((void (APIENTRY *)(GLuint index, GLuint x, GLuint y)) _func)(index, x, y);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI2uivEXT)(GLuint index, const GLuint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[898];
+   mapi_func _func = ((const mapi_func *) _tbl)[914];
    ((void (APIENTRY *)(GLuint index, const GLuint *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI2uiv)(GLuint index, const GLuint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[898];
+   mapi_func _func = ((const mapi_func *) _tbl)[914];
    ((void (APIENTRY *)(GLuint index, const GLuint *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI3iEXT)(GLuint index, GLint x, GLint y, GLint z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[899];
+   mapi_func _func = ((const mapi_func *) _tbl)[915];
    ((void (APIENTRY *)(GLuint index, GLint x, GLint y, GLint z)) _func)(index, x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI3i)(GLuint index, GLint x, GLint y, GLint z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[899];
+   mapi_func _func = ((const mapi_func *) _tbl)[915];
    ((void (APIENTRY *)(GLuint index, GLint x, GLint y, GLint z)) _func)(index, x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI3ivEXT)(GLuint index, const GLint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[900];
+   mapi_func _func = ((const mapi_func *) _tbl)[916];
    ((void (APIENTRY *)(GLuint index, const GLint *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI3iv)(GLuint index, const GLint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[900];
+   mapi_func _func = ((const mapi_func *) _tbl)[916];
    ((void (APIENTRY *)(GLuint index, const GLint *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI3uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[901];
+   mapi_func _func = ((const mapi_func *) _tbl)[917];
    ((void (APIENTRY *)(GLuint index, GLuint x, GLuint y, GLuint z)) _func)(index, x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI3ui)(GLuint index, GLuint x, GLuint y, GLuint z)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[901];
+   mapi_func _func = ((const mapi_func *) _tbl)[917];
    ((void (APIENTRY *)(GLuint index, GLuint x, GLuint y, GLuint z)) _func)(index, x, y, z);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI3uivEXT)(GLuint index, const GLuint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[902];
+   mapi_func _func = ((const mapi_func *) _tbl)[918];
    ((void (APIENTRY *)(GLuint index, const GLuint *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI3uiv)(GLuint index, const GLuint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[902];
+   mapi_func _func = ((const mapi_func *) _tbl)[918];
    ((void (APIENTRY *)(GLuint index, const GLuint *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI4bvEXT)(GLuint index, const GLbyte *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[903];
+   mapi_func _func = ((const mapi_func *) _tbl)[919];
    ((void (APIENTRY *)(GLuint index, const GLbyte *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI4bv)(GLuint index, const GLbyte *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[903];
+   mapi_func _func = ((const mapi_func *) _tbl)[919];
    ((void (APIENTRY *)(GLuint index, const GLbyte *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI4iEXT)(GLuint index, GLint x, GLint y, GLint z, GLint w)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[904];
+   mapi_func _func = ((const mapi_func *) _tbl)[920];
    ((void (APIENTRY *)(GLuint index, GLint x, GLint y, GLint z, GLint w)) _func)(index, x, y, z, w);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI4i)(GLuint index, GLint x, GLint y, GLint z, GLint w)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[904];
+   mapi_func _func = ((const mapi_func *) _tbl)[920];
    ((void (APIENTRY *)(GLuint index, GLint x, GLint y, GLint z, GLint w)) _func)(index, x, y, z, w);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI4ivEXT)(GLuint index, const GLint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[905];
+   mapi_func _func = ((const mapi_func *) _tbl)[921];
    ((void (APIENTRY *)(GLuint index, const GLint *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI4iv)(GLuint index, const GLint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[905];
+   mapi_func _func = ((const mapi_func *) _tbl)[921];
    ((void (APIENTRY *)(GLuint index, const GLint *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI4svEXT)(GLuint index, const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[906];
+   mapi_func _func = ((const mapi_func *) _tbl)[922];
    ((void (APIENTRY *)(GLuint index, const GLshort *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI4sv)(GLuint index, const GLshort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[906];
+   mapi_func _func = ((const mapi_func *) _tbl)[922];
    ((void (APIENTRY *)(GLuint index, const GLshort *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI4ubvEXT)(GLuint index, const GLubyte *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[907];
+   mapi_func _func = ((const mapi_func *) _tbl)[923];
    ((void (APIENTRY *)(GLuint index, const GLubyte *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI4ubv)(GLuint index, const GLubyte *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[907];
+   mapi_func _func = ((const mapi_func *) _tbl)[923];
    ((void (APIENTRY *)(GLuint index, const GLubyte *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI4uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[908];
+   mapi_func _func = ((const mapi_func *) _tbl)[924];
    ((void (APIENTRY *)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)) _func)(index, x, y, z, w);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI4ui)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[908];
+   mapi_func _func = ((const mapi_func *) _tbl)[924];
    ((void (APIENTRY *)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)) _func)(index, x, y, z, w);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI4uivEXT)(GLuint index, const GLuint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[909];
+   mapi_func _func = ((const mapi_func *) _tbl)[925];
    ((void (APIENTRY *)(GLuint index, const GLuint *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI4uiv)(GLuint index, const GLuint *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[909];
+   mapi_func _func = ((const mapi_func *) _tbl)[925];
    ((void (APIENTRY *)(GLuint index, const GLuint *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI4usvEXT)(GLuint index, const GLushort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[910];
+   mapi_func _func = ((const mapi_func *) _tbl)[926];
    ((void (APIENTRY *)(GLuint index, const GLushort *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribI4usv)(GLuint index, const GLushort *v)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[910];
+   mapi_func _func = ((const mapi_func *) _tbl)[926];
    ((void (APIENTRY *)(GLuint index, const GLushort *v)) _func)(index, v);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribIPointerEXT)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[911];
+   mapi_func _func = ((const mapi_func *) _tbl)[927];
    ((void (APIENTRY *)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)) _func)(index, size, type, stride, pointer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(VertexAttribIPointer)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[911];
+   mapi_func _func = ((const mapi_func *) _tbl)[927];
    ((void (APIENTRY *)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)) _func)(index, size, type, stride, pointer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FramebufferTextureLayerEXT)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[912];
+   mapi_func _func = ((const mapi_func *) _tbl)[928];
    ((void (APIENTRY *)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)) _func)(target, attachment, texture, level, layer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(FramebufferTextureLayer)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[912];
+   mapi_func _func = ((const mapi_func *) _tbl)[928];
    ((void (APIENTRY *)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)) _func)(target, attachment, texture, level, layer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ColorMaskIndexedEXT)(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[913];
+   mapi_func _func = ((const mapi_func *) _tbl)[929];
    ((void (APIENTRY *)(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a)) _func)(buf, r, g, b, a);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ColorMaski)(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[913];
+   mapi_func _func = ((const mapi_func *) _tbl)[929];
    ((void (APIENTRY *)(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a)) _func)(buf, r, g, b, a);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(DisableIndexedEXT)(GLenum target, GLuint index)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[914];
+   mapi_func _func = ((const mapi_func *) _tbl)[930];
    ((void (APIENTRY *)(GLenum target, GLuint index)) _func)(target, index);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(Disablei)(GLenum target, GLuint index)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[914];
+   mapi_func _func = ((const mapi_func *) _tbl)[930];
    ((void (APIENTRY *)(GLenum target, GLuint index)) _func)(target, index);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(EnableIndexedEXT)(GLenum target, GLuint index)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[915];
+   mapi_func _func = ((const mapi_func *) _tbl)[931];
    ((void (APIENTRY *)(GLenum target, GLuint index)) _func)(target, index);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(Enablei)(GLenum target, GLuint index)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[915];
+   mapi_func _func = ((const mapi_func *) _tbl)[931];
    ((void (APIENTRY *)(GLenum target, GLuint index)) _func)(target, index);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetBooleanIndexedvEXT)(GLenum value, GLuint index, GLboolean *data)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[916];
+   mapi_func _func = ((const mapi_func *) _tbl)[932];
    ((void (APIENTRY *)(GLenum value, GLuint index, GLboolean *data)) _func)(value, index, data);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetBooleani_v)(GLenum value, GLuint index, GLboolean *data)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[916];
+   mapi_func _func = ((const mapi_func *) _tbl)[932];
    ((void (APIENTRY *)(GLenum value, GLuint index, GLboolean *data)) _func)(value, index, data);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetIntegerIndexedvEXT)(GLenum value, GLuint index, GLint *data)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[917];
+   mapi_func _func = ((const mapi_func *) _tbl)[933];
    ((void (APIENTRY *)(GLenum value, GLuint index, GLint *data)) _func)(value, index, data);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetIntegeri_v)(GLenum value, GLuint index, GLint *data)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[917];
+   mapi_func _func = ((const mapi_func *) _tbl)[933];
    ((void (APIENTRY *)(GLenum value, GLuint index, GLint *data)) _func)(value, index, data);
 }
 
 GLAPI GLboolean APIENTRY GLAPI_PREFIX(IsEnabledIndexedEXT)(GLenum target, GLuint index)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[918];
+   mapi_func _func = ((const mapi_func *) _tbl)[934];
    return ((GLboolean (APIENTRY *)(GLenum target, GLuint index)) _func)(target, index);
 }
 
 GLAPI GLboolean APIENTRY GLAPI_PREFIX(IsEnabledi)(GLenum target, GLuint index)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[918];
+   mapi_func _func = ((const mapi_func *) _tbl)[934];
    return ((GLboolean (APIENTRY *)(GLenum target, GLuint index)) _func)(target, index);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ClearColorIiEXT)(GLint r, GLint g, GLint b, GLint a)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[919];
+   mapi_func _func = ((const mapi_func *) _tbl)[935];
    ((void (APIENTRY *)(GLint r, GLint g, GLint b, GLint a)) _func)(r, g, b, a);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ClearColorIuiEXT)(GLuint r, GLuint g, GLuint b, GLuint a)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[920];
+   mapi_func _func = ((const mapi_func *) _tbl)[936];
    ((void (APIENTRY *)(GLuint r, GLuint g, GLuint b, GLuint a)) _func)(r, g, b, a);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetTexParameterIivEXT)(GLenum target, GLenum pname, GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[921];
+   mapi_func _func = ((const mapi_func *) _tbl)[937];
    ((void (APIENTRY *)(GLenum target, GLenum pname, GLint *params)) _func)(target, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetTexParameterIiv)(GLenum target, GLenum pname, GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[921];
+   mapi_func _func = ((const mapi_func *) _tbl)[937];
    ((void (APIENTRY *)(GLenum target, GLenum pname, GLint *params)) _func)(target, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetTexParameterIuivEXT)(GLenum target, GLenum pname, GLuint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[922];
+   mapi_func _func = ((const mapi_func *) _tbl)[938];
    ((void (APIENTRY *)(GLenum target, GLenum pname, GLuint *params)) _func)(target, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetTexParameterIuiv)(GLenum target, GLenum pname, GLuint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[922];
+   mapi_func _func = ((const mapi_func *) _tbl)[938];
    ((void (APIENTRY *)(GLenum target, GLenum pname, GLuint *params)) _func)(target, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(TexParameterIivEXT)(GLenum target, GLenum pname, const GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[923];
+   mapi_func _func = ((const mapi_func *) _tbl)[939];
    ((void (APIENTRY *)(GLenum target, GLenum pname, const GLint *params)) _func)(target, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(TexParameterIiv)(GLenum target, GLenum pname, const GLint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[923];
+   mapi_func _func = ((const mapi_func *) _tbl)[939];
    ((void (APIENTRY *)(GLenum target, GLenum pname, const GLint *params)) _func)(target, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(TexParameterIuivEXT)(GLenum target, GLenum pname, const GLuint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[924];
+   mapi_func _func = ((const mapi_func *) _tbl)[940];
    ((void (APIENTRY *)(GLenum target, GLenum pname, const GLuint *params)) _func)(target, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(TexParameterIuiv)(GLenum target, GLenum pname, const GLuint *params)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[924];
+   mapi_func _func = ((const mapi_func *) _tbl)[940];
    ((void (APIENTRY *)(GLenum target, GLenum pname, const GLuint *params)) _func)(target, pname, params);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BeginConditionalRenderNV)(GLuint query, GLenum mode)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[925];
+   mapi_func _func = ((const mapi_func *) _tbl)[941];
    ((void (APIENTRY *)(GLuint query, GLenum mode)) _func)(query, mode);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BeginConditionalRender)(GLuint query, GLenum mode)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[925];
+   mapi_func _func = ((const mapi_func *) _tbl)[941];
    ((void (APIENTRY *)(GLuint query, GLenum mode)) _func)(query, mode);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(EndConditionalRenderNV)(void)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[926];
+   mapi_func _func = ((const mapi_func *) _tbl)[942];
    ((void (APIENTRY *)(void)) _func)();
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(EndConditionalRender)(void)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[926];
+   mapi_func _func = ((const mapi_func *) _tbl)[942];
    ((void (APIENTRY *)(void)) _func)();
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BeginTransformFeedbackEXT)(GLenum mode)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[927];
+   mapi_func _func = ((const mapi_func *) _tbl)[943];
    ((void (APIENTRY *)(GLenum mode)) _func)(mode);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BeginTransformFeedback)(GLenum mode)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[927];
+   mapi_func _func = ((const mapi_func *) _tbl)[943];
    ((void (APIENTRY *)(GLenum mode)) _func)(mode);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BindBufferBaseEXT)(GLenum target, GLuint index, GLuint buffer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[928];
+   mapi_func _func = ((const mapi_func *) _tbl)[944];
    ((void (APIENTRY *)(GLenum target, GLuint index, GLuint buffer)) _func)(target, index, buffer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BindBufferBase)(GLenum target, GLuint index, GLuint buffer)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[928];
+   mapi_func _func = ((const mapi_func *) _tbl)[944];
    ((void (APIENTRY *)(GLenum target, GLuint index, GLuint buffer)) _func)(target, index, buffer);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BindBufferOffsetEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[929];
+   mapi_func _func = ((const mapi_func *) _tbl)[945];
    ((void (APIENTRY *)(GLenum target, GLuint index, GLuint buffer, GLintptr offset)) _func)(target, index, buffer, offset);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BindBufferRangeEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[930];
+   mapi_func _func = ((const mapi_func *) _tbl)[946];
    ((void (APIENTRY *)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)) _func)(target, index, buffer, offset, size);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(BindBufferRange)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[930];
+   mapi_func _func = ((const mapi_func *) _tbl)[946];
    ((void (APIENTRY *)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)) _func)(target, index, buffer, offset, size);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(EndTransformFeedbackEXT)(void)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[931];
+   mapi_func _func = ((const mapi_func *) _tbl)[947];
    ((void (APIENTRY *)(void)) _func)();
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(EndTransformFeedback)(void)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[931];
+   mapi_func _func = ((const mapi_func *) _tbl)[947];
    ((void (APIENTRY *)(void)) _func)();
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetTransformFeedbackVaryingEXT)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[932];
+   mapi_func _func = ((const mapi_func *) _tbl)[948];
    ((void (APIENTRY *)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name)) _func)(program, index, bufSize, length, size, type, name);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetTransformFeedbackVarying)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[932];
+   mapi_func _func = ((const mapi_func *) _tbl)[948];
    ((void (APIENTRY *)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name)) _func)(program, index, bufSize, length, size, type, name);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(TransformFeedbackVaryingsEXT)(GLuint program, GLsizei count, const char **varyings, GLenum bufferMode)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[933];
+   mapi_func _func = ((const mapi_func *) _tbl)[949];
    ((void (APIENTRY *)(GLuint program, GLsizei count, const char **varyings, GLenum bufferMode)) _func)(program, count, varyings, bufferMode);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(TransformFeedbackVaryings)(GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[933];
+   mapi_func _func = ((const mapi_func *) _tbl)[949];
    ((void (APIENTRY *)(GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode)) _func)(program, count, varyings, bufferMode);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ProvokingVertexEXT)(GLenum mode)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[934];
+   mapi_func _func = ((const mapi_func *) _tbl)[950];
    ((void (APIENTRY *)(GLenum mode)) _func)(mode);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ProvokingVertex)(GLenum mode)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[934];
+   mapi_func _func = ((const mapi_func *) _tbl)[950];
    ((void (APIENTRY *)(GLenum mode)) _func)(mode);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(GetObjectParameterivAPPLE)(GLenum objectType, GLuint name, GLenum pname, GLint *value)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[937];
+   mapi_func _func = ((const mapi_func *) _tbl)[953];
    ((void (APIENTRY *)(GLenum objectType, GLuint name, GLenum pname, GLint *value)) _func)(objectType, name, pname, value);
 }
 
 GLAPI GLenum APIENTRY GLAPI_PREFIX(ObjectPurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[938];
+   mapi_func _func = ((const mapi_func *) _tbl)[954];
    return ((GLenum (APIENTRY *)(GLenum objectType, GLuint name, GLenum option)) _func)(objectType, name, option);
 }
 
 GLAPI GLenum APIENTRY GLAPI_PREFIX(ObjectUnpurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[939];
+   mapi_func _func = ((const mapi_func *) _tbl)[955];
    return ((GLenum (APIENTRY *)(GLenum objectType, GLuint name, GLenum option)) _func)(objectType, name, option);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(ActiveProgramEXT)(GLuint program)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[940];
+   mapi_func _func = ((const mapi_func *) _tbl)[956];
    ((void (APIENTRY *)(GLuint program)) _func)(program);
 }
 
 GLAPI GLuint APIENTRY GLAPI_PREFIX(CreateShaderProgramEXT)(GLenum type, const GLchar *string)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[941];
+   mapi_func _func = ((const mapi_func *) _tbl)[957];
    return ((GLuint (APIENTRY *)(GLenum type, const GLchar *string)) _func)(type, string);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(UseShaderProgramEXT)(GLenum type, GLuint program)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[942];
+   mapi_func _func = ((const mapi_func *) _tbl)[958];
    ((void (APIENTRY *)(GLenum type, GLuint program)) _func)(type, program);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(TextureBarrierNV)(void)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[943];
+   mapi_func _func = ((const mapi_func *) _tbl)[959];
    ((void (APIENTRY *)(void)) _func)();
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(EGLImageTargetRenderbufferStorageOES)(GLenum target, GLvoid *writeOffset)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[949];
+   mapi_func _func = ((const mapi_func *) _tbl)[965];
    ((void (APIENTRY *)(GLenum target, GLvoid *writeOffset)) _func)(target, writeOffset);
 }
 
 GLAPI void APIENTRY GLAPI_PREFIX(EGLImageTargetTexture2DOES)(GLenum target, GLvoid *writeOffset)
 {
    const struct mapi_table *_tbl = entry_current_get();
-   mapi_func _func = ((const mapi_func *) _tbl)[950];
+   mapi_func _func = ((const mapi_func *) _tbl)[966];
    ((void (APIENTRY *)(GLenum target, GLvoid *writeOffset)) _func)(target, writeOffset);
 }
 
@@ -11806,9 +11934,12 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DrawBuffersARB))"\n"
 ".globl "GLAPI_PREFIX_STR(DrawBuffersATI)"\n"
 ".set "GLAPI_PREFIX_STR(DrawBuffersATI)", "GLAPI_PREFIX_STR(DrawBuffersARB)"\n"
 
-STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DrawArraysInstancedARB))"\n"
+STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ClampColorARB))"\n"
 "\t"STUB_ASM_CODE("572")"\n"
 
+STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DrawArraysInstancedARB))"\n"
+"\t"STUB_ASM_CODE("573")"\n"
+
 ".globl "GLAPI_PREFIX_STR(DrawArraysInstanced)"\n"
 ".set "GLAPI_PREFIX_STR(DrawArraysInstanced)", "GLAPI_PREFIX_STR(DrawArraysInstancedARB)"\n"
 
@@ -11816,7 +11947,7 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DrawArraysInstancedARB))"\n"
 ".set "GLAPI_PREFIX_STR(DrawArraysInstancedEXT)", "GLAPI_PREFIX_STR(DrawArraysInstancedARB)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DrawElementsInstancedARB))"\n"
-"\t"STUB_ASM_CODE("573")"\n"
+"\t"STUB_ASM_CODE("574")"\n"
 
 ".globl "GLAPI_PREFIX_STR(DrawElementsInstanced)"\n"
 ".set "GLAPI_PREFIX_STR(DrawElementsInstanced)", "GLAPI_PREFIX_STR(DrawElementsInstancedARB)"\n"
@@ -11825,139 +11956,184 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DrawElementsInstancedARB))"\n"
 ".set "GLAPI_PREFIX_STR(DrawElementsInstancedEXT)", "GLAPI_PREFIX_STR(DrawElementsInstancedARB)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(RenderbufferStorageMultisample))"\n"
-"\t"STUB_ASM_CODE("574")"\n"
+"\t"STUB_ASM_CODE("575")"\n"
 
 ".globl "GLAPI_PREFIX_STR(RenderbufferStorageMultisampleEXT)"\n"
 ".set "GLAPI_PREFIX_STR(RenderbufferStorageMultisampleEXT)", "GLAPI_PREFIX_STR(RenderbufferStorageMultisample)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(FramebufferTextureARB))"\n"
-"\t"STUB_ASM_CODE("575")"\n"
+"\t"STUB_ASM_CODE("576")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(FramebufferTextureFaceARB))"\n"
-"\t"STUB_ASM_CODE("576")"\n"
+"\t"STUB_ASM_CODE("577")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ProgramParameteriARB))"\n"
-"\t"STUB_ASM_CODE("577")"\n"
+"\t"STUB_ASM_CODE("578")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribDivisorARB))"\n"
-"\t"STUB_ASM_CODE("578")"\n"
+"\t"STUB_ASM_CODE("579")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(FlushMappedBufferRange))"\n"
-"\t"STUB_ASM_CODE("579")"\n"
+"\t"STUB_ASM_CODE("580")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(MapBufferRange))"\n"
-"\t"STUB_ASM_CODE("580")"\n"
+"\t"STUB_ASM_CODE("581")"\n"
+
+STUB_ASM_ENTRY(GLAPI_PREFIX_STR(TexBufferARB))"\n"
+"\t"STUB_ASM_CODE("582")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BindVertexArray))"\n"
-"\t"STUB_ASM_CODE("581")"\n"
+"\t"STUB_ASM_CODE("583")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GenVertexArrays))"\n"
-"\t"STUB_ASM_CODE("582")"\n"
+"\t"STUB_ASM_CODE("584")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(CopyBufferSubData))"\n"
-"\t"STUB_ASM_CODE("583")"\n"
+"\t"STUB_ASM_CODE("585")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ClientWaitSync))"\n"
-"\t"STUB_ASM_CODE("584")"\n"
+"\t"STUB_ASM_CODE("586")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DeleteSync))"\n"
-"\t"STUB_ASM_CODE("585")"\n"
+"\t"STUB_ASM_CODE("587")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(FenceSync))"\n"
-"\t"STUB_ASM_CODE("586")"\n"
+"\t"STUB_ASM_CODE("588")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetInteger64v))"\n"
-"\t"STUB_ASM_CODE("587")"\n"
+"\t"STUB_ASM_CODE("589")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetSynciv))"\n"
-"\t"STUB_ASM_CODE("588")"\n"
+"\t"STUB_ASM_CODE("590")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(IsSync))"\n"
-"\t"STUB_ASM_CODE("589")"\n"
+"\t"STUB_ASM_CODE("591")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WaitSync))"\n"
-"\t"STUB_ASM_CODE("590")"\n"
+"\t"STUB_ASM_CODE("592")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DrawElementsBaseVertex))"\n"
-"\t"STUB_ASM_CODE("591")"\n"
+"\t"STUB_ASM_CODE("593")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DrawRangeElementsBaseVertex))"\n"
-"\t"STUB_ASM_CODE("592")"\n"
+"\t"STUB_ASM_CODE("594")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(MultiDrawElementsBaseVertex))"\n"
-"\t"STUB_ASM_CODE("593")"\n"
+"\t"STUB_ASM_CODE("595")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BlendEquationSeparateiARB))"\n"
-"\t"STUB_ASM_CODE("594")"\n"
+"\t"STUB_ASM_CODE("596")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BlendEquationiARB))"\n"
-"\t"STUB_ASM_CODE("595")"\n"
+"\t"STUB_ASM_CODE("597")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BlendFuncSeparateiARB))"\n"
-"\t"STUB_ASM_CODE("596")"\n"
+"\t"STUB_ASM_CODE("598")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BlendFunciARB))"\n"
-"\t"STUB_ASM_CODE("597")"\n"
+"\t"STUB_ASM_CODE("599")"\n"
+
+STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BindSampler))"\n"
+"\t"STUB_ASM_CODE("600")"\n"
+
+STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DeleteSamplers))"\n"
+"\t"STUB_ASM_CODE("601")"\n"
+
+STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GenSamplers))"\n"
+"\t"STUB_ASM_CODE("602")"\n"
+
+STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetSamplerParameterIiv))"\n"
+"\t"STUB_ASM_CODE("603")"\n"
+
+STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetSamplerParameterIuiv))"\n"
+"\t"STUB_ASM_CODE("604")"\n"
+
+STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetSamplerParameterfv))"\n"
+"\t"STUB_ASM_CODE("605")"\n"
+
+STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetSamplerParameteriv))"\n"
+"\t"STUB_ASM_CODE("606")"\n"
+
+STUB_ASM_ENTRY(GLAPI_PREFIX_STR(IsSampler))"\n"
+"\t"STUB_ASM_CODE("607")"\n"
+
+STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SamplerParameterIiv))"\n"
+"\t"STUB_ASM_CODE("608")"\n"
+
+STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SamplerParameterIuiv))"\n"
+"\t"STUB_ASM_CODE("609")"\n"
+
+STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SamplerParameterf))"\n"
+"\t"STUB_ASM_CODE("610")"\n"
+
+STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SamplerParameterfv))"\n"
+"\t"STUB_ASM_CODE("611")"\n"
+
+STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SamplerParameteri))"\n"
+"\t"STUB_ASM_CODE("612")"\n"
+
+STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SamplerParameteriv))"\n"
+"\t"STUB_ASM_CODE("613")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BindTransformFeedback))"\n"
-"\t"STUB_ASM_CODE("598")"\n"
+"\t"STUB_ASM_CODE("614")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DeleteTransformFeedbacks))"\n"
-"\t"STUB_ASM_CODE("599")"\n"
+"\t"STUB_ASM_CODE("615")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DrawTransformFeedback))"\n"
-"\t"STUB_ASM_CODE("600")"\n"
+"\t"STUB_ASM_CODE("616")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GenTransformFeedbacks))"\n"
-"\t"STUB_ASM_CODE("601")"\n"
+"\t"STUB_ASM_CODE("617")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(IsTransformFeedback))"\n"
-"\t"STUB_ASM_CODE("602")"\n"
+"\t"STUB_ASM_CODE("618")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(PauseTransformFeedback))"\n"
-"\t"STUB_ASM_CODE("603")"\n"
+"\t"STUB_ASM_CODE("619")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ResumeTransformFeedback))"\n"
-"\t"STUB_ASM_CODE("604")"\n"
+"\t"STUB_ASM_CODE("620")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ClearDepthf))"\n"
-"\t"STUB_ASM_CODE("605")"\n"
+"\t"STUB_ASM_CODE("621")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DepthRangef))"\n"
-"\t"STUB_ASM_CODE("606")"\n"
+"\t"STUB_ASM_CODE("622")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetShaderPrecisionFormat))"\n"
-"\t"STUB_ASM_CODE("607")"\n"
+"\t"STUB_ASM_CODE("623")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ReleaseShaderCompiler))"\n"
-"\t"STUB_ASM_CODE("608")"\n"
+"\t"STUB_ASM_CODE("624")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ShaderBinary))"\n"
-"\t"STUB_ASM_CODE("609")"\n"
+"\t"STUB_ASM_CODE("625")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(PolygonOffsetEXT))"\n"
-"\t"STUB_ASM_CODE("613")"\n"
+"\t"STUB_ASM_CODE("629")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ColorPointerEXT))"\n"
-"\t"STUB_ASM_CODE("632")"\n"
+"\t"STUB_ASM_CODE("648")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(EdgeFlagPointerEXT))"\n"
-"\t"STUB_ASM_CODE("633")"\n"
+"\t"STUB_ASM_CODE("649")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(IndexPointerEXT))"\n"
-"\t"STUB_ASM_CODE("634")"\n"
+"\t"STUB_ASM_CODE("650")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(NormalPointerEXT))"\n"
-"\t"STUB_ASM_CODE("635")"\n"
+"\t"STUB_ASM_CODE("651")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(TexCoordPointerEXT))"\n"
-"\t"STUB_ASM_CODE("636")"\n"
+"\t"STUB_ASM_CODE("652")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexPointerEXT))"\n"
-"\t"STUB_ASM_CODE("637")"\n"
+"\t"STUB_ASM_CODE("653")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(PointParameterfEXT))"\n"
-"\t"STUB_ASM_CODE("638")"\n"
+"\t"STUB_ASM_CODE("654")"\n"
 
 ".globl "GLAPI_PREFIX_STR(PointParameterf)"\n"
 ".set "GLAPI_PREFIX_STR(PointParameterf)", "GLAPI_PREFIX_STR(PointParameterfEXT)"\n"
@@ -11966,7 +12142,7 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(PointParameterfEXT))"\n"
 ".set "GLAPI_PREFIX_STR(PointParameterfARB)", "GLAPI_PREFIX_STR(PointParameterfEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(PointParameterfvEXT))"\n"
-"\t"STUB_ASM_CODE("639")"\n"
+"\t"STUB_ASM_CODE("655")"\n"
 
 ".globl "GLAPI_PREFIX_STR(PointParameterfv)"\n"
 ".set "GLAPI_PREFIX_STR(PointParameterfv)", "GLAPI_PREFIX_STR(PointParameterfvEXT)"\n"
@@ -11975,211 +12151,211 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(PointParameterfvEXT))"\n"
 ".set "GLAPI_PREFIX_STR(PointParameterfvARB)", "GLAPI_PREFIX_STR(PointParameterfvEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(LockArraysEXT))"\n"
-"\t"STUB_ASM_CODE("640")"\n"
+"\t"STUB_ASM_CODE("656")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(UnlockArraysEXT))"\n"
-"\t"STUB_ASM_CODE("641")"\n"
+"\t"STUB_ASM_CODE("657")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SecondaryColor3bEXT))"\n"
-"\t"STUB_ASM_CODE("642")"\n"
+"\t"STUB_ASM_CODE("658")"\n"
 
 ".globl "GLAPI_PREFIX_STR(SecondaryColor3b)"\n"
 ".set "GLAPI_PREFIX_STR(SecondaryColor3b)", "GLAPI_PREFIX_STR(SecondaryColor3bEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SecondaryColor3bvEXT))"\n"
-"\t"STUB_ASM_CODE("643")"\n"
+"\t"STUB_ASM_CODE("659")"\n"
 
 ".globl "GLAPI_PREFIX_STR(SecondaryColor3bv)"\n"
 ".set "GLAPI_PREFIX_STR(SecondaryColor3bv)", "GLAPI_PREFIX_STR(SecondaryColor3bvEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SecondaryColor3dEXT))"\n"
-"\t"STUB_ASM_CODE("644")"\n"
+"\t"STUB_ASM_CODE("660")"\n"
 
 ".globl "GLAPI_PREFIX_STR(SecondaryColor3d)"\n"
 ".set "GLAPI_PREFIX_STR(SecondaryColor3d)", "GLAPI_PREFIX_STR(SecondaryColor3dEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SecondaryColor3dvEXT))"\n"
-"\t"STUB_ASM_CODE("645")"\n"
+"\t"STUB_ASM_CODE("661")"\n"
 
 ".globl "GLAPI_PREFIX_STR(SecondaryColor3dv)"\n"
 ".set "GLAPI_PREFIX_STR(SecondaryColor3dv)", "GLAPI_PREFIX_STR(SecondaryColor3dvEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SecondaryColor3fEXT))"\n"
-"\t"STUB_ASM_CODE("646")"\n"
+"\t"STUB_ASM_CODE("662")"\n"
 
 ".globl "GLAPI_PREFIX_STR(SecondaryColor3f)"\n"
 ".set "GLAPI_PREFIX_STR(SecondaryColor3f)", "GLAPI_PREFIX_STR(SecondaryColor3fEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SecondaryColor3fvEXT))"\n"
-"\t"STUB_ASM_CODE("647")"\n"
+"\t"STUB_ASM_CODE("663")"\n"
 
 ".globl "GLAPI_PREFIX_STR(SecondaryColor3fv)"\n"
 ".set "GLAPI_PREFIX_STR(SecondaryColor3fv)", "GLAPI_PREFIX_STR(SecondaryColor3fvEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SecondaryColor3iEXT))"\n"
-"\t"STUB_ASM_CODE("648")"\n"
+"\t"STUB_ASM_CODE("664")"\n"
 
 ".globl "GLAPI_PREFIX_STR(SecondaryColor3i)"\n"
 ".set "GLAPI_PREFIX_STR(SecondaryColor3i)", "GLAPI_PREFIX_STR(SecondaryColor3iEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SecondaryColor3ivEXT))"\n"
-"\t"STUB_ASM_CODE("649")"\n"
+"\t"STUB_ASM_CODE("665")"\n"
 
 ".globl "GLAPI_PREFIX_STR(SecondaryColor3iv)"\n"
 ".set "GLAPI_PREFIX_STR(SecondaryColor3iv)", "GLAPI_PREFIX_STR(SecondaryColor3ivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SecondaryColor3sEXT))"\n"
-"\t"STUB_ASM_CODE("650")"\n"
+"\t"STUB_ASM_CODE("666")"\n"
 
 ".globl "GLAPI_PREFIX_STR(SecondaryColor3s)"\n"
 ".set "GLAPI_PREFIX_STR(SecondaryColor3s)", "GLAPI_PREFIX_STR(SecondaryColor3sEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SecondaryColor3svEXT))"\n"
-"\t"STUB_ASM_CODE("651")"\n"
+"\t"STUB_ASM_CODE("667")"\n"
 
 ".globl "GLAPI_PREFIX_STR(SecondaryColor3sv)"\n"
 ".set "GLAPI_PREFIX_STR(SecondaryColor3sv)", "GLAPI_PREFIX_STR(SecondaryColor3svEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SecondaryColor3ubEXT))"\n"
-"\t"STUB_ASM_CODE("652")"\n"
+"\t"STUB_ASM_CODE("668")"\n"
 
 ".globl "GLAPI_PREFIX_STR(SecondaryColor3ub)"\n"
 ".set "GLAPI_PREFIX_STR(SecondaryColor3ub)", "GLAPI_PREFIX_STR(SecondaryColor3ubEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SecondaryColor3ubvEXT))"\n"
-"\t"STUB_ASM_CODE("653")"\n"
+"\t"STUB_ASM_CODE("669")"\n"
 
 ".globl "GLAPI_PREFIX_STR(SecondaryColor3ubv)"\n"
 ".set "GLAPI_PREFIX_STR(SecondaryColor3ubv)", "GLAPI_PREFIX_STR(SecondaryColor3ubvEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SecondaryColor3uiEXT))"\n"
-"\t"STUB_ASM_CODE("654")"\n"
+"\t"STUB_ASM_CODE("670")"\n"
 
 ".globl "GLAPI_PREFIX_STR(SecondaryColor3ui)"\n"
 ".set "GLAPI_PREFIX_STR(SecondaryColor3ui)", "GLAPI_PREFIX_STR(SecondaryColor3uiEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SecondaryColor3uivEXT))"\n"
-"\t"STUB_ASM_CODE("655")"\n"
+"\t"STUB_ASM_CODE("671")"\n"
 
 ".globl "GLAPI_PREFIX_STR(SecondaryColor3uiv)"\n"
 ".set "GLAPI_PREFIX_STR(SecondaryColor3uiv)", "GLAPI_PREFIX_STR(SecondaryColor3uivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SecondaryColor3usEXT))"\n"
-"\t"STUB_ASM_CODE("656")"\n"
+"\t"STUB_ASM_CODE("672")"\n"
 
 ".globl "GLAPI_PREFIX_STR(SecondaryColor3us)"\n"
 ".set "GLAPI_PREFIX_STR(SecondaryColor3us)", "GLAPI_PREFIX_STR(SecondaryColor3usEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SecondaryColor3usvEXT))"\n"
-"\t"STUB_ASM_CODE("657")"\n"
+"\t"STUB_ASM_CODE("673")"\n"
 
 ".globl "GLAPI_PREFIX_STR(SecondaryColor3usv)"\n"
 ".set "GLAPI_PREFIX_STR(SecondaryColor3usv)", "GLAPI_PREFIX_STR(SecondaryColor3usvEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SecondaryColorPointerEXT))"\n"
-"\t"STUB_ASM_CODE("658")"\n"
+"\t"STUB_ASM_CODE("674")"\n"
 
 ".globl "GLAPI_PREFIX_STR(SecondaryColorPointer)"\n"
 ".set "GLAPI_PREFIX_STR(SecondaryColorPointer)", "GLAPI_PREFIX_STR(SecondaryColorPointerEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(MultiDrawArraysEXT))"\n"
-"\t"STUB_ASM_CODE("659")"\n"
+"\t"STUB_ASM_CODE("675")"\n"
 
 ".globl "GLAPI_PREFIX_STR(MultiDrawArrays)"\n"
 ".set "GLAPI_PREFIX_STR(MultiDrawArrays)", "GLAPI_PREFIX_STR(MultiDrawArraysEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(MultiDrawElementsEXT))"\n"
-"\t"STUB_ASM_CODE("660")"\n"
+"\t"STUB_ASM_CODE("676")"\n"
 
 ".globl "GLAPI_PREFIX_STR(MultiDrawElements)"\n"
 ".set "GLAPI_PREFIX_STR(MultiDrawElements)", "GLAPI_PREFIX_STR(MultiDrawElementsEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(FogCoordPointerEXT))"\n"
-"\t"STUB_ASM_CODE("661")"\n"
+"\t"STUB_ASM_CODE("677")"\n"
 
 ".globl "GLAPI_PREFIX_STR(FogCoordPointer)"\n"
 ".set "GLAPI_PREFIX_STR(FogCoordPointer)", "GLAPI_PREFIX_STR(FogCoordPointerEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(FogCoorddEXT))"\n"
-"\t"STUB_ASM_CODE("662")"\n"
+"\t"STUB_ASM_CODE("678")"\n"
 
 ".globl "GLAPI_PREFIX_STR(FogCoordd)"\n"
 ".set "GLAPI_PREFIX_STR(FogCoordd)", "GLAPI_PREFIX_STR(FogCoorddEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(FogCoorddvEXT))"\n"
-"\t"STUB_ASM_CODE("663")"\n"
+"\t"STUB_ASM_CODE("679")"\n"
 
 ".globl "GLAPI_PREFIX_STR(FogCoorddv)"\n"
 ".set "GLAPI_PREFIX_STR(FogCoorddv)", "GLAPI_PREFIX_STR(FogCoorddvEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(FogCoordfEXT))"\n"
-"\t"STUB_ASM_CODE("664")"\n"
+"\t"STUB_ASM_CODE("680")"\n"
 
 ".globl "GLAPI_PREFIX_STR(FogCoordf)"\n"
 ".set "GLAPI_PREFIX_STR(FogCoordf)", "GLAPI_PREFIX_STR(FogCoordfEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(FogCoordfvEXT))"\n"
-"\t"STUB_ASM_CODE("665")"\n"
+"\t"STUB_ASM_CODE("681")"\n"
 
 ".globl "GLAPI_PREFIX_STR(FogCoordfv)"\n"
 ".set "GLAPI_PREFIX_STR(FogCoordfv)", "GLAPI_PREFIX_STR(FogCoordfvEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BlendFuncSeparateEXT))"\n"
-"\t"STUB_ASM_CODE("667")"\n"
+"\t"STUB_ASM_CODE("683")"\n"
 
 ".globl "GLAPI_PREFIX_STR(BlendFuncSeparate)"\n"
 ".set "GLAPI_PREFIX_STR(BlendFuncSeparate)", "GLAPI_PREFIX_STR(BlendFuncSeparateEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(FlushVertexArrayRangeNV))"\n"
-"\t"STUB_ASM_CODE("668")"\n"
+"\t"STUB_ASM_CODE("684")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexArrayRangeNV))"\n"
-"\t"STUB_ASM_CODE("669")"\n"
+"\t"STUB_ASM_CODE("685")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(CombinerInputNV))"\n"
-"\t"STUB_ASM_CODE("670")"\n"
+"\t"STUB_ASM_CODE("686")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(CombinerOutputNV))"\n"
-"\t"STUB_ASM_CODE("671")"\n"
+"\t"STUB_ASM_CODE("687")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(CombinerParameterfNV))"\n"
-"\t"STUB_ASM_CODE("672")"\n"
+"\t"STUB_ASM_CODE("688")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(CombinerParameterfvNV))"\n"
-"\t"STUB_ASM_CODE("673")"\n"
+"\t"STUB_ASM_CODE("689")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(CombinerParameteriNV))"\n"
-"\t"STUB_ASM_CODE("674")"\n"
+"\t"STUB_ASM_CODE("690")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(CombinerParameterivNV))"\n"
-"\t"STUB_ASM_CODE("675")"\n"
+"\t"STUB_ASM_CODE("691")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(FinalCombinerInputNV))"\n"
-"\t"STUB_ASM_CODE("676")"\n"
+"\t"STUB_ASM_CODE("692")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetCombinerInputParameterfvNV))"\n"
-"\t"STUB_ASM_CODE("677")"\n"
+"\t"STUB_ASM_CODE("693")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetCombinerInputParameterivNV))"\n"
-"\t"STUB_ASM_CODE("678")"\n"
+"\t"STUB_ASM_CODE("694")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetCombinerOutputParameterfvNV))"\n"
-"\t"STUB_ASM_CODE("679")"\n"
+"\t"STUB_ASM_CODE("695")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetCombinerOutputParameterivNV))"\n"
-"\t"STUB_ASM_CODE("680")"\n"
+"\t"STUB_ASM_CODE("696")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetFinalCombinerInputParameterfvNV))"\n"
-"\t"STUB_ASM_CODE("681")"\n"
+"\t"STUB_ASM_CODE("697")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetFinalCombinerInputParameterivNV))"\n"
-"\t"STUB_ASM_CODE("682")"\n"
+"\t"STUB_ASM_CODE("698")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ResizeBuffersMESA))"\n"
-"\t"STUB_ASM_CODE("683")"\n"
+"\t"STUB_ASM_CODE("699")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos2dMESA))"\n"
-"\t"STUB_ASM_CODE("684")"\n"
+"\t"STUB_ASM_CODE("700")"\n"
 
 ".globl "GLAPI_PREFIX_STR(WindowPos2d)"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos2d)", "GLAPI_PREFIX_STR(WindowPos2dMESA)"\n"
@@ -12188,7 +12364,7 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos2dMESA))"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos2dARB)", "GLAPI_PREFIX_STR(WindowPos2dMESA)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos2dvMESA))"\n"
-"\t"STUB_ASM_CODE("685")"\n"
+"\t"STUB_ASM_CODE("701")"\n"
 
 ".globl "GLAPI_PREFIX_STR(WindowPos2dv)"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos2dv)", "GLAPI_PREFIX_STR(WindowPos2dvMESA)"\n"
@@ -12197,7 +12373,7 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos2dvMESA))"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos2dvARB)", "GLAPI_PREFIX_STR(WindowPos2dvMESA)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos2fMESA))"\n"
-"\t"STUB_ASM_CODE("686")"\n"
+"\t"STUB_ASM_CODE("702")"\n"
 
 ".globl "GLAPI_PREFIX_STR(WindowPos2f)"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos2f)", "GLAPI_PREFIX_STR(WindowPos2fMESA)"\n"
@@ -12206,7 +12382,7 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos2fMESA))"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos2fARB)", "GLAPI_PREFIX_STR(WindowPos2fMESA)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos2fvMESA))"\n"
-"\t"STUB_ASM_CODE("687")"\n"
+"\t"STUB_ASM_CODE("703")"\n"
 
 ".globl "GLAPI_PREFIX_STR(WindowPos2fv)"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos2fv)", "GLAPI_PREFIX_STR(WindowPos2fvMESA)"\n"
@@ -12215,7 +12391,7 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos2fvMESA))"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos2fvARB)", "GLAPI_PREFIX_STR(WindowPos2fvMESA)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos2iMESA))"\n"
-"\t"STUB_ASM_CODE("688")"\n"
+"\t"STUB_ASM_CODE("704")"\n"
 
 ".globl "GLAPI_PREFIX_STR(WindowPos2i)"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos2i)", "GLAPI_PREFIX_STR(WindowPos2iMESA)"\n"
@@ -12224,7 +12400,7 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos2iMESA))"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos2iARB)", "GLAPI_PREFIX_STR(WindowPos2iMESA)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos2ivMESA))"\n"
-"\t"STUB_ASM_CODE("689")"\n"
+"\t"STUB_ASM_CODE("705")"\n"
 
 ".globl "GLAPI_PREFIX_STR(WindowPos2iv)"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos2iv)", "GLAPI_PREFIX_STR(WindowPos2ivMESA)"\n"
@@ -12233,7 +12409,7 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos2ivMESA))"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos2ivARB)", "GLAPI_PREFIX_STR(WindowPos2ivMESA)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos2sMESA))"\n"
-"\t"STUB_ASM_CODE("690")"\n"
+"\t"STUB_ASM_CODE("706")"\n"
 
 ".globl "GLAPI_PREFIX_STR(WindowPos2s)"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos2s)", "GLAPI_PREFIX_STR(WindowPos2sMESA)"\n"
@@ -12242,7 +12418,7 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos2sMESA))"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos2sARB)", "GLAPI_PREFIX_STR(WindowPos2sMESA)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos2svMESA))"\n"
-"\t"STUB_ASM_CODE("691")"\n"
+"\t"STUB_ASM_CODE("707")"\n"
 
 ".globl "GLAPI_PREFIX_STR(WindowPos2sv)"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos2sv)", "GLAPI_PREFIX_STR(WindowPos2svMESA)"\n"
@@ -12251,7 +12427,7 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos2svMESA))"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos2svARB)", "GLAPI_PREFIX_STR(WindowPos2svMESA)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos3dMESA))"\n"
-"\t"STUB_ASM_CODE("692")"\n"
+"\t"STUB_ASM_CODE("708")"\n"
 
 ".globl "GLAPI_PREFIX_STR(WindowPos3d)"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos3d)", "GLAPI_PREFIX_STR(WindowPos3dMESA)"\n"
@@ -12260,7 +12436,7 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos3dMESA))"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos3dARB)", "GLAPI_PREFIX_STR(WindowPos3dMESA)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos3dvMESA))"\n"
-"\t"STUB_ASM_CODE("693")"\n"
+"\t"STUB_ASM_CODE("709")"\n"
 
 ".globl "GLAPI_PREFIX_STR(WindowPos3dv)"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos3dv)", "GLAPI_PREFIX_STR(WindowPos3dvMESA)"\n"
@@ -12269,7 +12445,7 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos3dvMESA))"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos3dvARB)", "GLAPI_PREFIX_STR(WindowPos3dvMESA)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos3fMESA))"\n"
-"\t"STUB_ASM_CODE("694")"\n"
+"\t"STUB_ASM_CODE("710")"\n"
 
 ".globl "GLAPI_PREFIX_STR(WindowPos3f)"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos3f)", "GLAPI_PREFIX_STR(WindowPos3fMESA)"\n"
@@ -12278,7 +12454,7 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos3fMESA))"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos3fARB)", "GLAPI_PREFIX_STR(WindowPos3fMESA)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos3fvMESA))"\n"
-"\t"STUB_ASM_CODE("695")"\n"
+"\t"STUB_ASM_CODE("711")"\n"
 
 ".globl "GLAPI_PREFIX_STR(WindowPos3fv)"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos3fv)", "GLAPI_PREFIX_STR(WindowPos3fvMESA)"\n"
@@ -12287,7 +12463,7 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos3fvMESA))"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos3fvARB)", "GLAPI_PREFIX_STR(WindowPos3fvMESA)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos3iMESA))"\n"
-"\t"STUB_ASM_CODE("696")"\n"
+"\t"STUB_ASM_CODE("712")"\n"
 
 ".globl "GLAPI_PREFIX_STR(WindowPos3i)"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos3i)", "GLAPI_PREFIX_STR(WindowPos3iMESA)"\n"
@@ -12296,7 +12472,7 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos3iMESA))"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos3iARB)", "GLAPI_PREFIX_STR(WindowPos3iMESA)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos3ivMESA))"\n"
-"\t"STUB_ASM_CODE("697")"\n"
+"\t"STUB_ASM_CODE("713")"\n"
 
 ".globl "GLAPI_PREFIX_STR(WindowPos3iv)"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos3iv)", "GLAPI_PREFIX_STR(WindowPos3ivMESA)"\n"
@@ -12305,7 +12481,7 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos3ivMESA))"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos3ivARB)", "GLAPI_PREFIX_STR(WindowPos3ivMESA)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos3sMESA))"\n"
-"\t"STUB_ASM_CODE("698")"\n"
+"\t"STUB_ASM_CODE("714")"\n"
 
 ".globl "GLAPI_PREFIX_STR(WindowPos3s)"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos3s)", "GLAPI_PREFIX_STR(WindowPos3sMESA)"\n"
@@ -12314,7 +12490,7 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos3sMESA))"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos3sARB)", "GLAPI_PREFIX_STR(WindowPos3sMESA)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos3svMESA))"\n"
-"\t"STUB_ASM_CODE("699")"\n"
+"\t"STUB_ASM_CODE("715")"\n"
 
 ".globl "GLAPI_PREFIX_STR(WindowPos3sv)"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos3sv)", "GLAPI_PREFIX_STR(WindowPos3svMESA)"\n"
@@ -12323,70 +12499,70 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos3svMESA))"\n"
 ".set "GLAPI_PREFIX_STR(WindowPos3svARB)", "GLAPI_PREFIX_STR(WindowPos3svMESA)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos4dMESA))"\n"
-"\t"STUB_ASM_CODE("700")"\n"
+"\t"STUB_ASM_CODE("716")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos4dvMESA))"\n"
-"\t"STUB_ASM_CODE("701")"\n"
+"\t"STUB_ASM_CODE("717")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos4fMESA))"\n"
-"\t"STUB_ASM_CODE("702")"\n"
+"\t"STUB_ASM_CODE("718")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos4fvMESA))"\n"
-"\t"STUB_ASM_CODE("703")"\n"
+"\t"STUB_ASM_CODE("719")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos4iMESA))"\n"
-"\t"STUB_ASM_CODE("704")"\n"
+"\t"STUB_ASM_CODE("720")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos4ivMESA))"\n"
-"\t"STUB_ASM_CODE("705")"\n"
+"\t"STUB_ASM_CODE("721")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos4sMESA))"\n"
-"\t"STUB_ASM_CODE("706")"\n"
+"\t"STUB_ASM_CODE("722")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(WindowPos4svMESA))"\n"
-"\t"STUB_ASM_CODE("707")"\n"
+"\t"STUB_ASM_CODE("723")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(AreProgramsResidentNV))"\n"
-"\t"STUB_ASM_CODE("717")"\n"
+"\t"STUB_ASM_CODE("733")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BindProgramNV))"\n"
-"\t"STUB_ASM_CODE("718")"\n"
+"\t"STUB_ASM_CODE("734")"\n"
 
 ".globl "GLAPI_PREFIX_STR(BindProgramARB)"\n"
 ".set "GLAPI_PREFIX_STR(BindProgramARB)", "GLAPI_PREFIX_STR(BindProgramNV)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DeleteProgramsNV))"\n"
-"\t"STUB_ASM_CODE("719")"\n"
+"\t"STUB_ASM_CODE("735")"\n"
 
 ".globl "GLAPI_PREFIX_STR(DeleteProgramsARB)"\n"
 ".set "GLAPI_PREFIX_STR(DeleteProgramsARB)", "GLAPI_PREFIX_STR(DeleteProgramsNV)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ExecuteProgramNV))"\n"
-"\t"STUB_ASM_CODE("720")"\n"
+"\t"STUB_ASM_CODE("736")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GenProgramsNV))"\n"
-"\t"STUB_ASM_CODE("721")"\n"
+"\t"STUB_ASM_CODE("737")"\n"
 
 ".globl "GLAPI_PREFIX_STR(GenProgramsARB)"\n"
 ".set "GLAPI_PREFIX_STR(GenProgramsARB)", "GLAPI_PREFIX_STR(GenProgramsNV)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetProgramParameterdvNV))"\n"
-"\t"STUB_ASM_CODE("722")"\n"
+"\t"STUB_ASM_CODE("738")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetProgramParameterfvNV))"\n"
-"\t"STUB_ASM_CODE("723")"\n"
+"\t"STUB_ASM_CODE("739")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetProgramStringNV))"\n"
-"\t"STUB_ASM_CODE("724")"\n"
+"\t"STUB_ASM_CODE("740")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetProgramivNV))"\n"
-"\t"STUB_ASM_CODE("725")"\n"
+"\t"STUB_ASM_CODE("741")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetTrackMatrixivNV))"\n"
-"\t"STUB_ASM_CODE("726")"\n"
+"\t"STUB_ASM_CODE("742")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetVertexAttribPointervNV))"\n"
-"\t"STUB_ASM_CODE("727")"\n"
+"\t"STUB_ASM_CODE("743")"\n"
 
 ".globl "GLAPI_PREFIX_STR(GetVertexAttribPointerv)"\n"
 ".set "GLAPI_PREFIX_STR(GetVertexAttribPointerv)", "GLAPI_PREFIX_STR(GetVertexAttribPointervNV)"\n"
@@ -12395,721 +12571,721 @@ STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetVertexAttribPointervNV))"\n"
 ".set "GLAPI_PREFIX_STR(GetVertexAttribPointervARB)", "GLAPI_PREFIX_STR(GetVertexAttribPointervNV)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetVertexAttribdvNV))"\n"
-"\t"STUB_ASM_CODE("728")"\n"
+"\t"STUB_ASM_CODE("744")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetVertexAttribfvNV))"\n"
-"\t"STUB_ASM_CODE("729")"\n"
+"\t"STUB_ASM_CODE("745")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetVertexAttribivNV))"\n"
-"\t"STUB_ASM_CODE("730")"\n"
+"\t"STUB_ASM_CODE("746")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(IsProgramNV))"\n"
-"\t"STUB_ASM_CODE("731")"\n"
+"\t"STUB_ASM_CODE("747")"\n"
 
 ".globl "GLAPI_PREFIX_STR(IsProgramARB)"\n"
 ".set "GLAPI_PREFIX_STR(IsProgramARB)", "GLAPI_PREFIX_STR(IsProgramNV)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(LoadProgramNV))"\n"
-"\t"STUB_ASM_CODE("732")"\n"
+"\t"STUB_ASM_CODE("748")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ProgramParameters4dvNV))"\n"
-"\t"STUB_ASM_CODE("733")"\n"
+"\t"STUB_ASM_CODE("749")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ProgramParameters4fvNV))"\n"
-"\t"STUB_ASM_CODE("734")"\n"
+"\t"STUB_ASM_CODE("750")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(RequestResidentProgramsNV))"\n"
-"\t"STUB_ASM_CODE("735")"\n"
+"\t"STUB_ASM_CODE("751")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(TrackMatrixNV))"\n"
-"\t"STUB_ASM_CODE("736")"\n"
+"\t"STUB_ASM_CODE("752")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib1dNV))"\n"
-"\t"STUB_ASM_CODE("737")"\n"
+"\t"STUB_ASM_CODE("753")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib1dvNV))"\n"
-"\t"STUB_ASM_CODE("738")"\n"
+"\t"STUB_ASM_CODE("754")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib1fNV))"\n"
-"\t"STUB_ASM_CODE("739")"\n"
+"\t"STUB_ASM_CODE("755")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib1fvNV))"\n"
-"\t"STUB_ASM_CODE("740")"\n"
+"\t"STUB_ASM_CODE("756")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib1sNV))"\n"
-"\t"STUB_ASM_CODE("741")"\n"
+"\t"STUB_ASM_CODE("757")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib1svNV))"\n"
-"\t"STUB_ASM_CODE("742")"\n"
+"\t"STUB_ASM_CODE("758")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib2dNV))"\n"
-"\t"STUB_ASM_CODE("743")"\n"
+"\t"STUB_ASM_CODE("759")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib2dvNV))"\n"
-"\t"STUB_ASM_CODE("744")"\n"
+"\t"STUB_ASM_CODE("760")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib2fNV))"\n"
-"\t"STUB_ASM_CODE("745")"\n"
+"\t"STUB_ASM_CODE("761")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib2fvNV))"\n"
-"\t"STUB_ASM_CODE("746")"\n"
+"\t"STUB_ASM_CODE("762")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib2sNV))"\n"
-"\t"STUB_ASM_CODE("747")"\n"
+"\t"STUB_ASM_CODE("763")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib2svNV))"\n"
-"\t"STUB_ASM_CODE("748")"\n"
+"\t"STUB_ASM_CODE("764")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib3dNV))"\n"
-"\t"STUB_ASM_CODE("749")"\n"
+"\t"STUB_ASM_CODE("765")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib3dvNV))"\n"
-"\t"STUB_ASM_CODE("750")"\n"
+"\t"STUB_ASM_CODE("766")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib3fNV))"\n"
-"\t"STUB_ASM_CODE("751")"\n"
+"\t"STUB_ASM_CODE("767")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib3fvNV))"\n"
-"\t"STUB_ASM_CODE("752")"\n"
+"\t"STUB_ASM_CODE("768")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib3sNV))"\n"
-"\t"STUB_ASM_CODE("753")"\n"
+"\t"STUB_ASM_CODE("769")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib3svNV))"\n"
-"\t"STUB_ASM_CODE("754")"\n"
+"\t"STUB_ASM_CODE("770")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib4dNV))"\n"
-"\t"STUB_ASM_CODE("755")"\n"
+"\t"STUB_ASM_CODE("771")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib4dvNV))"\n"
-"\t"STUB_ASM_CODE("756")"\n"
+"\t"STUB_ASM_CODE("772")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib4fNV))"\n"
-"\t"STUB_ASM_CODE("757")"\n"
+"\t"STUB_ASM_CODE("773")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib4fvNV))"\n"
-"\t"STUB_ASM_CODE("758")"\n"
+"\t"STUB_ASM_CODE("774")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib4sNV))"\n"
-"\t"STUB_ASM_CODE("759")"\n"
+"\t"STUB_ASM_CODE("775")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib4svNV))"\n"
-"\t"STUB_ASM_CODE("760")"\n"
+"\t"STUB_ASM_CODE("776")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib4ubNV))"\n"
-"\t"STUB_ASM_CODE("761")"\n"
+"\t"STUB_ASM_CODE("777")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttrib4ubvNV))"\n"
-"\t"STUB_ASM_CODE("762")"\n"
+"\t"STUB_ASM_CODE("778")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribPointerNV))"\n"
-"\t"STUB_ASM_CODE("763")"\n"
+"\t"STUB_ASM_CODE("779")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribs1dvNV))"\n"
-"\t"STUB_ASM_CODE("764")"\n"
+"\t"STUB_ASM_CODE("780")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribs1fvNV))"\n"
-"\t"STUB_ASM_CODE("765")"\n"
+"\t"STUB_ASM_CODE("781")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribs1svNV))"\n"
-"\t"STUB_ASM_CODE("766")"\n"
+"\t"STUB_ASM_CODE("782")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribs2dvNV))"\n"
-"\t"STUB_ASM_CODE("767")"\n"
+"\t"STUB_ASM_CODE("783")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribs2fvNV))"\n"
-"\t"STUB_ASM_CODE("768")"\n"
+"\t"STUB_ASM_CODE("784")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribs2svNV))"\n"
-"\t"STUB_ASM_CODE("769")"\n"
+"\t"STUB_ASM_CODE("785")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribs3dvNV))"\n"
-"\t"STUB_ASM_CODE("770")"\n"
+"\t"STUB_ASM_CODE("786")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribs3fvNV))"\n"
-"\t"STUB_ASM_CODE("771")"\n"
+"\t"STUB_ASM_CODE("787")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribs3svNV))"\n"
-"\t"STUB_ASM_CODE("772")"\n"
+"\t"STUB_ASM_CODE("788")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribs4dvNV))"\n"
-"\t"STUB_ASM_CODE("773")"\n"
+"\t"STUB_ASM_CODE("789")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribs4fvNV))"\n"
-"\t"STUB_ASM_CODE("774")"\n"
+"\t"STUB_ASM_CODE("790")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribs4svNV))"\n"
-"\t"STUB_ASM_CODE("775")"\n"
+"\t"STUB_ASM_CODE("791")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribs4ubvNV))"\n"
-"\t"STUB_ASM_CODE("776")"\n"
+"\t"STUB_ASM_CODE("792")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetTexBumpParameterfvATI))"\n"
-"\t"STUB_ASM_CODE("777")"\n"
+"\t"STUB_ASM_CODE("793")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetTexBumpParameterivATI))"\n"
-"\t"STUB_ASM_CODE("778")"\n"
+"\t"STUB_ASM_CODE("794")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(TexBumpParameterfvATI))"\n"
-"\t"STUB_ASM_CODE("779")"\n"
+"\t"STUB_ASM_CODE("795")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(TexBumpParameterivATI))"\n"
-"\t"STUB_ASM_CODE("780")"\n"
+"\t"STUB_ASM_CODE("796")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(AlphaFragmentOp1ATI))"\n"
-"\t"STUB_ASM_CODE("781")"\n"
+"\t"STUB_ASM_CODE("797")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(AlphaFragmentOp2ATI))"\n"
-"\t"STUB_ASM_CODE("782")"\n"
+"\t"STUB_ASM_CODE("798")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(AlphaFragmentOp3ATI))"\n"
-"\t"STUB_ASM_CODE("783")"\n"
+"\t"STUB_ASM_CODE("799")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BeginFragmentShaderATI))"\n"
-"\t"STUB_ASM_CODE("784")"\n"
+"\t"STUB_ASM_CODE("800")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BindFragmentShaderATI))"\n"
-"\t"STUB_ASM_CODE("785")"\n"
+"\t"STUB_ASM_CODE("801")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ColorFragmentOp1ATI))"\n"
-"\t"STUB_ASM_CODE("786")"\n"
+"\t"STUB_ASM_CODE("802")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ColorFragmentOp2ATI))"\n"
-"\t"STUB_ASM_CODE("787")"\n"
+"\t"STUB_ASM_CODE("803")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ColorFragmentOp3ATI))"\n"
-"\t"STUB_ASM_CODE("788")"\n"
+"\t"STUB_ASM_CODE("804")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DeleteFragmentShaderATI))"\n"
-"\t"STUB_ASM_CODE("789")"\n"
+"\t"STUB_ASM_CODE("805")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(EndFragmentShaderATI))"\n"
-"\t"STUB_ASM_CODE("790")"\n"
+"\t"STUB_ASM_CODE("806")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GenFragmentShadersATI))"\n"
-"\t"STUB_ASM_CODE("791")"\n"
+"\t"STUB_ASM_CODE("807")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(PassTexCoordATI))"\n"
-"\t"STUB_ASM_CODE("792")"\n"
+"\t"STUB_ASM_CODE("808")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SampleMapATI))"\n"
-"\t"STUB_ASM_CODE("793")"\n"
+"\t"STUB_ASM_CODE("809")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(SetFragmentShaderConstantATI))"\n"
-"\t"STUB_ASM_CODE("794")"\n"
+"\t"STUB_ASM_CODE("810")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(PointParameteriNV))"\n"
-"\t"STUB_ASM_CODE("795")"\n"
+"\t"STUB_ASM_CODE("811")"\n"
 
 ".globl "GLAPI_PREFIX_STR(PointParameteri)"\n"
 ".set "GLAPI_PREFIX_STR(PointParameteri)", "GLAPI_PREFIX_STR(PointParameteriNV)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(PointParameterivNV))"\n"
-"\t"STUB_ASM_CODE("796")"\n"
+"\t"STUB_ASM_CODE("812")"\n"
 
 ".globl "GLAPI_PREFIX_STR(PointParameteriv)"\n"
 ".set "GLAPI_PREFIX_STR(PointParameteriv)", "GLAPI_PREFIX_STR(PointParameterivNV)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DeleteVertexArrays))"\n"
-"\t"STUB_ASM_CODE("799")"\n"
+"\t"STUB_ASM_CODE("815")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(IsVertexArray))"\n"
-"\t"STUB_ASM_CODE("801")"\n"
+"\t"STUB_ASM_CODE("817")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetProgramNamedParameterdvNV))"\n"
-"\t"STUB_ASM_CODE("802")"\n"
+"\t"STUB_ASM_CODE("818")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetProgramNamedParameterfvNV))"\n"
-"\t"STUB_ASM_CODE("803")"\n"
+"\t"STUB_ASM_CODE("819")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ProgramNamedParameter4dNV))"\n"
-"\t"STUB_ASM_CODE("804")"\n"
+"\t"STUB_ASM_CODE("820")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ProgramNamedParameter4dvNV))"\n"
-"\t"STUB_ASM_CODE("805")"\n"
+"\t"STUB_ASM_CODE("821")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ProgramNamedParameter4fNV))"\n"
-"\t"STUB_ASM_CODE("806")"\n"
+"\t"STUB_ASM_CODE("822")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ProgramNamedParameter4fvNV))"\n"
-"\t"STUB_ASM_CODE("807")"\n"
+"\t"STUB_ASM_CODE("823")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(PrimitiveRestartIndexNV))"\n"
-"\t"STUB_ASM_CODE("808")"\n"
+"\t"STUB_ASM_CODE("824")"\n"
 
 ".globl "GLAPI_PREFIX_STR(PrimitiveRestartIndex)"\n"
 ".set "GLAPI_PREFIX_STR(PrimitiveRestartIndex)", "GLAPI_PREFIX_STR(PrimitiveRestartIndexNV)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(PrimitiveRestartNV))"\n"
-"\t"STUB_ASM_CODE("809")"\n"
+"\t"STUB_ASM_CODE("825")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BlendEquationSeparate))"\n"
-"\t"STUB_ASM_CODE("857")"\n"
+"\t"STUB_ASM_CODE("873")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BindFramebufferEXT))"\n"
-"\t"STUB_ASM_CODE("858")"\n"
+"\t"STUB_ASM_CODE("874")"\n"
 
 ".globl "GLAPI_PREFIX_STR(BindFramebuffer)"\n"
 ".set "GLAPI_PREFIX_STR(BindFramebuffer)", "GLAPI_PREFIX_STR(BindFramebufferEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BindRenderbufferEXT))"\n"
-"\t"STUB_ASM_CODE("859")"\n"
+"\t"STUB_ASM_CODE("875")"\n"
 
 ".globl "GLAPI_PREFIX_STR(BindRenderbuffer)"\n"
 ".set "GLAPI_PREFIX_STR(BindRenderbuffer)", "GLAPI_PREFIX_STR(BindRenderbufferEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(CheckFramebufferStatusEXT))"\n"
-"\t"STUB_ASM_CODE("860")"\n"
+"\t"STUB_ASM_CODE("876")"\n"
 
 ".globl "GLAPI_PREFIX_STR(CheckFramebufferStatus)"\n"
 ".set "GLAPI_PREFIX_STR(CheckFramebufferStatus)", "GLAPI_PREFIX_STR(CheckFramebufferStatusEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DeleteFramebuffersEXT))"\n"
-"\t"STUB_ASM_CODE("861")"\n"
+"\t"STUB_ASM_CODE("877")"\n"
 
 ".globl "GLAPI_PREFIX_STR(DeleteFramebuffers)"\n"
 ".set "GLAPI_PREFIX_STR(DeleteFramebuffers)", "GLAPI_PREFIX_STR(DeleteFramebuffersEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DeleteRenderbuffersEXT))"\n"
-"\t"STUB_ASM_CODE("862")"\n"
+"\t"STUB_ASM_CODE("878")"\n"
 
 ".globl "GLAPI_PREFIX_STR(DeleteRenderbuffers)"\n"
 ".set "GLAPI_PREFIX_STR(DeleteRenderbuffers)", "GLAPI_PREFIX_STR(DeleteRenderbuffersEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(FramebufferRenderbufferEXT))"\n"
-"\t"STUB_ASM_CODE("863")"\n"
+"\t"STUB_ASM_CODE("879")"\n"
 
 ".globl "GLAPI_PREFIX_STR(FramebufferRenderbuffer)"\n"
 ".set "GLAPI_PREFIX_STR(FramebufferRenderbuffer)", "GLAPI_PREFIX_STR(FramebufferRenderbufferEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(FramebufferTexture1DEXT))"\n"
-"\t"STUB_ASM_CODE("864")"\n"
+"\t"STUB_ASM_CODE("880")"\n"
 
 ".globl "GLAPI_PREFIX_STR(FramebufferTexture1D)"\n"
 ".set "GLAPI_PREFIX_STR(FramebufferTexture1D)", "GLAPI_PREFIX_STR(FramebufferTexture1DEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(FramebufferTexture2DEXT))"\n"
-"\t"STUB_ASM_CODE("865")"\n"
+"\t"STUB_ASM_CODE("881")"\n"
 
 ".globl "GLAPI_PREFIX_STR(FramebufferTexture2D)"\n"
 ".set "GLAPI_PREFIX_STR(FramebufferTexture2D)", "GLAPI_PREFIX_STR(FramebufferTexture2DEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(FramebufferTexture3DEXT))"\n"
-"\t"STUB_ASM_CODE("866")"\n"
+"\t"STUB_ASM_CODE("882")"\n"
 
 ".globl "GLAPI_PREFIX_STR(FramebufferTexture3D)"\n"
 ".set "GLAPI_PREFIX_STR(FramebufferTexture3D)", "GLAPI_PREFIX_STR(FramebufferTexture3DEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GenFramebuffersEXT))"\n"
-"\t"STUB_ASM_CODE("867")"\n"
+"\t"STUB_ASM_CODE("883")"\n"
 
 ".globl "GLAPI_PREFIX_STR(GenFramebuffers)"\n"
 ".set "GLAPI_PREFIX_STR(GenFramebuffers)", "GLAPI_PREFIX_STR(GenFramebuffersEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GenRenderbuffersEXT))"\n"
-"\t"STUB_ASM_CODE("868")"\n"
+"\t"STUB_ASM_CODE("884")"\n"
 
 ".globl "GLAPI_PREFIX_STR(GenRenderbuffers)"\n"
 ".set "GLAPI_PREFIX_STR(GenRenderbuffers)", "GLAPI_PREFIX_STR(GenRenderbuffersEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GenerateMipmapEXT))"\n"
-"\t"STUB_ASM_CODE("869")"\n"
+"\t"STUB_ASM_CODE("885")"\n"
 
 ".globl "GLAPI_PREFIX_STR(GenerateMipmap)"\n"
 ".set "GLAPI_PREFIX_STR(GenerateMipmap)", "GLAPI_PREFIX_STR(GenerateMipmapEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetFramebufferAttachmentParameterivEXT))"\n"
-"\t"STUB_ASM_CODE("870")"\n"
+"\t"STUB_ASM_CODE("886")"\n"
 
 ".globl "GLAPI_PREFIX_STR(GetFramebufferAttachmentParameteriv)"\n"
 ".set "GLAPI_PREFIX_STR(GetFramebufferAttachmentParameteriv)", "GLAPI_PREFIX_STR(GetFramebufferAttachmentParameterivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetRenderbufferParameterivEXT))"\n"
-"\t"STUB_ASM_CODE("871")"\n"
+"\t"STUB_ASM_CODE("887")"\n"
 
 ".globl "GLAPI_PREFIX_STR(GetRenderbufferParameteriv)"\n"
 ".set "GLAPI_PREFIX_STR(GetRenderbufferParameteriv)", "GLAPI_PREFIX_STR(GetRenderbufferParameterivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(IsFramebufferEXT))"\n"
-"\t"STUB_ASM_CODE("872")"\n"
+"\t"STUB_ASM_CODE("888")"\n"
 
 ".globl "GLAPI_PREFIX_STR(IsFramebuffer)"\n"
 ".set "GLAPI_PREFIX_STR(IsFramebuffer)", "GLAPI_PREFIX_STR(IsFramebufferEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(IsRenderbufferEXT))"\n"
-"\t"STUB_ASM_CODE("873")"\n"
+"\t"STUB_ASM_CODE("889")"\n"
 
 ".globl "GLAPI_PREFIX_STR(IsRenderbuffer)"\n"
 ".set "GLAPI_PREFIX_STR(IsRenderbuffer)", "GLAPI_PREFIX_STR(IsRenderbufferEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(RenderbufferStorageEXT))"\n"
-"\t"STUB_ASM_CODE("874")"\n"
+"\t"STUB_ASM_CODE("890")"\n"
 
 ".globl "GLAPI_PREFIX_STR(RenderbufferStorage)"\n"
 ".set "GLAPI_PREFIX_STR(RenderbufferStorage)", "GLAPI_PREFIX_STR(RenderbufferStorageEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BlitFramebuffer))"\n"
-"\t"STUB_ASM_CODE("875")"\n"
+"\t"STUB_ASM_CODE("891")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BindFragDataLocationEXT))"\n"
-"\t"STUB_ASM_CODE("878")"\n"
+"\t"STUB_ASM_CODE("894")"\n"
 
 ".globl "GLAPI_PREFIX_STR(BindFragDataLocation)"\n"
 ".set "GLAPI_PREFIX_STR(BindFragDataLocation)", "GLAPI_PREFIX_STR(BindFragDataLocationEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetFragDataLocationEXT))"\n"
-"\t"STUB_ASM_CODE("879")"\n"
+"\t"STUB_ASM_CODE("895")"\n"
 
 ".globl "GLAPI_PREFIX_STR(GetFragDataLocation)"\n"
 ".set "GLAPI_PREFIX_STR(GetFragDataLocation)", "GLAPI_PREFIX_STR(GetFragDataLocationEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetUniformuivEXT))"\n"
-"\t"STUB_ASM_CODE("880")"\n"
+"\t"STUB_ASM_CODE("896")"\n"
 
 ".globl "GLAPI_PREFIX_STR(GetUniformuiv)"\n"
 ".set "GLAPI_PREFIX_STR(GetUniformuiv)", "GLAPI_PREFIX_STR(GetUniformuivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetVertexAttribIivEXT))"\n"
-"\t"STUB_ASM_CODE("881")"\n"
+"\t"STUB_ASM_CODE("897")"\n"
 
 ".globl "GLAPI_PREFIX_STR(GetVertexAttribIiv)"\n"
 ".set "GLAPI_PREFIX_STR(GetVertexAttribIiv)", "GLAPI_PREFIX_STR(GetVertexAttribIivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetVertexAttribIuivEXT))"\n"
-"\t"STUB_ASM_CODE("882")"\n"
+"\t"STUB_ASM_CODE("898")"\n"
 
 ".globl "GLAPI_PREFIX_STR(GetVertexAttribIuiv)"\n"
 ".set "GLAPI_PREFIX_STR(GetVertexAttribIuiv)", "GLAPI_PREFIX_STR(GetVertexAttribIuivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(Uniform1uiEXT))"\n"
-"\t"STUB_ASM_CODE("883")"\n"
+"\t"STUB_ASM_CODE("899")"\n"
 
 ".globl "GLAPI_PREFIX_STR(Uniform1ui)"\n"
 ".set "GLAPI_PREFIX_STR(Uniform1ui)", "GLAPI_PREFIX_STR(Uniform1uiEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(Uniform1uivEXT))"\n"
-"\t"STUB_ASM_CODE("884")"\n"
+"\t"STUB_ASM_CODE("900")"\n"
 
 ".globl "GLAPI_PREFIX_STR(Uniform1uiv)"\n"
 ".set "GLAPI_PREFIX_STR(Uniform1uiv)", "GLAPI_PREFIX_STR(Uniform1uivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(Uniform2uiEXT))"\n"
-"\t"STUB_ASM_CODE("885")"\n"
+"\t"STUB_ASM_CODE("901")"\n"
 
 ".globl "GLAPI_PREFIX_STR(Uniform2ui)"\n"
 ".set "GLAPI_PREFIX_STR(Uniform2ui)", "GLAPI_PREFIX_STR(Uniform2uiEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(Uniform2uivEXT))"\n"
-"\t"STUB_ASM_CODE("886")"\n"
+"\t"STUB_ASM_CODE("902")"\n"
 
 ".globl "GLAPI_PREFIX_STR(Uniform2uiv)"\n"
 ".set "GLAPI_PREFIX_STR(Uniform2uiv)", "GLAPI_PREFIX_STR(Uniform2uivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(Uniform3uiEXT))"\n"
-"\t"STUB_ASM_CODE("887")"\n"
+"\t"STUB_ASM_CODE("903")"\n"
 
 ".globl "GLAPI_PREFIX_STR(Uniform3ui)"\n"
 ".set "GLAPI_PREFIX_STR(Uniform3ui)", "GLAPI_PREFIX_STR(Uniform3uiEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(Uniform3uivEXT))"\n"
-"\t"STUB_ASM_CODE("888")"\n"
+"\t"STUB_ASM_CODE("904")"\n"
 
 ".globl "GLAPI_PREFIX_STR(Uniform3uiv)"\n"
 ".set "GLAPI_PREFIX_STR(Uniform3uiv)", "GLAPI_PREFIX_STR(Uniform3uivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(Uniform4uiEXT))"\n"
-"\t"STUB_ASM_CODE("889")"\n"
+"\t"STUB_ASM_CODE("905")"\n"
 
 ".globl "GLAPI_PREFIX_STR(Uniform4ui)"\n"
 ".set "GLAPI_PREFIX_STR(Uniform4ui)", "GLAPI_PREFIX_STR(Uniform4uiEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(Uniform4uivEXT))"\n"
-"\t"STUB_ASM_CODE("890")"\n"
+"\t"STUB_ASM_CODE("906")"\n"
 
 ".globl "GLAPI_PREFIX_STR(Uniform4uiv)"\n"
 ".set "GLAPI_PREFIX_STR(Uniform4uiv)", "GLAPI_PREFIX_STR(Uniform4uivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI1iEXT))"\n"
-"\t"STUB_ASM_CODE("891")"\n"
+"\t"STUB_ASM_CODE("907")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI1i)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI1i)", "GLAPI_PREFIX_STR(VertexAttribI1iEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI1ivEXT))"\n"
-"\t"STUB_ASM_CODE("892")"\n"
+"\t"STUB_ASM_CODE("908")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI1iv)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI1iv)", "GLAPI_PREFIX_STR(VertexAttribI1ivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI1uiEXT))"\n"
-"\t"STUB_ASM_CODE("893")"\n"
+"\t"STUB_ASM_CODE("909")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI1ui)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI1ui)", "GLAPI_PREFIX_STR(VertexAttribI1uiEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI1uivEXT))"\n"
-"\t"STUB_ASM_CODE("894")"\n"
+"\t"STUB_ASM_CODE("910")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI1uiv)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI1uiv)", "GLAPI_PREFIX_STR(VertexAttribI1uivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI2iEXT))"\n"
-"\t"STUB_ASM_CODE("895")"\n"
+"\t"STUB_ASM_CODE("911")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI2i)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI2i)", "GLAPI_PREFIX_STR(VertexAttribI2iEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI2ivEXT))"\n"
-"\t"STUB_ASM_CODE("896")"\n"
+"\t"STUB_ASM_CODE("912")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI2iv)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI2iv)", "GLAPI_PREFIX_STR(VertexAttribI2ivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI2uiEXT))"\n"
-"\t"STUB_ASM_CODE("897")"\n"
+"\t"STUB_ASM_CODE("913")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI2ui)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI2ui)", "GLAPI_PREFIX_STR(VertexAttribI2uiEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI2uivEXT))"\n"
-"\t"STUB_ASM_CODE("898")"\n"
+"\t"STUB_ASM_CODE("914")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI2uiv)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI2uiv)", "GLAPI_PREFIX_STR(VertexAttribI2uivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI3iEXT))"\n"
-"\t"STUB_ASM_CODE("899")"\n"
+"\t"STUB_ASM_CODE("915")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI3i)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI3i)", "GLAPI_PREFIX_STR(VertexAttribI3iEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI3ivEXT))"\n"
-"\t"STUB_ASM_CODE("900")"\n"
+"\t"STUB_ASM_CODE("916")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI3iv)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI3iv)", "GLAPI_PREFIX_STR(VertexAttribI3ivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI3uiEXT))"\n"
-"\t"STUB_ASM_CODE("901")"\n"
+"\t"STUB_ASM_CODE("917")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI3ui)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI3ui)", "GLAPI_PREFIX_STR(VertexAttribI3uiEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI3uivEXT))"\n"
-"\t"STUB_ASM_CODE("902")"\n"
+"\t"STUB_ASM_CODE("918")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI3uiv)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI3uiv)", "GLAPI_PREFIX_STR(VertexAttribI3uivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI4bvEXT))"\n"
-"\t"STUB_ASM_CODE("903")"\n"
+"\t"STUB_ASM_CODE("919")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI4bv)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI4bv)", "GLAPI_PREFIX_STR(VertexAttribI4bvEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI4iEXT))"\n"
-"\t"STUB_ASM_CODE("904")"\n"
+"\t"STUB_ASM_CODE("920")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI4i)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI4i)", "GLAPI_PREFIX_STR(VertexAttribI4iEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI4ivEXT))"\n"
-"\t"STUB_ASM_CODE("905")"\n"
+"\t"STUB_ASM_CODE("921")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI4iv)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI4iv)", "GLAPI_PREFIX_STR(VertexAttribI4ivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI4svEXT))"\n"
-"\t"STUB_ASM_CODE("906")"\n"
+"\t"STUB_ASM_CODE("922")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI4sv)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI4sv)", "GLAPI_PREFIX_STR(VertexAttribI4svEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI4ubvEXT))"\n"
-"\t"STUB_ASM_CODE("907")"\n"
+"\t"STUB_ASM_CODE("923")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI4ubv)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI4ubv)", "GLAPI_PREFIX_STR(VertexAttribI4ubvEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI4uiEXT))"\n"
-"\t"STUB_ASM_CODE("908")"\n"
+"\t"STUB_ASM_CODE("924")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI4ui)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI4ui)", "GLAPI_PREFIX_STR(VertexAttribI4uiEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI4uivEXT))"\n"
-"\t"STUB_ASM_CODE("909")"\n"
+"\t"STUB_ASM_CODE("925")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI4uiv)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI4uiv)", "GLAPI_PREFIX_STR(VertexAttribI4uivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribI4usvEXT))"\n"
-"\t"STUB_ASM_CODE("910")"\n"
+"\t"STUB_ASM_CODE("926")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribI4usv)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribI4usv)", "GLAPI_PREFIX_STR(VertexAttribI4usvEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(VertexAttribIPointerEXT))"\n"
-"\t"STUB_ASM_CODE("911")"\n"
+"\t"STUB_ASM_CODE("927")"\n"
 
 ".globl "GLAPI_PREFIX_STR(VertexAttribIPointer)"\n"
 ".set "GLAPI_PREFIX_STR(VertexAttribIPointer)", "GLAPI_PREFIX_STR(VertexAttribIPointerEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(FramebufferTextureLayerEXT))"\n"
-"\t"STUB_ASM_CODE("912")"\n"
+"\t"STUB_ASM_CODE("928")"\n"
 
 ".globl "GLAPI_PREFIX_STR(FramebufferTextureLayer)"\n"
 ".set "GLAPI_PREFIX_STR(FramebufferTextureLayer)", "GLAPI_PREFIX_STR(FramebufferTextureLayerEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ColorMaskIndexedEXT))"\n"
-"\t"STUB_ASM_CODE("913")"\n"
+"\t"STUB_ASM_CODE("929")"\n"
 
 ".globl "GLAPI_PREFIX_STR(ColorMaski)"\n"
 ".set "GLAPI_PREFIX_STR(ColorMaski)", "GLAPI_PREFIX_STR(ColorMaskIndexedEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(DisableIndexedEXT))"\n"
-"\t"STUB_ASM_CODE("914")"\n"
+"\t"STUB_ASM_CODE("930")"\n"
 
 ".globl "GLAPI_PREFIX_STR(Disablei)"\n"
 ".set "GLAPI_PREFIX_STR(Disablei)", "GLAPI_PREFIX_STR(DisableIndexedEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(EnableIndexedEXT))"\n"
-"\t"STUB_ASM_CODE("915")"\n"
+"\t"STUB_ASM_CODE("931")"\n"
 
 ".globl "GLAPI_PREFIX_STR(Enablei)"\n"
 ".set "GLAPI_PREFIX_STR(Enablei)", "GLAPI_PREFIX_STR(EnableIndexedEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetBooleanIndexedvEXT))"\n"
-"\t"STUB_ASM_CODE("916")"\n"
+"\t"STUB_ASM_CODE("932")"\n"
 
 ".globl "GLAPI_PREFIX_STR(GetBooleani_v)"\n"
 ".set "GLAPI_PREFIX_STR(GetBooleani_v)", "GLAPI_PREFIX_STR(GetBooleanIndexedvEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetIntegerIndexedvEXT))"\n"
-"\t"STUB_ASM_CODE("917")"\n"
+"\t"STUB_ASM_CODE("933")"\n"
 
 ".globl "GLAPI_PREFIX_STR(GetIntegeri_v)"\n"
 ".set "GLAPI_PREFIX_STR(GetIntegeri_v)", "GLAPI_PREFIX_STR(GetIntegerIndexedvEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(IsEnabledIndexedEXT))"\n"
-"\t"STUB_ASM_CODE("918")"\n"
+"\t"STUB_ASM_CODE("934")"\n"
 
 ".globl "GLAPI_PREFIX_STR(IsEnabledi)"\n"
 ".set "GLAPI_PREFIX_STR(IsEnabledi)", "GLAPI_PREFIX_STR(IsEnabledIndexedEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ClearColorIiEXT))"\n"
-"\t"STUB_ASM_CODE("919")"\n"
+"\t"STUB_ASM_CODE("935")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ClearColorIuiEXT))"\n"
-"\t"STUB_ASM_CODE("920")"\n"
+"\t"STUB_ASM_CODE("936")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetTexParameterIivEXT))"\n"
-"\t"STUB_ASM_CODE("921")"\n"
+"\t"STUB_ASM_CODE("937")"\n"
 
 ".globl "GLAPI_PREFIX_STR(GetTexParameterIiv)"\n"
 ".set "GLAPI_PREFIX_STR(GetTexParameterIiv)", "GLAPI_PREFIX_STR(GetTexParameterIivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetTexParameterIuivEXT))"\n"
-"\t"STUB_ASM_CODE("922")"\n"
+"\t"STUB_ASM_CODE("938")"\n"
 
 ".globl "GLAPI_PREFIX_STR(GetTexParameterIuiv)"\n"
 ".set "GLAPI_PREFIX_STR(GetTexParameterIuiv)", "GLAPI_PREFIX_STR(GetTexParameterIuivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(TexParameterIivEXT))"\n"
-"\t"STUB_ASM_CODE("923")"\n"
+"\t"STUB_ASM_CODE("939")"\n"
 
 ".globl "GLAPI_PREFIX_STR(TexParameterIiv)"\n"
 ".set "GLAPI_PREFIX_STR(TexParameterIiv)", "GLAPI_PREFIX_STR(TexParameterIivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(TexParameterIuivEXT))"\n"
-"\t"STUB_ASM_CODE("924")"\n"
+"\t"STUB_ASM_CODE("940")"\n"
 
 ".globl "GLAPI_PREFIX_STR(TexParameterIuiv)"\n"
 ".set "GLAPI_PREFIX_STR(TexParameterIuiv)", "GLAPI_PREFIX_STR(TexParameterIuivEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BeginConditionalRenderNV))"\n"
-"\t"STUB_ASM_CODE("925")"\n"
+"\t"STUB_ASM_CODE("941")"\n"
 
 ".globl "GLAPI_PREFIX_STR(BeginConditionalRender)"\n"
 ".set "GLAPI_PREFIX_STR(BeginConditionalRender)", "GLAPI_PREFIX_STR(BeginConditionalRenderNV)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(EndConditionalRenderNV))"\n"
-"\t"STUB_ASM_CODE("926")"\n"
+"\t"STUB_ASM_CODE("942")"\n"
 
 ".globl "GLAPI_PREFIX_STR(EndConditionalRender)"\n"
 ".set "GLAPI_PREFIX_STR(EndConditionalRender)", "GLAPI_PREFIX_STR(EndConditionalRenderNV)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BeginTransformFeedbackEXT))"\n"
-"\t"STUB_ASM_CODE("927")"\n"
+"\t"STUB_ASM_CODE("943")"\n"
 
 ".globl "GLAPI_PREFIX_STR(BeginTransformFeedback)"\n"
 ".set "GLAPI_PREFIX_STR(BeginTransformFeedback)", "GLAPI_PREFIX_STR(BeginTransformFeedbackEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BindBufferBaseEXT))"\n"
-"\t"STUB_ASM_CODE("928")"\n"
+"\t"STUB_ASM_CODE("944")"\n"
 
 ".globl "GLAPI_PREFIX_STR(BindBufferBase)"\n"
 ".set "GLAPI_PREFIX_STR(BindBufferBase)", "GLAPI_PREFIX_STR(BindBufferBaseEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BindBufferOffsetEXT))"\n"
-"\t"STUB_ASM_CODE("929")"\n"
+"\t"STUB_ASM_CODE("945")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(BindBufferRangeEXT))"\n"
-"\t"STUB_ASM_CODE("930")"\n"
+"\t"STUB_ASM_CODE("946")"\n"
 
 ".globl "GLAPI_PREFIX_STR(BindBufferRange)"\n"
 ".set "GLAPI_PREFIX_STR(BindBufferRange)", "GLAPI_PREFIX_STR(BindBufferRangeEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(EndTransformFeedbackEXT))"\n"
-"\t"STUB_ASM_CODE("931")"\n"
+"\t"STUB_ASM_CODE("947")"\n"
 
 ".globl "GLAPI_PREFIX_STR(EndTransformFeedback)"\n"
 ".set "GLAPI_PREFIX_STR(EndTransformFeedback)", "GLAPI_PREFIX_STR(EndTransformFeedbackEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetTransformFeedbackVaryingEXT))"\n"
-"\t"STUB_ASM_CODE("932")"\n"
+"\t"STUB_ASM_CODE("948")"\n"
 
 ".globl "GLAPI_PREFIX_STR(GetTransformFeedbackVarying)"\n"
 ".set "GLAPI_PREFIX_STR(GetTransformFeedbackVarying)", "GLAPI_PREFIX_STR(GetTransformFeedbackVaryingEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(TransformFeedbackVaryingsEXT))"\n"
-"\t"STUB_ASM_CODE("933")"\n"
+"\t"STUB_ASM_CODE("949")"\n"
 
 ".globl "GLAPI_PREFIX_STR(TransformFeedbackVaryings)"\n"
 ".set "GLAPI_PREFIX_STR(TransformFeedbackVaryings)", "GLAPI_PREFIX_STR(TransformFeedbackVaryingsEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ProvokingVertexEXT))"\n"
-"\t"STUB_ASM_CODE("934")"\n"
+"\t"STUB_ASM_CODE("950")"\n"
 
 ".globl "GLAPI_PREFIX_STR(ProvokingVertex)"\n"
 ".set "GLAPI_PREFIX_STR(ProvokingVertex)", "GLAPI_PREFIX_STR(ProvokingVertexEXT)"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(GetObjectParameterivAPPLE))"\n"
-"\t"STUB_ASM_CODE("937")"\n"
+"\t"STUB_ASM_CODE("953")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ObjectPurgeableAPPLE))"\n"
-"\t"STUB_ASM_CODE("938")"\n"
+"\t"STUB_ASM_CODE("954")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ObjectUnpurgeableAPPLE))"\n"
-"\t"STUB_ASM_CODE("939")"\n"
+"\t"STUB_ASM_CODE("955")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(ActiveProgramEXT))"\n"
-"\t"STUB_ASM_CODE("940")"\n"
+"\t"STUB_ASM_CODE("956")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(CreateShaderProgramEXT))"\n"
-"\t"STUB_ASM_CODE("941")"\n"
+"\t"STUB_ASM_CODE("957")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(UseShaderProgramEXT))"\n"
-"\t"STUB_ASM_CODE("942")"\n"
+"\t"STUB_ASM_CODE("958")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(TextureBarrierNV))"\n"
-"\t"STUB_ASM_CODE("943")"\n"
+"\t"STUB_ASM_CODE("959")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(EGLImageTargetRenderbufferStorageOES))"\n"
-"\t"STUB_ASM_CODE("949")"\n"
+"\t"STUB_ASM_CODE("965")"\n"
 
 STUB_ASM_ENTRY(GLAPI_PREFIX_STR(EGLImageTargetTexture2DOES))"\n"
-"\t"STUB_ASM_CODE("950")"\n"
+"\t"STUB_ASM_CODE("966")"\n"
 
 );
 #undef MAPI_TMP_STUB_ASM_GCC_NO_HIDDEN
index ca39b175d812ff0433f30f9c44c3aeb6f1d112ff..f62e1258b4e0716fa3ecb2041987cc05fe8671f0 100644 (file)
@@ -767,361 +767,377 @@ gl_dispatch_functions_start:
        GL_STUB(glGetActiveAttribARB, 569)
        GL_STUB(glGetAttribLocationARB, 570)
        GL_STUB(glDrawBuffersARB, 571)
-       GL_STUB(glDrawArraysInstancedARB, 572)
-       GL_STUB(glDrawElementsInstancedARB, 573)
-       GL_STUB(glRenderbufferStorageMultisample, 574)
-       GL_STUB(glFramebufferTextureARB, 575)
-       GL_STUB(glFramebufferTextureFaceARB, 576)
-       GL_STUB(glProgramParameteriARB, 577)
-       GL_STUB(glVertexAttribDivisorARB, 578)
-       GL_STUB(glFlushMappedBufferRange, 579)
-       GL_STUB(glMapBufferRange, 580)
-       GL_STUB(glBindVertexArray, 581)
-       GL_STUB(glGenVertexArrays, 582)
-       GL_STUB(glCopyBufferSubData, 583)
-       GL_STUB(glClientWaitSync, 584)
-       GL_STUB(glDeleteSync, 585)
-       GL_STUB(glFenceSync, 586)
-       GL_STUB(glGetInteger64v, 587)
-       GL_STUB(glGetSynciv, 588)
-       GL_STUB(glIsSync, 589)
-       GL_STUB(glWaitSync, 590)
-       GL_STUB(glDrawElementsBaseVertex, 591)
-       GL_STUB(glDrawRangeElementsBaseVertex, 592)
-       GL_STUB(glMultiDrawElementsBaseVertex, 593)
-       GL_STUB(glBlendEquationSeparateiARB, 594)
-       GL_STUB(glBlendEquationiARB, 595)
-       GL_STUB(glBlendFuncSeparateiARB, 596)
-       GL_STUB(glBlendFunciARB, 597)
-       GL_STUB(glBindTransformFeedback, 598)
-       GL_STUB(glDeleteTransformFeedbacks, 599)
-       GL_STUB(glDrawTransformFeedback, 600)
-       GL_STUB(glGenTransformFeedbacks, 601)
-       GL_STUB(glIsTransformFeedback, 602)
-       GL_STUB(glPauseTransformFeedback, 603)
-       GL_STUB(glResumeTransformFeedback, 604)
-       GL_STUB(glClearDepthf, 605)
-       GL_STUB(glDepthRangef, 606)
-       GL_STUB(glGetShaderPrecisionFormat, 607)
-       GL_STUB(glReleaseShaderCompiler, 608)
-       GL_STUB(glShaderBinary, 609)
-       GL_STUB(glPolygonOffsetEXT, 610)
-       GL_STUB(gl_dispatch_stub_611, 611)
-       HIDDEN(gl_dispatch_stub_611)
-       GL_STUB(gl_dispatch_stub_612, 612)
-       HIDDEN(gl_dispatch_stub_612)
-       GL_STUB(gl_dispatch_stub_613, 613)
-       HIDDEN(gl_dispatch_stub_613)
-       GL_STUB(gl_dispatch_stub_614, 614)
-       HIDDEN(gl_dispatch_stub_614)
-       GL_STUB(gl_dispatch_stub_615, 615)
-       HIDDEN(gl_dispatch_stub_615)
-       GL_STUB(gl_dispatch_stub_616, 616)
-       HIDDEN(gl_dispatch_stub_616)
-       GL_STUB(gl_dispatch_stub_617, 617)
-       HIDDEN(gl_dispatch_stub_617)
-       GL_STUB(gl_dispatch_stub_618, 618)
-       HIDDEN(gl_dispatch_stub_618)
-       GL_STUB(glColorPointerEXT, 619)
-       GL_STUB(glEdgeFlagPointerEXT, 620)
-       GL_STUB(glIndexPointerEXT, 621)
-       GL_STUB(glNormalPointerEXT, 622)
-       GL_STUB(glTexCoordPointerEXT, 623)
-       GL_STUB(glVertexPointerEXT, 624)
-       GL_STUB(glPointParameterfEXT, 625)
-       GL_STUB(glPointParameterfvEXT, 626)
-       GL_STUB(glLockArraysEXT, 627)
-       GL_STUB(glUnlockArraysEXT, 628)
-       GL_STUB(glSecondaryColor3bEXT, 629)
-       GL_STUB(glSecondaryColor3bvEXT, 630)
-       GL_STUB(glSecondaryColor3dEXT, 631)
-       GL_STUB(glSecondaryColor3dvEXT, 632)
-       GL_STUB(glSecondaryColor3fEXT, 633)
-       GL_STUB(glSecondaryColor3fvEXT, 634)
-       GL_STUB(glSecondaryColor3iEXT, 635)
-       GL_STUB(glSecondaryColor3ivEXT, 636)
-       GL_STUB(glSecondaryColor3sEXT, 637)
-       GL_STUB(glSecondaryColor3svEXT, 638)
-       GL_STUB(glSecondaryColor3ubEXT, 639)
-       GL_STUB(glSecondaryColor3ubvEXT, 640)
-       GL_STUB(glSecondaryColor3uiEXT, 641)
-       GL_STUB(glSecondaryColor3uivEXT, 642)
-       GL_STUB(glSecondaryColor3usEXT, 643)
-       GL_STUB(glSecondaryColor3usvEXT, 644)
-       GL_STUB(glSecondaryColorPointerEXT, 645)
-       GL_STUB(glMultiDrawArraysEXT, 646)
-       GL_STUB(glMultiDrawElementsEXT, 647)
-       GL_STUB(glFogCoordPointerEXT, 648)
-       GL_STUB(glFogCoorddEXT, 649)
-       GL_STUB(glFogCoorddvEXT, 650)
-       GL_STUB(glFogCoordfEXT, 651)
-       GL_STUB(glFogCoordfvEXT, 652)
-       GL_STUB(gl_dispatch_stub_653, 653)
-       HIDDEN(gl_dispatch_stub_653)
-       GL_STUB(glBlendFuncSeparateEXT, 654)
-       GL_STUB(glFlushVertexArrayRangeNV, 655)
-       GL_STUB(glVertexArrayRangeNV, 656)
-       GL_STUB(glCombinerInputNV, 657)
-       GL_STUB(glCombinerOutputNV, 658)
-       GL_STUB(glCombinerParameterfNV, 659)
-       GL_STUB(glCombinerParameterfvNV, 660)
-       GL_STUB(glCombinerParameteriNV, 661)
-       GL_STUB(glCombinerParameterivNV, 662)
-       GL_STUB(glFinalCombinerInputNV, 663)
-       GL_STUB(glGetCombinerInputParameterfvNV, 664)
-       GL_STUB(glGetCombinerInputParameterivNV, 665)
-       GL_STUB(glGetCombinerOutputParameterfvNV, 666)
-       GL_STUB(glGetCombinerOutputParameterivNV, 667)
-       GL_STUB(glGetFinalCombinerInputParameterfvNV, 668)
-       GL_STUB(glGetFinalCombinerInputParameterivNV, 669)
-       GL_STUB(glResizeBuffersMESA, 670)
-       GL_STUB(glWindowPos2dMESA, 671)
-       GL_STUB(glWindowPos2dvMESA, 672)
-       GL_STUB(glWindowPos2fMESA, 673)
-       GL_STUB(glWindowPos2fvMESA, 674)
-       GL_STUB(glWindowPos2iMESA, 675)
-       GL_STUB(glWindowPos2ivMESA, 676)
-       GL_STUB(glWindowPos2sMESA, 677)
-       GL_STUB(glWindowPos2svMESA, 678)
-       GL_STUB(glWindowPos3dMESA, 679)
-       GL_STUB(glWindowPos3dvMESA, 680)
-       GL_STUB(glWindowPos3fMESA, 681)
-       GL_STUB(glWindowPos3fvMESA, 682)
-       GL_STUB(glWindowPos3iMESA, 683)
-       GL_STUB(glWindowPos3ivMESA, 684)
-       GL_STUB(glWindowPos3sMESA, 685)
-       GL_STUB(glWindowPos3svMESA, 686)
-       GL_STUB(glWindowPos4dMESA, 687)
-       GL_STUB(glWindowPos4dvMESA, 688)
-       GL_STUB(glWindowPos4fMESA, 689)
-       GL_STUB(glWindowPos4fvMESA, 690)
-       GL_STUB(glWindowPos4iMESA, 691)
-       GL_STUB(glWindowPos4ivMESA, 692)
-       GL_STUB(glWindowPos4sMESA, 693)
-       GL_STUB(glWindowPos4svMESA, 694)
-       GL_STUB(gl_dispatch_stub_695, 695)
-       HIDDEN(gl_dispatch_stub_695)
-       GL_STUB(gl_dispatch_stub_696, 696)
-       HIDDEN(gl_dispatch_stub_696)
-       GL_STUB(gl_dispatch_stub_697, 697)
-       HIDDEN(gl_dispatch_stub_697)
-       GL_STUB(gl_dispatch_stub_698, 698)
-       HIDDEN(gl_dispatch_stub_698)
-       GL_STUB(gl_dispatch_stub_699, 699)
-       HIDDEN(gl_dispatch_stub_699)
-       GL_STUB(gl_dispatch_stub_700, 700)
-       HIDDEN(gl_dispatch_stub_700)
-       GL_STUB(gl_dispatch_stub_701, 701)
-       HIDDEN(gl_dispatch_stub_701)
-       GL_STUB(gl_dispatch_stub_702, 702)
-       HIDDEN(gl_dispatch_stub_702)
-       GL_STUB(gl_dispatch_stub_703, 703)
-       HIDDEN(gl_dispatch_stub_703)
-       GL_STUB(glAreProgramsResidentNV, 704)
-       GL_STUB(glBindProgramNV, 705)
-       GL_STUB(glDeleteProgramsNV, 706)
-       GL_STUB(glExecuteProgramNV, 707)
-       GL_STUB(glGenProgramsNV, 708)
-       GL_STUB(glGetProgramParameterdvNV, 709)
-       GL_STUB(glGetProgramParameterfvNV, 710)
-       GL_STUB(glGetProgramStringNV, 711)
-       GL_STUB(glGetProgramivNV, 712)
-       GL_STUB(glGetTrackMatrixivNV, 713)
-       GL_STUB(glGetVertexAttribPointervNV, 714)
-       GL_STUB(glGetVertexAttribdvNV, 715)
-       GL_STUB(glGetVertexAttribfvNV, 716)
-       GL_STUB(glGetVertexAttribivNV, 717)
-       GL_STUB(glIsProgramNV, 718)
-       GL_STUB(glLoadProgramNV, 719)
-       GL_STUB(glProgramParameters4dvNV, 720)
-       GL_STUB(glProgramParameters4fvNV, 721)
-       GL_STUB(glRequestResidentProgramsNV, 722)
-       GL_STUB(glTrackMatrixNV, 723)
-       GL_STUB(glVertexAttrib1dNV, 724)
-       GL_STUB(glVertexAttrib1dvNV, 725)
-       GL_STUB(glVertexAttrib1fNV, 726)
-       GL_STUB(glVertexAttrib1fvNV, 727)
-       GL_STUB(glVertexAttrib1sNV, 728)
-       GL_STUB(glVertexAttrib1svNV, 729)
-       GL_STUB(glVertexAttrib2dNV, 730)
-       GL_STUB(glVertexAttrib2dvNV, 731)
-       GL_STUB(glVertexAttrib2fNV, 732)
-       GL_STUB(glVertexAttrib2fvNV, 733)
-       GL_STUB(glVertexAttrib2sNV, 734)
-       GL_STUB(glVertexAttrib2svNV, 735)
-       GL_STUB(glVertexAttrib3dNV, 736)
-       GL_STUB(glVertexAttrib3dvNV, 737)
-       GL_STUB(glVertexAttrib3fNV, 738)
-       GL_STUB(glVertexAttrib3fvNV, 739)
-       GL_STUB(glVertexAttrib3sNV, 740)
-       GL_STUB(glVertexAttrib3svNV, 741)
-       GL_STUB(glVertexAttrib4dNV, 742)
-       GL_STUB(glVertexAttrib4dvNV, 743)
-       GL_STUB(glVertexAttrib4fNV, 744)
-       GL_STUB(glVertexAttrib4fvNV, 745)
-       GL_STUB(glVertexAttrib4sNV, 746)
-       GL_STUB(glVertexAttrib4svNV, 747)
-       GL_STUB(glVertexAttrib4ubNV, 748)
-       GL_STUB(glVertexAttrib4ubvNV, 749)
-       GL_STUB(glVertexAttribPointerNV, 750)
-       GL_STUB(glVertexAttribs1dvNV, 751)
-       GL_STUB(glVertexAttribs1fvNV, 752)
-       GL_STUB(glVertexAttribs1svNV, 753)
-       GL_STUB(glVertexAttribs2dvNV, 754)
-       GL_STUB(glVertexAttribs2fvNV, 755)
-       GL_STUB(glVertexAttribs2svNV, 756)
-       GL_STUB(glVertexAttribs3dvNV, 757)
-       GL_STUB(glVertexAttribs3fvNV, 758)
-       GL_STUB(glVertexAttribs3svNV, 759)
-       GL_STUB(glVertexAttribs4dvNV, 760)
-       GL_STUB(glVertexAttribs4fvNV, 761)
-       GL_STUB(glVertexAttribs4svNV, 762)
-       GL_STUB(glVertexAttribs4ubvNV, 763)
-       GL_STUB(glGetTexBumpParameterfvATI, 764)
-       GL_STUB(glGetTexBumpParameterivATI, 765)
-       GL_STUB(glTexBumpParameterfvATI, 766)
-       GL_STUB(glTexBumpParameterivATI, 767)
-       GL_STUB(glAlphaFragmentOp1ATI, 768)
-       GL_STUB(glAlphaFragmentOp2ATI, 769)
-       GL_STUB(glAlphaFragmentOp3ATI, 770)
-       GL_STUB(glBeginFragmentShaderATI, 771)
-       GL_STUB(glBindFragmentShaderATI, 772)
-       GL_STUB(glColorFragmentOp1ATI, 773)
-       GL_STUB(glColorFragmentOp2ATI, 774)
-       GL_STUB(glColorFragmentOp3ATI, 775)
-       GL_STUB(glDeleteFragmentShaderATI, 776)
-       GL_STUB(glEndFragmentShaderATI, 777)
-       GL_STUB(glGenFragmentShadersATI, 778)
-       GL_STUB(glPassTexCoordATI, 779)
-       GL_STUB(glSampleMapATI, 780)
-       GL_STUB(glSetFragmentShaderConstantATI, 781)
-       GL_STUB(glPointParameteriNV, 782)
-       GL_STUB(glPointParameterivNV, 783)
-       GL_STUB(gl_dispatch_stub_784, 784)
-       HIDDEN(gl_dispatch_stub_784)
-       GL_STUB(gl_dispatch_stub_785, 785)
-       HIDDEN(gl_dispatch_stub_785)
-       GL_STUB(gl_dispatch_stub_786, 786)
-       HIDDEN(gl_dispatch_stub_786)
-       GL_STUB(gl_dispatch_stub_787, 787)
-       HIDDEN(gl_dispatch_stub_787)
-       GL_STUB(gl_dispatch_stub_788, 788)
-       HIDDEN(gl_dispatch_stub_788)
-       GL_STUB(glGetProgramNamedParameterdvNV, 789)
-       GL_STUB(glGetProgramNamedParameterfvNV, 790)
-       GL_STUB(glProgramNamedParameter4dNV, 791)
-       GL_STUB(glProgramNamedParameter4dvNV, 792)
-       GL_STUB(glProgramNamedParameter4fNV, 793)
-       GL_STUB(glProgramNamedParameter4fvNV, 794)
-       GL_STUB(glPrimitiveRestartIndexNV, 795)
-       GL_STUB(glPrimitiveRestartNV, 796)
-       GL_STUB(gl_dispatch_stub_797, 797)
-       HIDDEN(gl_dispatch_stub_797)
-       GL_STUB(gl_dispatch_stub_798, 798)
-       HIDDEN(gl_dispatch_stub_798)
-       GL_STUB(glBindFramebufferEXT, 799)
-       GL_STUB(glBindRenderbufferEXT, 800)
-       GL_STUB(glCheckFramebufferStatusEXT, 801)
-       GL_STUB(glDeleteFramebuffersEXT, 802)
-       GL_STUB(glDeleteRenderbuffersEXT, 803)
-       GL_STUB(glFramebufferRenderbufferEXT, 804)
-       GL_STUB(glFramebufferTexture1DEXT, 805)
-       GL_STUB(glFramebufferTexture2DEXT, 806)
-       GL_STUB(glFramebufferTexture3DEXT, 807)
-       GL_STUB(glGenFramebuffersEXT, 808)
-       GL_STUB(glGenRenderbuffersEXT, 809)
-       GL_STUB(glGenerateMipmapEXT, 810)
-       GL_STUB(glGetFramebufferAttachmentParameterivEXT, 811)
-       GL_STUB(glGetRenderbufferParameterivEXT, 812)
-       GL_STUB(glIsFramebufferEXT, 813)
-       GL_STUB(glIsRenderbufferEXT, 814)
-       GL_STUB(glRenderbufferStorageEXT, 815)
-       GL_STUB(gl_dispatch_stub_816, 816)
-       HIDDEN(gl_dispatch_stub_816)
-       GL_STUB(gl_dispatch_stub_817, 817)
-       HIDDEN(gl_dispatch_stub_817)
-       GL_STUB(gl_dispatch_stub_818, 818)
-       HIDDEN(gl_dispatch_stub_818)
-       GL_STUB(glBindFragDataLocationEXT, 819)
-       GL_STUB(glGetFragDataLocationEXT, 820)
-       GL_STUB(glGetUniformuivEXT, 821)
-       GL_STUB(glGetVertexAttribIivEXT, 822)
-       GL_STUB(glGetVertexAttribIuivEXT, 823)
-       GL_STUB(glUniform1uiEXT, 824)
-       GL_STUB(glUniform1uivEXT, 825)
-       GL_STUB(glUniform2uiEXT, 826)
-       GL_STUB(glUniform2uivEXT, 827)
-       GL_STUB(glUniform3uiEXT, 828)
-       GL_STUB(glUniform3uivEXT, 829)
-       GL_STUB(glUniform4uiEXT, 830)
-       GL_STUB(glUniform4uivEXT, 831)
-       GL_STUB(glVertexAttribI1iEXT, 832)
-       GL_STUB(glVertexAttribI1ivEXT, 833)
-       GL_STUB(glVertexAttribI1uiEXT, 834)
-       GL_STUB(glVertexAttribI1uivEXT, 835)
-       GL_STUB(glVertexAttribI2iEXT, 836)
-       GL_STUB(glVertexAttribI2ivEXT, 837)
-       GL_STUB(glVertexAttribI2uiEXT, 838)
-       GL_STUB(glVertexAttribI2uivEXT, 839)
-       GL_STUB(glVertexAttribI3iEXT, 840)
-       GL_STUB(glVertexAttribI3ivEXT, 841)
-       GL_STUB(glVertexAttribI3uiEXT, 842)
-       GL_STUB(glVertexAttribI3uivEXT, 843)
-       GL_STUB(glVertexAttribI4bvEXT, 844)
-       GL_STUB(glVertexAttribI4iEXT, 845)
-       GL_STUB(glVertexAttribI4ivEXT, 846)
-       GL_STUB(glVertexAttribI4svEXT, 847)
-       GL_STUB(glVertexAttribI4ubvEXT, 848)
-       GL_STUB(glVertexAttribI4uiEXT, 849)
-       GL_STUB(glVertexAttribI4uivEXT, 850)
-       GL_STUB(glVertexAttribI4usvEXT, 851)
-       GL_STUB(glVertexAttribIPointerEXT, 852)
-       GL_STUB(glFramebufferTextureLayerEXT, 853)
-       GL_STUB(glColorMaskIndexedEXT, 854)
-       GL_STUB(glDisableIndexedEXT, 855)
-       GL_STUB(glEnableIndexedEXT, 856)
-       GL_STUB(glGetBooleanIndexedvEXT, 857)
-       GL_STUB(glGetIntegerIndexedvEXT, 858)
-       GL_STUB(glIsEnabledIndexedEXT, 859)
-       GL_STUB(glClearColorIiEXT, 860)
-       GL_STUB(glClearColorIuiEXT, 861)
-       GL_STUB(glGetTexParameterIivEXT, 862)
-       GL_STUB(glGetTexParameterIuivEXT, 863)
-       GL_STUB(glTexParameterIivEXT, 864)
-       GL_STUB(glTexParameterIuivEXT, 865)
-       GL_STUB(glBeginConditionalRenderNV, 866)
-       GL_STUB(glEndConditionalRenderNV, 867)
-       GL_STUB(glBeginTransformFeedbackEXT, 868)
-       GL_STUB(glBindBufferBaseEXT, 869)
-       GL_STUB(glBindBufferOffsetEXT, 870)
-       GL_STUB(glBindBufferRangeEXT, 871)
-       GL_STUB(glEndTransformFeedbackEXT, 872)
-       GL_STUB(glGetTransformFeedbackVaryingEXT, 873)
-       GL_STUB(glTransformFeedbackVaryingsEXT, 874)
-       GL_STUB(glProvokingVertexEXT, 875)
-       GL_STUB(gl_dispatch_stub_876, 876)
-       HIDDEN(gl_dispatch_stub_876)
-       GL_STUB(gl_dispatch_stub_877, 877)
-       HIDDEN(gl_dispatch_stub_877)
-       GL_STUB(glGetObjectParameterivAPPLE, 878)
-       GL_STUB(glObjectPurgeableAPPLE, 879)
-       GL_STUB(glObjectUnpurgeableAPPLE, 880)
-       GL_STUB(glActiveProgramEXT, 881)
-       GL_STUB(glCreateShaderProgramEXT, 882)
-       GL_STUB(glUseShaderProgramEXT, 883)
-       GL_STUB(glTextureBarrierNV, 884)
-       GL_STUB(gl_dispatch_stub_885, 885)
-       HIDDEN(gl_dispatch_stub_885)
-       GL_STUB(gl_dispatch_stub_886, 886)
-       HIDDEN(gl_dispatch_stub_886)
-       GL_STUB(gl_dispatch_stub_887, 887)
-       HIDDEN(gl_dispatch_stub_887)
-       GL_STUB(gl_dispatch_stub_888, 888)
-       HIDDEN(gl_dispatch_stub_888)
-       GL_STUB(gl_dispatch_stub_889, 889)
-       HIDDEN(gl_dispatch_stub_889)
-       GL_STUB(glEGLImageTargetRenderbufferStorageOES, 890)
-       GL_STUB(glEGLImageTargetTexture2DOES, 891)
+       GL_STUB(glClampColorARB, 572)
+       GL_STUB(glDrawArraysInstancedARB, 573)
+       GL_STUB(glDrawElementsInstancedARB, 574)
+       GL_STUB(glRenderbufferStorageMultisample, 575)
+       GL_STUB(glFramebufferTextureARB, 576)
+       GL_STUB(glFramebufferTextureFaceARB, 577)
+       GL_STUB(glProgramParameteriARB, 578)
+       GL_STUB(glVertexAttribDivisorARB, 579)
+       GL_STUB(glFlushMappedBufferRange, 580)
+       GL_STUB(glMapBufferRange, 581)
+       GL_STUB(glTexBufferARB, 582)
+       GL_STUB(glBindVertexArray, 583)
+       GL_STUB(glGenVertexArrays, 584)
+       GL_STUB(glCopyBufferSubData, 585)
+       GL_STUB(glClientWaitSync, 586)
+       GL_STUB(glDeleteSync, 587)
+       GL_STUB(glFenceSync, 588)
+       GL_STUB(glGetInteger64v, 589)
+       GL_STUB(glGetSynciv, 590)
+       GL_STUB(glIsSync, 591)
+       GL_STUB(glWaitSync, 592)
+       GL_STUB(glDrawElementsBaseVertex, 593)
+       GL_STUB(glDrawRangeElementsBaseVertex, 594)
+       GL_STUB(glMultiDrawElementsBaseVertex, 595)
+       GL_STUB(glBlendEquationSeparateiARB, 596)
+       GL_STUB(glBlendEquationiARB, 597)
+       GL_STUB(glBlendFuncSeparateiARB, 598)
+       GL_STUB(glBlendFunciARB, 599)
+       GL_STUB(glBindSampler, 600)
+       GL_STUB(glDeleteSamplers, 601)
+       GL_STUB(glGenSamplers, 602)
+       GL_STUB(glGetSamplerParameterIiv, 603)
+       GL_STUB(glGetSamplerParameterIuiv, 604)
+       GL_STUB(glGetSamplerParameterfv, 605)
+       GL_STUB(glGetSamplerParameteriv, 606)
+       GL_STUB(glIsSampler, 607)
+       GL_STUB(glSamplerParameterIiv, 608)
+       GL_STUB(glSamplerParameterIuiv, 609)
+       GL_STUB(glSamplerParameterf, 610)
+       GL_STUB(glSamplerParameterfv, 611)
+       GL_STUB(glSamplerParameteri, 612)
+       GL_STUB(glSamplerParameteriv, 613)
+       GL_STUB(glBindTransformFeedback, 614)
+       GL_STUB(glDeleteTransformFeedbacks, 615)
+       GL_STUB(glDrawTransformFeedback, 616)
+       GL_STUB(glGenTransformFeedbacks, 617)
+       GL_STUB(glIsTransformFeedback, 618)
+       GL_STUB(glPauseTransformFeedback, 619)
+       GL_STUB(glResumeTransformFeedback, 620)
+       GL_STUB(glClearDepthf, 621)
+       GL_STUB(glDepthRangef, 622)
+       GL_STUB(glGetShaderPrecisionFormat, 623)
+       GL_STUB(glReleaseShaderCompiler, 624)
+       GL_STUB(glShaderBinary, 625)
+       GL_STUB(glPolygonOffsetEXT, 626)
+       GL_STUB(gl_dispatch_stub_627, 627)
+       HIDDEN(gl_dispatch_stub_627)
+       GL_STUB(gl_dispatch_stub_628, 628)
+       HIDDEN(gl_dispatch_stub_628)
+       GL_STUB(gl_dispatch_stub_629, 629)
+       HIDDEN(gl_dispatch_stub_629)
+       GL_STUB(gl_dispatch_stub_630, 630)
+       HIDDEN(gl_dispatch_stub_630)
+       GL_STUB(gl_dispatch_stub_631, 631)
+       HIDDEN(gl_dispatch_stub_631)
+       GL_STUB(gl_dispatch_stub_632, 632)
+       HIDDEN(gl_dispatch_stub_632)
+       GL_STUB(gl_dispatch_stub_633, 633)
+       HIDDEN(gl_dispatch_stub_633)
+       GL_STUB(gl_dispatch_stub_634, 634)
+       HIDDEN(gl_dispatch_stub_634)
+       GL_STUB(glColorPointerEXT, 635)
+       GL_STUB(glEdgeFlagPointerEXT, 636)
+       GL_STUB(glIndexPointerEXT, 637)
+       GL_STUB(glNormalPointerEXT, 638)
+       GL_STUB(glTexCoordPointerEXT, 639)
+       GL_STUB(glVertexPointerEXT, 640)
+       GL_STUB(glPointParameterfEXT, 641)
+       GL_STUB(glPointParameterfvEXT, 642)
+       GL_STUB(glLockArraysEXT, 643)
+       GL_STUB(glUnlockArraysEXT, 644)
+       GL_STUB(glSecondaryColor3bEXT, 645)
+       GL_STUB(glSecondaryColor3bvEXT, 646)
+       GL_STUB(glSecondaryColor3dEXT, 647)
+       GL_STUB(glSecondaryColor3dvEXT, 648)
+       GL_STUB(glSecondaryColor3fEXT, 649)
+       GL_STUB(glSecondaryColor3fvEXT, 650)
+       GL_STUB(glSecondaryColor3iEXT, 651)
+       GL_STUB(glSecondaryColor3ivEXT, 652)
+       GL_STUB(glSecondaryColor3sEXT, 653)
+       GL_STUB(glSecondaryColor3svEXT, 654)
+       GL_STUB(glSecondaryColor3ubEXT, 655)
+       GL_STUB(glSecondaryColor3ubvEXT, 656)
+       GL_STUB(glSecondaryColor3uiEXT, 657)
+       GL_STUB(glSecondaryColor3uivEXT, 658)
+       GL_STUB(glSecondaryColor3usEXT, 659)
+       GL_STUB(glSecondaryColor3usvEXT, 660)
+       GL_STUB(glSecondaryColorPointerEXT, 661)
+       GL_STUB(glMultiDrawArraysEXT, 662)
+       GL_STUB(glMultiDrawElementsEXT, 663)
+       GL_STUB(glFogCoordPointerEXT, 664)
+       GL_STUB(glFogCoorddEXT, 665)
+       GL_STUB(glFogCoorddvEXT, 666)
+       GL_STUB(glFogCoordfEXT, 667)
+       GL_STUB(glFogCoordfvEXT, 668)
+       GL_STUB(gl_dispatch_stub_669, 669)
+       HIDDEN(gl_dispatch_stub_669)
+       GL_STUB(glBlendFuncSeparateEXT, 670)
+       GL_STUB(glFlushVertexArrayRangeNV, 671)
+       GL_STUB(glVertexArrayRangeNV, 672)
+       GL_STUB(glCombinerInputNV, 673)
+       GL_STUB(glCombinerOutputNV, 674)
+       GL_STUB(glCombinerParameterfNV, 675)
+       GL_STUB(glCombinerParameterfvNV, 676)
+       GL_STUB(glCombinerParameteriNV, 677)
+       GL_STUB(glCombinerParameterivNV, 678)
+       GL_STUB(glFinalCombinerInputNV, 679)
+       GL_STUB(glGetCombinerInputParameterfvNV, 680)
+       GL_STUB(glGetCombinerInputParameterivNV, 681)
+       GL_STUB(glGetCombinerOutputParameterfvNV, 682)
+       GL_STUB(glGetCombinerOutputParameterivNV, 683)
+       GL_STUB(glGetFinalCombinerInputParameterfvNV, 684)
+       GL_STUB(glGetFinalCombinerInputParameterivNV, 685)
+       GL_STUB(glResizeBuffersMESA, 686)
+       GL_STUB(glWindowPos2dMESA, 687)
+       GL_STUB(glWindowPos2dvMESA, 688)
+       GL_STUB(glWindowPos2fMESA, 689)
+       GL_STUB(glWindowPos2fvMESA, 690)
+       GL_STUB(glWindowPos2iMESA, 691)
+       GL_STUB(glWindowPos2ivMESA, 692)
+       GL_STUB(glWindowPos2sMESA, 693)
+       GL_STUB(glWindowPos2svMESA, 694)
+       GL_STUB(glWindowPos3dMESA, 695)
+       GL_STUB(glWindowPos3dvMESA, 696)
+       GL_STUB(glWindowPos3fMESA, 697)
+       GL_STUB(glWindowPos3fvMESA, 698)
+       GL_STUB(glWindowPos3iMESA, 699)
+       GL_STUB(glWindowPos3ivMESA, 700)
+       GL_STUB(glWindowPos3sMESA, 701)
+       GL_STUB(glWindowPos3svMESA, 702)
+       GL_STUB(glWindowPos4dMESA, 703)
+       GL_STUB(glWindowPos4dvMESA, 704)
+       GL_STUB(glWindowPos4fMESA, 705)
+       GL_STUB(glWindowPos4fvMESA, 706)
+       GL_STUB(glWindowPos4iMESA, 707)
+       GL_STUB(glWindowPos4ivMESA, 708)
+       GL_STUB(glWindowPos4sMESA, 709)
+       GL_STUB(glWindowPos4svMESA, 710)
+       GL_STUB(gl_dispatch_stub_711, 711)
+       HIDDEN(gl_dispatch_stub_711)
+       GL_STUB(gl_dispatch_stub_712, 712)
+       HIDDEN(gl_dispatch_stub_712)
+       GL_STUB(gl_dispatch_stub_713, 713)
+       HIDDEN(gl_dispatch_stub_713)
+       GL_STUB(gl_dispatch_stub_714, 714)
+       HIDDEN(gl_dispatch_stub_714)
+       GL_STUB(gl_dispatch_stub_715, 715)
+       HIDDEN(gl_dispatch_stub_715)
+       GL_STUB(gl_dispatch_stub_716, 716)
+       HIDDEN(gl_dispatch_stub_716)
+       GL_STUB(gl_dispatch_stub_717, 717)
+       HIDDEN(gl_dispatch_stub_717)
+       GL_STUB(gl_dispatch_stub_718, 718)
+       HIDDEN(gl_dispatch_stub_718)
+       GL_STUB(gl_dispatch_stub_719, 719)
+       HIDDEN(gl_dispatch_stub_719)
+       GL_STUB(glAreProgramsResidentNV, 720)
+       GL_STUB(glBindProgramNV, 721)
+       GL_STUB(glDeleteProgramsNV, 722)
+       GL_STUB(glExecuteProgramNV, 723)
+       GL_STUB(glGenProgramsNV, 724)
+       GL_STUB(glGetProgramParameterdvNV, 725)
+       GL_STUB(glGetProgramParameterfvNV, 726)
+       GL_STUB(glGetProgramStringNV, 727)
+       GL_STUB(glGetProgramivNV, 728)
+       GL_STUB(glGetTrackMatrixivNV, 729)
+       GL_STUB(glGetVertexAttribPointervNV, 730)
+       GL_STUB(glGetVertexAttribdvNV, 731)
+       GL_STUB(glGetVertexAttribfvNV, 732)
+       GL_STUB(glGetVertexAttribivNV, 733)
+       GL_STUB(glIsProgramNV, 734)
+       GL_STUB(glLoadProgramNV, 735)
+       GL_STUB(glProgramParameters4dvNV, 736)
+       GL_STUB(glProgramParameters4fvNV, 737)
+       GL_STUB(glRequestResidentProgramsNV, 738)
+       GL_STUB(glTrackMatrixNV, 739)
+       GL_STUB(glVertexAttrib1dNV, 740)
+       GL_STUB(glVertexAttrib1dvNV, 741)
+       GL_STUB(glVertexAttrib1fNV, 742)
+       GL_STUB(glVertexAttrib1fvNV, 743)
+       GL_STUB(glVertexAttrib1sNV, 744)
+       GL_STUB(glVertexAttrib1svNV, 745)
+       GL_STUB(glVertexAttrib2dNV, 746)
+       GL_STUB(glVertexAttrib2dvNV, 747)
+       GL_STUB(glVertexAttrib2fNV, 748)
+       GL_STUB(glVertexAttrib2fvNV, 749)
+       GL_STUB(glVertexAttrib2sNV, 750)
+       GL_STUB(glVertexAttrib2svNV, 751)
+       GL_STUB(glVertexAttrib3dNV, 752)
+       GL_STUB(glVertexAttrib3dvNV, 753)
+       GL_STUB(glVertexAttrib3fNV, 754)
+       GL_STUB(glVertexAttrib3fvNV, 755)
+       GL_STUB(glVertexAttrib3sNV, 756)
+       GL_STUB(glVertexAttrib3svNV, 757)
+       GL_STUB(glVertexAttrib4dNV, 758)
+       GL_STUB(glVertexAttrib4dvNV, 759)
+       GL_STUB(glVertexAttrib4fNV, 760)
+       GL_STUB(glVertexAttrib4fvNV, 761)
+       GL_STUB(glVertexAttrib4sNV, 762)
+       GL_STUB(glVertexAttrib4svNV, 763)
+       GL_STUB(glVertexAttrib4ubNV, 764)
+       GL_STUB(glVertexAttrib4ubvNV, 765)
+       GL_STUB(glVertexAttribPointerNV, 766)
+       GL_STUB(glVertexAttribs1dvNV, 767)
+       GL_STUB(glVertexAttribs1fvNV, 768)
+       GL_STUB(glVertexAttribs1svNV, 769)
+       GL_STUB(glVertexAttribs2dvNV, 770)
+       GL_STUB(glVertexAttribs2fvNV, 771)
+       GL_STUB(glVertexAttribs2svNV, 772)
+       GL_STUB(glVertexAttribs3dvNV, 773)
+       GL_STUB(glVertexAttribs3fvNV, 774)
+       GL_STUB(glVertexAttribs3svNV, 775)
+       GL_STUB(glVertexAttribs4dvNV, 776)
+       GL_STUB(glVertexAttribs4fvNV, 777)
+       GL_STUB(glVertexAttribs4svNV, 778)
+       GL_STUB(glVertexAttribs4ubvNV, 779)
+       GL_STUB(glGetTexBumpParameterfvATI, 780)
+       GL_STUB(glGetTexBumpParameterivATI, 781)
+       GL_STUB(glTexBumpParameterfvATI, 782)
+       GL_STUB(glTexBumpParameterivATI, 783)
+       GL_STUB(glAlphaFragmentOp1ATI, 784)
+       GL_STUB(glAlphaFragmentOp2ATI, 785)
+       GL_STUB(glAlphaFragmentOp3ATI, 786)
+       GL_STUB(glBeginFragmentShaderATI, 787)
+       GL_STUB(glBindFragmentShaderATI, 788)
+       GL_STUB(glColorFragmentOp1ATI, 789)
+       GL_STUB(glColorFragmentOp2ATI, 790)
+       GL_STUB(glColorFragmentOp3ATI, 791)
+       GL_STUB(glDeleteFragmentShaderATI, 792)
+       GL_STUB(glEndFragmentShaderATI, 793)
+       GL_STUB(glGenFragmentShadersATI, 794)
+       GL_STUB(glPassTexCoordATI, 795)
+       GL_STUB(glSampleMapATI, 796)
+       GL_STUB(glSetFragmentShaderConstantATI, 797)
+       GL_STUB(glPointParameteriNV, 798)
+       GL_STUB(glPointParameterivNV, 799)
+       GL_STUB(gl_dispatch_stub_800, 800)
+       HIDDEN(gl_dispatch_stub_800)
+       GL_STUB(gl_dispatch_stub_801, 801)
+       HIDDEN(gl_dispatch_stub_801)
+       GL_STUB(gl_dispatch_stub_802, 802)
+       HIDDEN(gl_dispatch_stub_802)
+       GL_STUB(gl_dispatch_stub_803, 803)
+       HIDDEN(gl_dispatch_stub_803)
+       GL_STUB(gl_dispatch_stub_804, 804)
+       HIDDEN(gl_dispatch_stub_804)
+       GL_STUB(glGetProgramNamedParameterdvNV, 805)
+       GL_STUB(glGetProgramNamedParameterfvNV, 806)
+       GL_STUB(glProgramNamedParameter4dNV, 807)
+       GL_STUB(glProgramNamedParameter4dvNV, 808)
+       GL_STUB(glProgramNamedParameter4fNV, 809)
+       GL_STUB(glProgramNamedParameter4fvNV, 810)
+       GL_STUB(glPrimitiveRestartIndexNV, 811)
+       GL_STUB(glPrimitiveRestartNV, 812)
+       GL_STUB(gl_dispatch_stub_813, 813)
+       HIDDEN(gl_dispatch_stub_813)
+       GL_STUB(gl_dispatch_stub_814, 814)
+       HIDDEN(gl_dispatch_stub_814)
+       GL_STUB(glBindFramebufferEXT, 815)
+       GL_STUB(glBindRenderbufferEXT, 816)
+       GL_STUB(glCheckFramebufferStatusEXT, 817)
+       GL_STUB(glDeleteFramebuffersEXT, 818)
+       GL_STUB(glDeleteRenderbuffersEXT, 819)
+       GL_STUB(glFramebufferRenderbufferEXT, 820)
+       GL_STUB(glFramebufferTexture1DEXT, 821)
+       GL_STUB(glFramebufferTexture2DEXT, 822)
+       GL_STUB(glFramebufferTexture3DEXT, 823)
+       GL_STUB(glGenFramebuffersEXT, 824)
+       GL_STUB(glGenRenderbuffersEXT, 825)
+       GL_STUB(glGenerateMipmapEXT, 826)
+       GL_STUB(glGetFramebufferAttachmentParameterivEXT, 827)
+       GL_STUB(glGetRenderbufferParameterivEXT, 828)
+       GL_STUB(glIsFramebufferEXT, 829)
+       GL_STUB(glIsRenderbufferEXT, 830)
+       GL_STUB(glRenderbufferStorageEXT, 831)
+       GL_STUB(gl_dispatch_stub_832, 832)
+       HIDDEN(gl_dispatch_stub_832)
+       GL_STUB(gl_dispatch_stub_833, 833)
+       HIDDEN(gl_dispatch_stub_833)
+       GL_STUB(gl_dispatch_stub_834, 834)
+       HIDDEN(gl_dispatch_stub_834)
+       GL_STUB(glBindFragDataLocationEXT, 835)
+       GL_STUB(glGetFragDataLocationEXT, 836)
+       GL_STUB(glGetUniformuivEXT, 837)
+       GL_STUB(glGetVertexAttribIivEXT, 838)
+       GL_STUB(glGetVertexAttribIuivEXT, 839)
+       GL_STUB(glUniform1uiEXT, 840)
+       GL_STUB(glUniform1uivEXT, 841)
+       GL_STUB(glUniform2uiEXT, 842)
+       GL_STUB(glUniform2uivEXT, 843)
+       GL_STUB(glUniform3uiEXT, 844)
+       GL_STUB(glUniform3uivEXT, 845)
+       GL_STUB(glUniform4uiEXT, 846)
+       GL_STUB(glUniform4uivEXT, 847)
+       GL_STUB(glVertexAttribI1iEXT, 848)
+       GL_STUB(glVertexAttribI1ivEXT, 849)
+       GL_STUB(glVertexAttribI1uiEXT, 850)
+       GL_STUB(glVertexAttribI1uivEXT, 851)
+       GL_STUB(glVertexAttribI2iEXT, 852)
+       GL_STUB(glVertexAttribI2ivEXT, 853)
+       GL_STUB(glVertexAttribI2uiEXT, 854)
+       GL_STUB(glVertexAttribI2uivEXT, 855)
+       GL_STUB(glVertexAttribI3iEXT, 856)
+       GL_STUB(glVertexAttribI3ivEXT, 857)
+       GL_STUB(glVertexAttribI3uiEXT, 858)
+       GL_STUB(glVertexAttribI3uivEXT, 859)
+       GL_STUB(glVertexAttribI4bvEXT, 860)
+       GL_STUB(glVertexAttribI4iEXT, 861)
+       GL_STUB(glVertexAttribI4ivEXT, 862)
+       GL_STUB(glVertexAttribI4svEXT, 863)
+       GL_STUB(glVertexAttribI4ubvEXT, 864)
+       GL_STUB(glVertexAttribI4uiEXT, 865)
+       GL_STUB(glVertexAttribI4uivEXT, 866)
+       GL_STUB(glVertexAttribI4usvEXT, 867)
+       GL_STUB(glVertexAttribIPointerEXT, 868)
+       GL_STUB(glFramebufferTextureLayerEXT, 869)
+       GL_STUB(glColorMaskIndexedEXT, 870)
+       GL_STUB(glDisableIndexedEXT, 871)
+       GL_STUB(glEnableIndexedEXT, 872)
+       GL_STUB(glGetBooleanIndexedvEXT, 873)
+       GL_STUB(glGetIntegerIndexedvEXT, 874)
+       GL_STUB(glIsEnabledIndexedEXT, 875)
+       GL_STUB(glClearColorIiEXT, 876)
+       GL_STUB(glClearColorIuiEXT, 877)
+       GL_STUB(glGetTexParameterIivEXT, 878)
+       GL_STUB(glGetTexParameterIuivEXT, 879)
+       GL_STUB(glTexParameterIivEXT, 880)
+       GL_STUB(glTexParameterIuivEXT, 881)
+       GL_STUB(glBeginConditionalRenderNV, 882)
+       GL_STUB(glEndConditionalRenderNV, 883)
+       GL_STUB(glBeginTransformFeedbackEXT, 884)
+       GL_STUB(glBindBufferBaseEXT, 885)
+       GL_STUB(glBindBufferOffsetEXT, 886)
+       GL_STUB(glBindBufferRangeEXT, 887)
+       GL_STUB(glEndTransformFeedbackEXT, 888)
+       GL_STUB(glGetTransformFeedbackVaryingEXT, 889)
+       GL_STUB(glTransformFeedbackVaryingsEXT, 890)
+       GL_STUB(glProvokingVertexEXT, 891)
+       GL_STUB(gl_dispatch_stub_892, 892)
+       HIDDEN(gl_dispatch_stub_892)
+       GL_STUB(gl_dispatch_stub_893, 893)
+       HIDDEN(gl_dispatch_stub_893)
+       GL_STUB(glGetObjectParameterivAPPLE, 894)
+       GL_STUB(glObjectPurgeableAPPLE, 895)
+       GL_STUB(glObjectUnpurgeableAPPLE, 896)
+       GL_STUB(glActiveProgramEXT, 897)
+       GL_STUB(glCreateShaderProgramEXT, 898)
+       GL_STUB(glUseShaderProgramEXT, 899)
+       GL_STUB(glTextureBarrierNV, 900)
+       GL_STUB(gl_dispatch_stub_901, 901)
+       HIDDEN(gl_dispatch_stub_901)
+       GL_STUB(gl_dispatch_stub_902, 902)
+       HIDDEN(gl_dispatch_stub_902)
+       GL_STUB(gl_dispatch_stub_903, 903)
+       HIDDEN(gl_dispatch_stub_903)
+       GL_STUB(gl_dispatch_stub_904, 904)
+       HIDDEN(gl_dispatch_stub_904)
+       GL_STUB(gl_dispatch_stub_905, 905)
+       HIDDEN(gl_dispatch_stub_905)
+       GL_STUB(glEGLImageTargetRenderbufferStorageOES, 906)
+       GL_STUB(glEGLImageTargetTexture2DOES, 907)
        GL_STUB_ALIAS(glArrayElementEXT, glArrayElement)
        GL_STUB_ALIAS(glBindTextureEXT, glBindTexture)
        GL_STUB_ALIAS(glDrawArraysEXT, glDrawArrays)
index 2dec611c5dfa1bcdaf00c074f39161db18149455..9b81f52d763080f4e728054ebbbb08dc54f725e1 100644 (file)
@@ -21535,13 +21535,50 @@ GL_PREFIX(DrawBuffersARB):
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(DrawBuffersARB), .-GL_PREFIX(DrawBuffersARB)
 
+       .p2align        4,,15
+       .globl  GL_PREFIX(ClampColorARB)
+       .type   GL_PREFIX(ClampColorARB), @function
+GL_PREFIX(ClampColorARB):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    4576(%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    4576(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    4576(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
+       movq    4576(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(ClampColorARB), .-GL_PREFIX(ClampColorARB)
+
        .p2align        4,,15
        .globl  GL_PREFIX(DrawArraysInstancedARB)
        .type   GL_PREFIX(DrawArraysInstancedARB), @function
 GL_PREFIX(DrawArraysInstancedARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4576(%rax), %r11
+       movq    4584(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -21555,13 +21592,13 @@ GL_PREFIX(DrawArraysInstancedARB):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4576(%rax), %r11
+       movq    4584(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4576(%rax), %r11
+       movq    4584(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -21575,7 +21612,7 @@ GL_PREFIX(DrawArraysInstancedARB):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4576(%rax), %r11
+       movq    4584(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(DrawArraysInstancedARB), .-GL_PREFIX(DrawArraysInstancedARB)
@@ -21586,7 +21623,7 @@ GL_PREFIX(DrawArraysInstancedARB):
 GL_PREFIX(DrawElementsInstancedARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4584(%rax), %r11
+       movq    4592(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -21600,13 +21637,13 @@ GL_PREFIX(DrawElementsInstancedARB):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4584(%rax), %r11
+       movq    4592(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4584(%rax), %r11
+       movq    4592(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -21620,7 +21657,7 @@ GL_PREFIX(DrawElementsInstancedARB):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4584(%rax), %r11
+       movq    4592(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(DrawElementsInstancedARB), .-GL_PREFIX(DrawElementsInstancedARB)
@@ -21631,7 +21668,7 @@ GL_PREFIX(DrawElementsInstancedARB):
 GL_PREFIX(RenderbufferStorageMultisample):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4592(%rax), %r11
+       movq    4600(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -21645,13 +21682,13 @@ GL_PREFIX(RenderbufferStorageMultisample):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4592(%rax), %r11
+       movq    4600(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4592(%rax), %r11
+       movq    4600(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -21665,7 +21702,7 @@ GL_PREFIX(RenderbufferStorageMultisample):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4592(%rax), %r11
+       movq    4600(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(RenderbufferStorageMultisample), .-GL_PREFIX(RenderbufferStorageMultisample)
@@ -21676,7 +21713,7 @@ GL_PREFIX(RenderbufferStorageMultisample):
 GL_PREFIX(FramebufferTextureARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4600(%rax), %r11
+       movq    4608(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -21690,13 +21727,13 @@ GL_PREFIX(FramebufferTextureARB):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4600(%rax), %r11
+       movq    4608(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4600(%rax), %r11
+       movq    4608(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -21710,7 +21747,7 @@ GL_PREFIX(FramebufferTextureARB):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4600(%rax), %r11
+       movq    4608(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(FramebufferTextureARB), .-GL_PREFIX(FramebufferTextureARB)
@@ -21721,7 +21758,7 @@ GL_PREFIX(FramebufferTextureARB):
 GL_PREFIX(FramebufferTextureFaceARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4608(%rax), %r11
+       movq    4616(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -21735,13 +21772,13 @@ GL_PREFIX(FramebufferTextureFaceARB):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4608(%rax), %r11
+       movq    4616(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4608(%rax), %r11
+       movq    4616(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -21755,7 +21792,7 @@ GL_PREFIX(FramebufferTextureFaceARB):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4608(%rax), %r11
+       movq    4616(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(FramebufferTextureFaceARB), .-GL_PREFIX(FramebufferTextureFaceARB)
@@ -21766,7 +21803,7 @@ GL_PREFIX(FramebufferTextureFaceARB):
 GL_PREFIX(ProgramParameteriARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4616(%rax), %r11
+       movq    4624(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -21776,13 +21813,13 @@ GL_PREFIX(ProgramParameteriARB):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4616(%rax), %r11
+       movq    4624(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4616(%rax), %r11
+       movq    4624(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -21792,7 +21829,7 @@ GL_PREFIX(ProgramParameteriARB):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4616(%rax), %r11
+       movq    4624(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ProgramParameteriARB), .-GL_PREFIX(ProgramParameteriARB)
@@ -21803,7 +21840,7 @@ GL_PREFIX(ProgramParameteriARB):
 GL_PREFIX(VertexAttribDivisorARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4624(%rax), %r11
+       movq    4632(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -21813,13 +21850,13 @@ GL_PREFIX(VertexAttribDivisorARB):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4624(%rax), %r11
+       movq    4632(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4624(%rax), %r11
+       movq    4632(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -21829,7 +21866,7 @@ GL_PREFIX(VertexAttribDivisorARB):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4624(%rax), %r11
+       movq    4632(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribDivisorARB), .-GL_PREFIX(VertexAttribDivisorARB)
@@ -21840,7 +21877,7 @@ GL_PREFIX(VertexAttribDivisorARB):
 GL_PREFIX(FlushMappedBufferRange):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4632(%rax), %r11
+       movq    4640(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -21850,13 +21887,13 @@ GL_PREFIX(FlushMappedBufferRange):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4632(%rax), %r11
+       movq    4640(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4632(%rax), %r11
+       movq    4640(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -21866,7 +21903,7 @@ GL_PREFIX(FlushMappedBufferRange):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4632(%rax), %r11
+       movq    4640(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(FlushMappedBufferRange), .-GL_PREFIX(FlushMappedBufferRange)
@@ -21877,7 +21914,7 @@ GL_PREFIX(FlushMappedBufferRange):
 GL_PREFIX(MapBufferRange):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4640(%rax), %r11
+       movq    4648(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -21891,13 +21928,13 @@ GL_PREFIX(MapBufferRange):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4640(%rax), %r11
+       movq    4648(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4640(%rax), %r11
+       movq    4648(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -21911,36 +21948,73 @@ GL_PREFIX(MapBufferRange):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4640(%rax), %r11
+       movq    4648(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(MapBufferRange), .-GL_PREFIX(MapBufferRange)
 
+       .p2align        4,,15
+       .globl  GL_PREFIX(TexBufferARB)
+       .type   GL_PREFIX(TexBufferARB), @function
+GL_PREFIX(TexBufferARB):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    4656(%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    4656(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    4656(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    4656(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(TexBufferARB), .-GL_PREFIX(TexBufferARB)
+
        .p2align        4,,15
        .globl  GL_PREFIX(BindVertexArray)
        .type   GL_PREFIX(BindVertexArray), @function
 GL_PREFIX(BindVertexArray):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4648(%rax), %r11
+       movq    4664(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    4648(%rax), %r11
+       movq    4664(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4648(%rax), %r11
+       movq    4664(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    4648(%rax), %r11
+       movq    4664(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BindVertexArray), .-GL_PREFIX(BindVertexArray)
@@ -21951,7 +22025,7 @@ GL_PREFIX(BindVertexArray):
 GL_PREFIX(GenVertexArrays):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4656(%rax), %r11
+       movq    4672(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -21961,13 +22035,13 @@ GL_PREFIX(GenVertexArrays):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4656(%rax), %r11
+       movq    4672(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4656(%rax), %r11
+       movq    4672(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -21977,7 +22051,7 @@ GL_PREFIX(GenVertexArrays):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4656(%rax), %r11
+       movq    4672(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GenVertexArrays), .-GL_PREFIX(GenVertexArrays)
@@ -21988,7 +22062,7 @@ GL_PREFIX(GenVertexArrays):
 GL_PREFIX(CopyBufferSubData):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4664(%rax), %r11
+       movq    4680(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22002,13 +22076,13 @@ GL_PREFIX(CopyBufferSubData):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4664(%rax), %r11
+       movq    4680(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4664(%rax), %r11
+       movq    4680(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22022,7 +22096,7 @@ GL_PREFIX(CopyBufferSubData):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4664(%rax), %r11
+       movq    4680(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(CopyBufferSubData), .-GL_PREFIX(CopyBufferSubData)
@@ -22033,7 +22107,7 @@ GL_PREFIX(CopyBufferSubData):
 GL_PREFIX(ClientWaitSync):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4672(%rax), %r11
+       movq    4688(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22043,13 +22117,13 @@ GL_PREFIX(ClientWaitSync):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4672(%rax), %r11
+       movq    4688(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4672(%rax), %r11
+       movq    4688(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22059,7 +22133,7 @@ GL_PREFIX(ClientWaitSync):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4672(%rax), %r11
+       movq    4688(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ClientWaitSync), .-GL_PREFIX(ClientWaitSync)
@@ -22070,25 +22144,25 @@ GL_PREFIX(ClientWaitSync):
 GL_PREFIX(DeleteSync):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4680(%rax), %r11
+       movq    4696(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    4680(%rax), %r11
+       movq    4696(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4680(%rax), %r11
+       movq    4696(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    4680(%rax), %r11
+       movq    4696(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(DeleteSync), .-GL_PREFIX(DeleteSync)
@@ -22099,7 +22173,7 @@ GL_PREFIX(DeleteSync):
 GL_PREFIX(FenceSync):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4688(%rax), %r11
+       movq    4704(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22109,13 +22183,13 @@ GL_PREFIX(FenceSync):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4688(%rax), %r11
+       movq    4704(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4688(%rax), %r11
+       movq    4704(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22125,7 +22199,7 @@ GL_PREFIX(FenceSync):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4688(%rax), %r11
+       movq    4704(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(FenceSync), .-GL_PREFIX(FenceSync)
@@ -22136,7 +22210,7 @@ GL_PREFIX(FenceSync):
 GL_PREFIX(GetInteger64v):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4696(%rax), %r11
+       movq    4712(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22146,13 +22220,13 @@ GL_PREFIX(GetInteger64v):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4696(%rax), %r11
+       movq    4712(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4696(%rax), %r11
+       movq    4712(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22162,7 +22236,7 @@ GL_PREFIX(GetInteger64v):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4696(%rax), %r11
+       movq    4712(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetInteger64v), .-GL_PREFIX(GetInteger64v)
@@ -22173,7 +22247,7 @@ GL_PREFIX(GetInteger64v):
 GL_PREFIX(GetSynciv):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4704(%rax), %r11
+       movq    4720(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22187,13 +22261,13 @@ GL_PREFIX(GetSynciv):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4704(%rax), %r11
+       movq    4720(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4704(%rax), %r11
+       movq    4720(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22207,7 +22281,7 @@ GL_PREFIX(GetSynciv):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4704(%rax), %r11
+       movq    4720(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetSynciv), .-GL_PREFIX(GetSynciv)
@@ -22218,25 +22292,25 @@ GL_PREFIX(GetSynciv):
 GL_PREFIX(IsSync):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4712(%rax), %r11
+       movq    4728(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    4712(%rax), %r11
+       movq    4728(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4712(%rax), %r11
+       movq    4728(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    4712(%rax), %r11
+       movq    4728(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(IsSync), .-GL_PREFIX(IsSync)
@@ -22247,7 +22321,7 @@ GL_PREFIX(IsSync):
 GL_PREFIX(WaitSync):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4720(%rax), %r11
+       movq    4736(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22257,13 +22331,13 @@ GL_PREFIX(WaitSync):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4720(%rax), %r11
+       movq    4736(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4720(%rax), %r11
+       movq    4736(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22273,7 +22347,7 @@ GL_PREFIX(WaitSync):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4720(%rax), %r11
+       movq    4736(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WaitSync), .-GL_PREFIX(WaitSync)
@@ -22284,7 +22358,7 @@ GL_PREFIX(WaitSync):
 GL_PREFIX(DrawElementsBaseVertex):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4728(%rax), %r11
+       movq    4744(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22298,13 +22372,13 @@ GL_PREFIX(DrawElementsBaseVertex):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4728(%rax), %r11
+       movq    4744(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4728(%rax), %r11
+       movq    4744(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22318,7 +22392,7 @@ GL_PREFIX(DrawElementsBaseVertex):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4728(%rax), %r11
+       movq    4744(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(DrawElementsBaseVertex), .-GL_PREFIX(DrawElementsBaseVertex)
@@ -22329,7 +22403,7 @@ GL_PREFIX(DrawElementsBaseVertex):
 GL_PREFIX(DrawRangeElementsBaseVertex):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4736(%rax), %r11
+       movq    4752(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22347,13 +22421,13 @@ GL_PREFIX(DrawRangeElementsBaseVertex):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4736(%rax), %r11
+       movq    4752(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4736(%rax), %r11
+       movq    4752(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22371,7 +22445,7 @@ GL_PREFIX(DrawRangeElementsBaseVertex):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4736(%rax), %r11
+       movq    4752(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(DrawRangeElementsBaseVertex), .-GL_PREFIX(DrawRangeElementsBaseVertex)
@@ -22382,7 +22456,7 @@ GL_PREFIX(DrawRangeElementsBaseVertex):
 GL_PREFIX(MultiDrawElementsBaseVertex):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4744(%rax), %r11
+       movq    4760(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22400,13 +22474,13 @@ GL_PREFIX(MultiDrawElementsBaseVertex):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4744(%rax), %r11
+       movq    4760(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4744(%rax), %r11
+       movq    4760(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22424,7 +22498,7 @@ GL_PREFIX(MultiDrawElementsBaseVertex):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4744(%rax), %r11
+       movq    4760(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(MultiDrawElementsBaseVertex), .-GL_PREFIX(MultiDrawElementsBaseVertex)
@@ -22435,7 +22509,7 @@ GL_PREFIX(MultiDrawElementsBaseVertex):
 GL_PREFIX(BlendEquationSeparateiARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4752(%rax), %r11
+       movq    4768(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22445,13 +22519,13 @@ GL_PREFIX(BlendEquationSeparateiARB):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4752(%rax), %r11
+       movq    4768(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4752(%rax), %r11
+       movq    4768(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22461,7 +22535,7 @@ GL_PREFIX(BlendEquationSeparateiARB):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4752(%rax), %r11
+       movq    4768(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BlendEquationSeparateiARB), .-GL_PREFIX(BlendEquationSeparateiARB)
@@ -22472,7 +22546,7 @@ GL_PREFIX(BlendEquationSeparateiARB):
 GL_PREFIX(BlendEquationiARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4760(%rax), %r11
+       movq    4776(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22482,13 +22556,13 @@ GL_PREFIX(BlendEquationiARB):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4760(%rax), %r11
+       movq    4776(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4760(%rax), %r11
+       movq    4776(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22498,7 +22572,7 @@ GL_PREFIX(BlendEquationiARB):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4760(%rax), %r11
+       movq    4776(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BlendEquationiARB), .-GL_PREFIX(BlendEquationiARB)
@@ -22509,7 +22583,7 @@ GL_PREFIX(BlendEquationiARB):
 GL_PREFIX(BlendFuncSeparateiARB):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4768(%rax), %r11
+       movq    4784(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22523,13 +22597,13 @@ GL_PREFIX(BlendFuncSeparateiARB):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4768(%rax), %r11
+       movq    4784(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4768(%rax), %r11
+       movq    4784(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22543,18 +22617,532 @@ GL_PREFIX(BlendFuncSeparateiARB):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4768(%rax), %r11
+       movq    4784(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(BlendFuncSeparateiARB), .-GL_PREFIX(BlendFuncSeparateiARB)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(BlendFunciARB)
+       .type   GL_PREFIX(BlendFunciARB), @function
+GL_PREFIX(BlendFunciARB):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    4792(%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    4792(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    4792(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    4792(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(BlendFunciARB), .-GL_PREFIX(BlendFunciARB)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(BindSampler)
+       .type   GL_PREFIX(BindSampler), @function
+GL_PREFIX(BindSampler):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    4800(%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    4800(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    4800(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
+       movq    4800(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(BindSampler), .-GL_PREFIX(BindSampler)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(DeleteSamplers)
+       .type   GL_PREFIX(DeleteSamplers), @function
+GL_PREFIX(DeleteSamplers):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    4808(%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    4808(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    4808(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
+       movq    4808(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(DeleteSamplers), .-GL_PREFIX(DeleteSamplers)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(GenSamplers)
+       .type   GL_PREFIX(GenSamplers), @function
+GL_PREFIX(GenSamplers):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    4816(%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    4816(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    4816(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rbp
+       call    _glapi_get_dispatch
+       popq    %rbp
+       popq    %rsi
+       popq    %rdi
+       movq    4816(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(GenSamplers), .-GL_PREFIX(GenSamplers)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(GetSamplerParameterIiv)
+       .type   GL_PREFIX(GetSamplerParameterIiv), @function
+GL_PREFIX(GetSamplerParameterIiv):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    4824(%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    4824(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    4824(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    4824(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(GetSamplerParameterIiv), .-GL_PREFIX(GetSamplerParameterIiv)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(GetSamplerParameterIuiv)
+       .type   GL_PREFIX(GetSamplerParameterIuiv), @function
+GL_PREFIX(GetSamplerParameterIuiv):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    4832(%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    4832(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    4832(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    4832(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(GetSamplerParameterIuiv), .-GL_PREFIX(GetSamplerParameterIuiv)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(GetSamplerParameterfv)
+       .type   GL_PREFIX(GetSamplerParameterfv), @function
+GL_PREFIX(GetSamplerParameterfv):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    4840(%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    4840(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    4840(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    4840(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(GetSamplerParameterfv), .-GL_PREFIX(GetSamplerParameterfv)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(GetSamplerParameteriv)
+       .type   GL_PREFIX(GetSamplerParameteriv), @function
+GL_PREFIX(GetSamplerParameteriv):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    4848(%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    4848(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    4848(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    4848(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(GetSamplerParameteriv), .-GL_PREFIX(GetSamplerParameteriv)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(IsSampler)
+       .type   GL_PREFIX(IsSampler), @function
+GL_PREFIX(IsSampler):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    4856(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       pushq   %rdi
+       call    _x86_64_get_dispatch@PLT
+       popq    %rdi
+       movq    4856(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    4856(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       call    _glapi_get_dispatch
+       popq    %rdi
+       movq    4856(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(IsSampler), .-GL_PREFIX(IsSampler)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(SamplerParameterIiv)
+       .type   GL_PREFIX(SamplerParameterIiv), @function
+GL_PREFIX(SamplerParameterIiv):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    4864(%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    4864(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    4864(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    4864(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(SamplerParameterIiv), .-GL_PREFIX(SamplerParameterIiv)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(SamplerParameterIuiv)
+       .type   GL_PREFIX(SamplerParameterIuiv), @function
+GL_PREFIX(SamplerParameterIuiv):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    4872(%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    4872(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    4872(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    4872(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(SamplerParameterIuiv), .-GL_PREFIX(SamplerParameterIuiv)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(SamplerParameterf)
+       .type   GL_PREFIX(SamplerParameterf), @function
+GL_PREFIX(SamplerParameterf):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    4880(%rax), %r11
+       jmp     *%r11
+#elif defined(PTHREADS)
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %rsi, 8(%rsp)
+       movq    %xmm0, 16(%rsp)
+       call    _x86_64_get_dispatch@PLT
+       movq    16(%rsp), %xmm0
+       movq    8(%rsp), %rsi
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
+       movq    4880(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    4880(%rax), %r11
+       jmp     *%r11
+1:
+       subq    $24, %rsp
+       movq    %rdi, (%rsp)
+       movq    %rsi, 8(%rsp)
+       movq    %xmm0, 16(%rsp)
+       call    _glapi_get_dispatch
+       movq    16(%rsp), %xmm0
+       movq    8(%rsp), %rsi
+       movq    (%rsp), %rdi
+       addq    $24, %rsp
+       movq    4880(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(SamplerParameterf), .-GL_PREFIX(SamplerParameterf)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(SamplerParameterfv)
+       .type   GL_PREFIX(SamplerParameterfv), @function
+GL_PREFIX(SamplerParameterfv):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    4888(%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    4888(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    4888(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    4888(%rax), %r11
+       jmp     *%r11
+#endif /* defined(GLX_USE_TLS) */
+       .size   GL_PREFIX(SamplerParameterfv), .-GL_PREFIX(SamplerParameterfv)
+
+       .p2align        4,,15
+       .globl  GL_PREFIX(SamplerParameteri)
+       .type   GL_PREFIX(SamplerParameteri), @function
+GL_PREFIX(SamplerParameteri):
+#if defined(GLX_USE_TLS)
+       call    _x86_64_get_dispatch@PLT
+       movq    4896(%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    4896(%rax), %r11
+       jmp     *%r11
+#else
+       movq    _glapi_Dispatch(%rip), %rax
+       testq   %rax, %rax
+       je      1f
+       movq    4896(%rax), %r11
+       jmp     *%r11
+1:
+       pushq   %rdi
+       pushq   %rsi
+       pushq   %rdx
+       call    _glapi_get_dispatch
+       popq    %rdx
+       popq    %rsi
+       popq    %rdi
+       movq    4896(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(BlendFuncSeparateiARB), .-GL_PREFIX(BlendFuncSeparateiARB)
+       .size   GL_PREFIX(SamplerParameteri), .-GL_PREFIX(SamplerParameteri)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(BlendFunciARB)
-       .type   GL_PREFIX(BlendFunciARB), @function
-GL_PREFIX(BlendFunciARB):
+       .globl  GL_PREFIX(SamplerParameteriv)
+       .type   GL_PREFIX(SamplerParameteriv), @function
+GL_PREFIX(SamplerParameteriv):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4776(%rax), %r11
+       movq    4904(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22564,13 +23152,13 @@ GL_PREFIX(BlendFunciARB):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4776(%rax), %r11
+       movq    4904(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4776(%rax), %r11
+       movq    4904(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22580,10 +23168,10 @@ GL_PREFIX(BlendFunciARB):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4776(%rax), %r11
+       movq    4904(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(BlendFunciARB), .-GL_PREFIX(BlendFunciARB)
+       .size   GL_PREFIX(SamplerParameteriv), .-GL_PREFIX(SamplerParameteriv)
 
        .p2align        4,,15
        .globl  GL_PREFIX(BindTransformFeedback)
@@ -22591,7 +23179,7 @@ GL_PREFIX(BlendFunciARB):
 GL_PREFIX(BindTransformFeedback):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4784(%rax), %r11
+       movq    4912(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22601,13 +23189,13 @@ GL_PREFIX(BindTransformFeedback):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4784(%rax), %r11
+       movq    4912(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4784(%rax), %r11
+       movq    4912(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22617,7 +23205,7 @@ GL_PREFIX(BindTransformFeedback):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4784(%rax), %r11
+       movq    4912(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BindTransformFeedback), .-GL_PREFIX(BindTransformFeedback)
@@ -22628,7 +23216,7 @@ GL_PREFIX(BindTransformFeedback):
 GL_PREFIX(DeleteTransformFeedbacks):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4792(%rax), %r11
+       movq    4920(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22638,13 +23226,13 @@ GL_PREFIX(DeleteTransformFeedbacks):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4792(%rax), %r11
+       movq    4920(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4792(%rax), %r11
+       movq    4920(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22654,7 +23242,7 @@ GL_PREFIX(DeleteTransformFeedbacks):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4792(%rax), %r11
+       movq    4920(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(DeleteTransformFeedbacks), .-GL_PREFIX(DeleteTransformFeedbacks)
@@ -22665,7 +23253,7 @@ GL_PREFIX(DeleteTransformFeedbacks):
 GL_PREFIX(DrawTransformFeedback):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4800(%rax), %r11
+       movq    4928(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22675,13 +23263,13 @@ GL_PREFIX(DrawTransformFeedback):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4800(%rax), %r11
+       movq    4928(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4800(%rax), %r11
+       movq    4928(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22691,7 +23279,7 @@ GL_PREFIX(DrawTransformFeedback):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4800(%rax), %r11
+       movq    4928(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(DrawTransformFeedback), .-GL_PREFIX(DrawTransformFeedback)
@@ -22702,7 +23290,7 @@ GL_PREFIX(DrawTransformFeedback):
 GL_PREFIX(GenTransformFeedbacks):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4808(%rax), %r11
+       movq    4936(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22712,13 +23300,13 @@ GL_PREFIX(GenTransformFeedbacks):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4808(%rax), %r11
+       movq    4936(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4808(%rax), %r11
+       movq    4936(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22728,7 +23316,7 @@ GL_PREFIX(GenTransformFeedbacks):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4808(%rax), %r11
+       movq    4936(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GenTransformFeedbacks), .-GL_PREFIX(GenTransformFeedbacks)
@@ -22739,25 +23327,25 @@ GL_PREFIX(GenTransformFeedbacks):
 GL_PREFIX(IsTransformFeedback):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4816(%rax), %r11
+       movq    4944(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    4816(%rax), %r11
+       movq    4944(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4816(%rax), %r11
+       movq    4944(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    4816(%rax), %r11
+       movq    4944(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(IsTransformFeedback), .-GL_PREFIX(IsTransformFeedback)
@@ -22768,25 +23356,25 @@ GL_PREFIX(IsTransformFeedback):
 GL_PREFIX(PauseTransformFeedback):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4824(%rax), %r11
+       movq    4952(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       movq    4824(%rax), %r11
+       movq    4952(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4824(%rax), %r11
+       movq    4952(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       movq    4824(%rax), %r11
+       movq    4952(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(PauseTransformFeedback), .-GL_PREFIX(PauseTransformFeedback)
@@ -22797,25 +23385,25 @@ GL_PREFIX(PauseTransformFeedback):
 GL_PREFIX(ResumeTransformFeedback):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4832(%rax), %r11
+       movq    4960(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       movq    4832(%rax), %r11
+       movq    4960(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4832(%rax), %r11
+       movq    4960(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       movq    4832(%rax), %r11
+       movq    4960(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ResumeTransformFeedback), .-GL_PREFIX(ResumeTransformFeedback)
@@ -22826,25 +23414,25 @@ GL_PREFIX(ResumeTransformFeedback):
 GL_PREFIX(ClearDepthf):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4840(%rax), %r11
+       movq    4968(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    4840(%rax), %r11
+       movq    4968(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4840(%rax), %r11
+       movq    4968(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    4840(%rax), %r11
+       movq    4968(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ClearDepthf), .-GL_PREFIX(ClearDepthf)
@@ -22855,7 +23443,7 @@ GL_PREFIX(ClearDepthf):
 GL_PREFIX(DepthRangef):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4848(%rax), %r11
+       movq    4976(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22865,13 +23453,13 @@ GL_PREFIX(DepthRangef):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4848(%rax), %r11
+       movq    4976(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4848(%rax), %r11
+       movq    4976(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22881,7 +23469,7 @@ GL_PREFIX(DepthRangef):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4848(%rax), %r11
+       movq    4976(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(DepthRangef), .-GL_PREFIX(DepthRangef)
@@ -22892,7 +23480,7 @@ GL_PREFIX(DepthRangef):
 GL_PREFIX(GetShaderPrecisionFormat):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4856(%rax), %r11
+       movq    4984(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22906,13 +23494,13 @@ GL_PREFIX(GetShaderPrecisionFormat):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4856(%rax), %r11
+       movq    4984(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4856(%rax), %r11
+       movq    4984(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -22926,7 +23514,7 @@ GL_PREFIX(GetShaderPrecisionFormat):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4856(%rax), %r11
+       movq    4984(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetShaderPrecisionFormat), .-GL_PREFIX(GetShaderPrecisionFormat)
@@ -22937,25 +23525,25 @@ GL_PREFIX(GetShaderPrecisionFormat):
 GL_PREFIX(ReleaseShaderCompiler):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4864(%rax), %r11
+       movq    4992(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       movq    4864(%rax), %r11
+       movq    4992(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4864(%rax), %r11
+       movq    4992(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       movq    4864(%rax), %r11
+       movq    4992(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ReleaseShaderCompiler), .-GL_PREFIX(ReleaseShaderCompiler)
@@ -22966,7 +23554,7 @@ GL_PREFIX(ReleaseShaderCompiler):
 GL_PREFIX(ShaderBinary):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4872(%rax), %r11
+       movq    5000(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -22980,13 +23568,13 @@ GL_PREFIX(ShaderBinary):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4872(%rax), %r11
+       movq    5000(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4872(%rax), %r11
+       movq    5000(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -23000,7 +23588,7 @@ GL_PREFIX(ShaderBinary):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4872(%rax), %r11
+       movq    5000(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ShaderBinary), .-GL_PREFIX(ShaderBinary)
@@ -23011,7 +23599,7 @@ GL_PREFIX(ShaderBinary):
 GL_PREFIX(PolygonOffsetEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4880(%rax), %r11
+       movq    5008(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $24, %rsp
@@ -23021,13 +23609,13 @@ GL_PREFIX(PolygonOffsetEXT):
        movq    8(%rsp), %xmm1
        movq    (%rsp), %xmm0
        addq    $24, %rsp
-       movq    4880(%rax), %r11
+       movq    5008(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4880(%rax), %r11
+       movq    5008(%rax), %r11
        jmp     *%r11
 1:
        subq    $24, %rsp
@@ -23037,19 +23625,19 @@ GL_PREFIX(PolygonOffsetEXT):
        movq    8(%rsp), %xmm1
        movq    (%rsp), %xmm0
        addq    $24, %rsp
-       movq    4880(%rax), %r11
+       movq    5008(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(PolygonOffsetEXT), .-GL_PREFIX(PolygonOffsetEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_611)
-       .type   GL_PREFIX(_dispatch_stub_611), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_611))
-GL_PREFIX(_dispatch_stub_611):
+       .globl  GL_PREFIX(_dispatch_stub_627)
+       .type   GL_PREFIX(_dispatch_stub_627), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_627))
+GL_PREFIX(_dispatch_stub_627):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4888(%rax), %r11
+       movq    5016(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -23059,13 +23647,13 @@ GL_PREFIX(_dispatch_stub_611):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4888(%rax), %r11
+       movq    5016(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4888(%rax), %r11
+       movq    5016(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -23075,19 +23663,19 @@ GL_PREFIX(_dispatch_stub_611):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4888(%rax), %r11
+       movq    5016(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_611), .-GL_PREFIX(_dispatch_stub_611)
+       .size   GL_PREFIX(_dispatch_stub_627), .-GL_PREFIX(_dispatch_stub_627)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_612)
-       .type   GL_PREFIX(_dispatch_stub_612), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_612))
-GL_PREFIX(_dispatch_stub_612):
+       .globl  GL_PREFIX(_dispatch_stub_628)
+       .type   GL_PREFIX(_dispatch_stub_628), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_628))
+GL_PREFIX(_dispatch_stub_628):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4896(%rax), %r11
+       movq    5024(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -23097,13 +23685,13 @@ GL_PREFIX(_dispatch_stub_612):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4896(%rax), %r11
+       movq    5024(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4896(%rax), %r11
+       movq    5024(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -23113,19 +23701,19 @@ GL_PREFIX(_dispatch_stub_612):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4896(%rax), %r11
+       movq    5024(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_612), .-GL_PREFIX(_dispatch_stub_612)
+       .size   GL_PREFIX(_dispatch_stub_628), .-GL_PREFIX(_dispatch_stub_628)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_613)
-       .type   GL_PREFIX(_dispatch_stub_613), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_613))
-GL_PREFIX(_dispatch_stub_613):
+       .globl  GL_PREFIX(_dispatch_stub_629)
+       .type   GL_PREFIX(_dispatch_stub_629), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_629))
+GL_PREFIX(_dispatch_stub_629):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4904(%rax), %r11
+       movq    5032(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $24, %rsp
@@ -23135,13 +23723,13 @@ GL_PREFIX(_dispatch_stub_613):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $24, %rsp
-       movq    4904(%rax), %r11
+       movq    5032(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4904(%rax), %r11
+       movq    5032(%rax), %r11
        jmp     *%r11
 1:
        subq    $24, %rsp
@@ -23151,19 +23739,19 @@ GL_PREFIX(_dispatch_stub_613):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $24, %rsp
-       movq    4904(%rax), %r11
+       movq    5032(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_613), .-GL_PREFIX(_dispatch_stub_613)
+       .size   GL_PREFIX(_dispatch_stub_629), .-GL_PREFIX(_dispatch_stub_629)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_614)
-       .type   GL_PREFIX(_dispatch_stub_614), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_614))
-GL_PREFIX(_dispatch_stub_614):
+       .globl  GL_PREFIX(_dispatch_stub_630)
+       .type   GL_PREFIX(_dispatch_stub_630), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_630))
+GL_PREFIX(_dispatch_stub_630):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4912(%rax), %r11
+       movq    5040(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -23173,13 +23761,13 @@ GL_PREFIX(_dispatch_stub_614):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4912(%rax), %r11
+       movq    5040(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4912(%rax), %r11
+       movq    5040(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -23189,19 +23777,19 @@ GL_PREFIX(_dispatch_stub_614):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4912(%rax), %r11
+       movq    5040(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_614), .-GL_PREFIX(_dispatch_stub_614)
+       .size   GL_PREFIX(_dispatch_stub_630), .-GL_PREFIX(_dispatch_stub_630)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_615)
-       .type   GL_PREFIX(_dispatch_stub_615), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_615))
-GL_PREFIX(_dispatch_stub_615):
+       .globl  GL_PREFIX(_dispatch_stub_631)
+       .type   GL_PREFIX(_dispatch_stub_631), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_631))
+GL_PREFIX(_dispatch_stub_631):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4920(%rax), %r11
+       movq    5048(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -23211,13 +23799,13 @@ GL_PREFIX(_dispatch_stub_615):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4920(%rax), %r11
+       movq    5048(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4920(%rax), %r11
+       movq    5048(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -23227,19 +23815,19 @@ GL_PREFIX(_dispatch_stub_615):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4920(%rax), %r11
+       movq    5048(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_615), .-GL_PREFIX(_dispatch_stub_615)
+       .size   GL_PREFIX(_dispatch_stub_631), .-GL_PREFIX(_dispatch_stub_631)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_616)
-       .type   GL_PREFIX(_dispatch_stub_616), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_616))
-GL_PREFIX(_dispatch_stub_616):
+       .globl  GL_PREFIX(_dispatch_stub_632)
+       .type   GL_PREFIX(_dispatch_stub_632), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_632))
+GL_PREFIX(_dispatch_stub_632):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4928(%rax), %r11
+       movq    5056(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -23249,13 +23837,13 @@ GL_PREFIX(_dispatch_stub_616):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4928(%rax), %r11
+       movq    5056(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4928(%rax), %r11
+       movq    5056(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -23265,19 +23853,19 @@ GL_PREFIX(_dispatch_stub_616):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4928(%rax), %r11
+       movq    5056(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_616), .-GL_PREFIX(_dispatch_stub_616)
+       .size   GL_PREFIX(_dispatch_stub_632), .-GL_PREFIX(_dispatch_stub_632)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_617)
-       .type   GL_PREFIX(_dispatch_stub_617), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_617))
-GL_PREFIX(_dispatch_stub_617):
+       .globl  GL_PREFIX(_dispatch_stub_633)
+       .type   GL_PREFIX(_dispatch_stub_633), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_633))
+GL_PREFIX(_dispatch_stub_633):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4936(%rax), %r11
+       movq    5064(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -23287,13 +23875,13 @@ GL_PREFIX(_dispatch_stub_617):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4936(%rax), %r11
+       movq    5064(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4936(%rax), %r11
+       movq    5064(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -23303,40 +23891,40 @@ GL_PREFIX(_dispatch_stub_617):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    4936(%rax), %r11
+       movq    5064(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_617), .-GL_PREFIX(_dispatch_stub_617)
+       .size   GL_PREFIX(_dispatch_stub_633), .-GL_PREFIX(_dispatch_stub_633)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_618)
-       .type   GL_PREFIX(_dispatch_stub_618), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_618))
-GL_PREFIX(_dispatch_stub_618):
+       .globl  GL_PREFIX(_dispatch_stub_634)
+       .type   GL_PREFIX(_dispatch_stub_634), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_634))
+GL_PREFIX(_dispatch_stub_634):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4944(%rax), %r11
+       movq    5072(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    4944(%rax), %r11
+       movq    5072(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4944(%rax), %r11
+       movq    5072(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    4944(%rax), %r11
+       movq    5072(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_618), .-GL_PREFIX(_dispatch_stub_618)
+       .size   GL_PREFIX(_dispatch_stub_634), .-GL_PREFIX(_dispatch_stub_634)
 
        .p2align        4,,15
        .globl  GL_PREFIX(ColorPointerEXT)
@@ -23344,7 +23932,7 @@ GL_PREFIX(_dispatch_stub_618):
 GL_PREFIX(ColorPointerEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4952(%rax), %r11
+       movq    5080(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -23358,13 +23946,13 @@ GL_PREFIX(ColorPointerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4952(%rax), %r11
+       movq    5080(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4952(%rax), %r11
+       movq    5080(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -23378,7 +23966,7 @@ GL_PREFIX(ColorPointerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4952(%rax), %r11
+       movq    5080(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ColorPointerEXT), .-GL_PREFIX(ColorPointerEXT)
@@ -23389,7 +23977,7 @@ GL_PREFIX(ColorPointerEXT):
 GL_PREFIX(EdgeFlagPointerEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4960(%rax), %r11
+       movq    5088(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -23399,13 +23987,13 @@ GL_PREFIX(EdgeFlagPointerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4960(%rax), %r11
+       movq    5088(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4960(%rax), %r11
+       movq    5088(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -23415,7 +24003,7 @@ GL_PREFIX(EdgeFlagPointerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4960(%rax), %r11
+       movq    5088(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(EdgeFlagPointerEXT), .-GL_PREFIX(EdgeFlagPointerEXT)
@@ -23426,7 +24014,7 @@ GL_PREFIX(EdgeFlagPointerEXT):
 GL_PREFIX(IndexPointerEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4968(%rax), %r11
+       movq    5096(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -23440,13 +24028,13 @@ GL_PREFIX(IndexPointerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4968(%rax), %r11
+       movq    5096(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4968(%rax), %r11
+       movq    5096(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -23460,7 +24048,7 @@ GL_PREFIX(IndexPointerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4968(%rax), %r11
+       movq    5096(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(IndexPointerEXT), .-GL_PREFIX(IndexPointerEXT)
@@ -23471,7 +24059,7 @@ GL_PREFIX(IndexPointerEXT):
 GL_PREFIX(NormalPointerEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4976(%rax), %r11
+       movq    5104(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -23485,13 +24073,13 @@ GL_PREFIX(NormalPointerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4976(%rax), %r11
+       movq    5104(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4976(%rax), %r11
+       movq    5104(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -23505,7 +24093,7 @@ GL_PREFIX(NormalPointerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4976(%rax), %r11
+       movq    5104(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(NormalPointerEXT), .-GL_PREFIX(NormalPointerEXT)
@@ -23516,7 +24104,7 @@ GL_PREFIX(NormalPointerEXT):
 GL_PREFIX(TexCoordPointerEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4984(%rax), %r11
+       movq    5112(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -23530,13 +24118,13 @@ GL_PREFIX(TexCoordPointerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4984(%rax), %r11
+       movq    5112(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4984(%rax), %r11
+       movq    5112(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -23550,7 +24138,7 @@ GL_PREFIX(TexCoordPointerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4984(%rax), %r11
+       movq    5112(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(TexCoordPointerEXT), .-GL_PREFIX(TexCoordPointerEXT)
@@ -23561,7 +24149,7 @@ GL_PREFIX(TexCoordPointerEXT):
 GL_PREFIX(VertexPointerEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    4992(%rax), %r11
+       movq    5120(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -23575,13 +24163,13 @@ GL_PREFIX(VertexPointerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4992(%rax), %r11
+       movq    5120(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    4992(%rax), %r11
+       movq    5120(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -23595,7 +24183,7 @@ GL_PREFIX(VertexPointerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    4992(%rax), %r11
+       movq    5120(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexPointerEXT), .-GL_PREFIX(VertexPointerEXT)
@@ -23606,7 +24194,7 @@ GL_PREFIX(VertexPointerEXT):
 GL_PREFIX(PointParameterfEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5000(%rax), %r11
+       movq    5128(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $24, %rsp
@@ -23616,13 +24204,13 @@ GL_PREFIX(PointParameterfEXT):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $24, %rsp
-       movq    5000(%rax), %r11
+       movq    5128(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5000(%rax), %r11
+       movq    5128(%rax), %r11
        jmp     *%r11
 1:
        subq    $24, %rsp
@@ -23632,7 +24220,7 @@ GL_PREFIX(PointParameterfEXT):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $24, %rsp
-       movq    5000(%rax), %r11
+       movq    5128(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(PointParameterfEXT), .-GL_PREFIX(PointParameterfEXT)
@@ -23643,7 +24231,7 @@ GL_PREFIX(PointParameterfEXT):
 GL_PREFIX(PointParameterfvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5008(%rax), %r11
+       movq    5136(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -23653,13 +24241,13 @@ GL_PREFIX(PointParameterfvEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5008(%rax), %r11
+       movq    5136(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5008(%rax), %r11
+       movq    5136(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -23669,7 +24257,7 @@ GL_PREFIX(PointParameterfvEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5008(%rax), %r11
+       movq    5136(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(PointParameterfvEXT), .-GL_PREFIX(PointParameterfvEXT)
@@ -23680,7 +24268,7 @@ GL_PREFIX(PointParameterfvEXT):
 GL_PREFIX(LockArraysEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5016(%rax), %r11
+       movq    5144(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -23690,13 +24278,13 @@ GL_PREFIX(LockArraysEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5016(%rax), %r11
+       movq    5144(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5016(%rax), %r11
+       movq    5144(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -23706,7 +24294,7 @@ GL_PREFIX(LockArraysEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5016(%rax), %r11
+       movq    5144(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(LockArraysEXT), .-GL_PREFIX(LockArraysEXT)
@@ -23717,25 +24305,25 @@ GL_PREFIX(LockArraysEXT):
 GL_PREFIX(UnlockArraysEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5024(%rax), %r11
+       movq    5152(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       movq    5024(%rax), %r11
+       movq    5152(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5024(%rax), %r11
+       movq    5152(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       movq    5024(%rax), %r11
+       movq    5152(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(UnlockArraysEXT), .-GL_PREFIX(UnlockArraysEXT)
@@ -23746,7 +24334,7 @@ GL_PREFIX(UnlockArraysEXT):
 GL_PREFIX(SecondaryColor3bEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5032(%rax), %r11
+       movq    5160(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -23756,13 +24344,13 @@ GL_PREFIX(SecondaryColor3bEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5032(%rax), %r11
+       movq    5160(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5032(%rax), %r11
+       movq    5160(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -23772,7 +24360,7 @@ GL_PREFIX(SecondaryColor3bEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5032(%rax), %r11
+       movq    5160(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SecondaryColor3bEXT), .-GL_PREFIX(SecondaryColor3bEXT)
@@ -23783,25 +24371,25 @@ GL_PREFIX(SecondaryColor3bEXT):
 GL_PREFIX(SecondaryColor3bvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5040(%rax), %r11
+       movq    5168(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5040(%rax), %r11
+       movq    5168(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5040(%rax), %r11
+       movq    5168(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5040(%rax), %r11
+       movq    5168(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SecondaryColor3bvEXT), .-GL_PREFIX(SecondaryColor3bvEXT)
@@ -23812,7 +24400,7 @@ GL_PREFIX(SecondaryColor3bvEXT):
 GL_PREFIX(SecondaryColor3dEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5048(%rax), %r11
+       movq    5176(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $24, %rsp
@@ -23824,13 +24412,13 @@ GL_PREFIX(SecondaryColor3dEXT):
        movq    8(%rsp), %xmm1
        movq    (%rsp), %xmm0
        addq    $24, %rsp
-       movq    5048(%rax), %r11
+       movq    5176(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5048(%rax), %r11
+       movq    5176(%rax), %r11
        jmp     *%r11
 1:
        subq    $24, %rsp
@@ -23842,7 +24430,7 @@ GL_PREFIX(SecondaryColor3dEXT):
        movq    8(%rsp), %xmm1
        movq    (%rsp), %xmm0
        addq    $24, %rsp
-       movq    5048(%rax), %r11
+       movq    5176(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SecondaryColor3dEXT), .-GL_PREFIX(SecondaryColor3dEXT)
@@ -23853,25 +24441,25 @@ GL_PREFIX(SecondaryColor3dEXT):
 GL_PREFIX(SecondaryColor3dvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5056(%rax), %r11
+       movq    5184(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5056(%rax), %r11
+       movq    5184(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5056(%rax), %r11
+       movq    5184(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5056(%rax), %r11
+       movq    5184(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SecondaryColor3dvEXT), .-GL_PREFIX(SecondaryColor3dvEXT)
@@ -23882,7 +24470,7 @@ GL_PREFIX(SecondaryColor3dvEXT):
 GL_PREFIX(SecondaryColor3fEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5064(%rax), %r11
+       movq    5192(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $24, %rsp
@@ -23894,13 +24482,13 @@ GL_PREFIX(SecondaryColor3fEXT):
        movq    8(%rsp), %xmm1
        movq    (%rsp), %xmm0
        addq    $24, %rsp
-       movq    5064(%rax), %r11
+       movq    5192(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5064(%rax), %r11
+       movq    5192(%rax), %r11
        jmp     *%r11
 1:
        subq    $24, %rsp
@@ -23912,7 +24500,7 @@ GL_PREFIX(SecondaryColor3fEXT):
        movq    8(%rsp), %xmm1
        movq    (%rsp), %xmm0
        addq    $24, %rsp
-       movq    5064(%rax), %r11
+       movq    5192(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SecondaryColor3fEXT), .-GL_PREFIX(SecondaryColor3fEXT)
@@ -23923,25 +24511,25 @@ GL_PREFIX(SecondaryColor3fEXT):
 GL_PREFIX(SecondaryColor3fvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5072(%rax), %r11
+       movq    5200(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5072(%rax), %r11
+       movq    5200(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5072(%rax), %r11
+       movq    5200(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5072(%rax), %r11
+       movq    5200(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SecondaryColor3fvEXT), .-GL_PREFIX(SecondaryColor3fvEXT)
@@ -23952,7 +24540,7 @@ GL_PREFIX(SecondaryColor3fvEXT):
 GL_PREFIX(SecondaryColor3iEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5080(%rax), %r11
+       movq    5208(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -23962,13 +24550,13 @@ GL_PREFIX(SecondaryColor3iEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5080(%rax), %r11
+       movq    5208(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5080(%rax), %r11
+       movq    5208(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -23978,7 +24566,7 @@ GL_PREFIX(SecondaryColor3iEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5080(%rax), %r11
+       movq    5208(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SecondaryColor3iEXT), .-GL_PREFIX(SecondaryColor3iEXT)
@@ -23989,25 +24577,25 @@ GL_PREFIX(SecondaryColor3iEXT):
 GL_PREFIX(SecondaryColor3ivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5088(%rax), %r11
+       movq    5216(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5088(%rax), %r11
+       movq    5216(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5088(%rax), %r11
+       movq    5216(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5088(%rax), %r11
+       movq    5216(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SecondaryColor3ivEXT), .-GL_PREFIX(SecondaryColor3ivEXT)
@@ -24018,7 +24606,7 @@ GL_PREFIX(SecondaryColor3ivEXT):
 GL_PREFIX(SecondaryColor3sEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5096(%rax), %r11
+       movq    5224(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -24028,13 +24616,13 @@ GL_PREFIX(SecondaryColor3sEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5096(%rax), %r11
+       movq    5224(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5096(%rax), %r11
+       movq    5224(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -24044,7 +24632,7 @@ GL_PREFIX(SecondaryColor3sEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5096(%rax), %r11
+       movq    5224(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SecondaryColor3sEXT), .-GL_PREFIX(SecondaryColor3sEXT)
@@ -24055,25 +24643,25 @@ GL_PREFIX(SecondaryColor3sEXT):
 GL_PREFIX(SecondaryColor3svEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5104(%rax), %r11
+       movq    5232(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5104(%rax), %r11
+       movq    5232(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5104(%rax), %r11
+       movq    5232(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5104(%rax), %r11
+       movq    5232(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SecondaryColor3svEXT), .-GL_PREFIX(SecondaryColor3svEXT)
@@ -24084,7 +24672,7 @@ GL_PREFIX(SecondaryColor3svEXT):
 GL_PREFIX(SecondaryColor3ubEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5112(%rax), %r11
+       movq    5240(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -24094,13 +24682,13 @@ GL_PREFIX(SecondaryColor3ubEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5112(%rax), %r11
+       movq    5240(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5112(%rax), %r11
+       movq    5240(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -24110,7 +24698,7 @@ GL_PREFIX(SecondaryColor3ubEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5112(%rax), %r11
+       movq    5240(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SecondaryColor3ubEXT), .-GL_PREFIX(SecondaryColor3ubEXT)
@@ -24121,25 +24709,25 @@ GL_PREFIX(SecondaryColor3ubEXT):
 GL_PREFIX(SecondaryColor3ubvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5120(%rax), %r11
+       movq    5248(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5120(%rax), %r11
+       movq    5248(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5120(%rax), %r11
+       movq    5248(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5120(%rax), %r11
+       movq    5248(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SecondaryColor3ubvEXT), .-GL_PREFIX(SecondaryColor3ubvEXT)
@@ -24150,7 +24738,7 @@ GL_PREFIX(SecondaryColor3ubvEXT):
 GL_PREFIX(SecondaryColor3uiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5128(%rax), %r11
+       movq    5256(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -24160,13 +24748,13 @@ GL_PREFIX(SecondaryColor3uiEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5128(%rax), %r11
+       movq    5256(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5128(%rax), %r11
+       movq    5256(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -24176,7 +24764,7 @@ GL_PREFIX(SecondaryColor3uiEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5128(%rax), %r11
+       movq    5256(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SecondaryColor3uiEXT), .-GL_PREFIX(SecondaryColor3uiEXT)
@@ -24187,25 +24775,25 @@ GL_PREFIX(SecondaryColor3uiEXT):
 GL_PREFIX(SecondaryColor3uivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5136(%rax), %r11
+       movq    5264(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5136(%rax), %r11
+       movq    5264(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5136(%rax), %r11
+       movq    5264(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5136(%rax), %r11
+       movq    5264(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SecondaryColor3uivEXT), .-GL_PREFIX(SecondaryColor3uivEXT)
@@ -24216,7 +24804,7 @@ GL_PREFIX(SecondaryColor3uivEXT):
 GL_PREFIX(SecondaryColor3usEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5144(%rax), %r11
+       movq    5272(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -24226,13 +24814,13 @@ GL_PREFIX(SecondaryColor3usEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5144(%rax), %r11
+       movq    5272(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5144(%rax), %r11
+       movq    5272(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -24242,7 +24830,7 @@ GL_PREFIX(SecondaryColor3usEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5144(%rax), %r11
+       movq    5272(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SecondaryColor3usEXT), .-GL_PREFIX(SecondaryColor3usEXT)
@@ -24253,25 +24841,25 @@ GL_PREFIX(SecondaryColor3usEXT):
 GL_PREFIX(SecondaryColor3usvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5152(%rax), %r11
+       movq    5280(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5152(%rax), %r11
+       movq    5280(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5152(%rax), %r11
+       movq    5280(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5152(%rax), %r11
+       movq    5280(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SecondaryColor3usvEXT), .-GL_PREFIX(SecondaryColor3usvEXT)
@@ -24282,7 +24870,7 @@ GL_PREFIX(SecondaryColor3usvEXT):
 GL_PREFIX(SecondaryColorPointerEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5160(%rax), %r11
+       movq    5288(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -24296,13 +24884,13 @@ GL_PREFIX(SecondaryColorPointerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5160(%rax), %r11
+       movq    5288(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5160(%rax), %r11
+       movq    5288(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -24316,7 +24904,7 @@ GL_PREFIX(SecondaryColorPointerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5160(%rax), %r11
+       movq    5288(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SecondaryColorPointerEXT), .-GL_PREFIX(SecondaryColorPointerEXT)
@@ -24327,7 +24915,7 @@ GL_PREFIX(SecondaryColorPointerEXT):
 GL_PREFIX(MultiDrawArraysEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5168(%rax), %r11
+       movq    5296(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -24341,13 +24929,13 @@ GL_PREFIX(MultiDrawArraysEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5168(%rax), %r11
+       movq    5296(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5168(%rax), %r11
+       movq    5296(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -24361,7 +24949,7 @@ GL_PREFIX(MultiDrawArraysEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5168(%rax), %r11
+       movq    5296(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(MultiDrawArraysEXT), .-GL_PREFIX(MultiDrawArraysEXT)
@@ -24372,7 +24960,7 @@ GL_PREFIX(MultiDrawArraysEXT):
 GL_PREFIX(MultiDrawElementsEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5176(%rax), %r11
+       movq    5304(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -24386,13 +24974,13 @@ GL_PREFIX(MultiDrawElementsEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5176(%rax), %r11
+       movq    5304(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5176(%rax), %r11
+       movq    5304(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -24406,7 +24994,7 @@ GL_PREFIX(MultiDrawElementsEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5176(%rax), %r11
+       movq    5304(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(MultiDrawElementsEXT), .-GL_PREFIX(MultiDrawElementsEXT)
@@ -24417,7 +25005,7 @@ GL_PREFIX(MultiDrawElementsEXT):
 GL_PREFIX(FogCoordPointerEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5184(%rax), %r11
+       movq    5312(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -24427,13 +25015,13 @@ GL_PREFIX(FogCoordPointerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5184(%rax), %r11
+       movq    5312(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5184(%rax), %r11
+       movq    5312(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -24443,7 +25031,7 @@ GL_PREFIX(FogCoordPointerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5184(%rax), %r11
+       movq    5312(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(FogCoordPointerEXT), .-GL_PREFIX(FogCoordPointerEXT)
@@ -24454,7 +25042,7 @@ GL_PREFIX(FogCoordPointerEXT):
 GL_PREFIX(FogCoorddEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5192(%rax), %r11
+       movq    5320(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $8, %rsp
@@ -24462,13 +25050,13 @@ GL_PREFIX(FogCoorddEXT):
        call    _x86_64_get_dispatch@PLT
        movq    (%rsp), %xmm0
        addq    $8, %rsp
-       movq    5192(%rax), %r11
+       movq    5320(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5192(%rax), %r11
+       movq    5320(%rax), %r11
        jmp     *%r11
 1:
        subq    $8, %rsp
@@ -24476,7 +25064,7 @@ GL_PREFIX(FogCoorddEXT):
        call    _glapi_get_dispatch
        movq    (%rsp), %xmm0
        addq    $8, %rsp
-       movq    5192(%rax), %r11
+       movq    5320(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(FogCoorddEXT), .-GL_PREFIX(FogCoorddEXT)
@@ -24487,25 +25075,25 @@ GL_PREFIX(FogCoorddEXT):
 GL_PREFIX(FogCoorddvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5200(%rax), %r11
+       movq    5328(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5200(%rax), %r11
+       movq    5328(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5200(%rax), %r11
+       movq    5328(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5200(%rax), %r11
+       movq    5328(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(FogCoorddvEXT), .-GL_PREFIX(FogCoorddvEXT)
@@ -24516,7 +25104,7 @@ GL_PREFIX(FogCoorddvEXT):
 GL_PREFIX(FogCoordfEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5208(%rax), %r11
+       movq    5336(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $8, %rsp
@@ -24524,13 +25112,13 @@ GL_PREFIX(FogCoordfEXT):
        call    _x86_64_get_dispatch@PLT
        movq    (%rsp), %xmm0
        addq    $8, %rsp
-       movq    5208(%rax), %r11
+       movq    5336(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5208(%rax), %r11
+       movq    5336(%rax), %r11
        jmp     *%r11
 1:
        subq    $8, %rsp
@@ -24538,7 +25126,7 @@ GL_PREFIX(FogCoordfEXT):
        call    _glapi_get_dispatch
        movq    (%rsp), %xmm0
        addq    $8, %rsp
-       movq    5208(%rax), %r11
+       movq    5336(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(FogCoordfEXT), .-GL_PREFIX(FogCoordfEXT)
@@ -24549,58 +25137,58 @@ GL_PREFIX(FogCoordfEXT):
 GL_PREFIX(FogCoordfvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5216(%rax), %r11
+       movq    5344(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5216(%rax), %r11
+       movq    5344(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5216(%rax), %r11
+       movq    5344(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5216(%rax), %r11
+       movq    5344(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(FogCoordfvEXT), .-GL_PREFIX(FogCoordfvEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_653)
-       .type   GL_PREFIX(_dispatch_stub_653), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_653))
-GL_PREFIX(_dispatch_stub_653):
+       .globl  GL_PREFIX(_dispatch_stub_669)
+       .type   GL_PREFIX(_dispatch_stub_669), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_669))
+GL_PREFIX(_dispatch_stub_669):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5224(%rax), %r11
+       movq    5352(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5224(%rax), %r11
+       movq    5352(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5224(%rax), %r11
+       movq    5352(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5224(%rax), %r11
+       movq    5352(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_653), .-GL_PREFIX(_dispatch_stub_653)
+       .size   GL_PREFIX(_dispatch_stub_669), .-GL_PREFIX(_dispatch_stub_669)
 
        .p2align        4,,15
        .globl  GL_PREFIX(BlendFuncSeparateEXT)
@@ -24608,7 +25196,7 @@ GL_PREFIX(_dispatch_stub_653):
 GL_PREFIX(BlendFuncSeparateEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5232(%rax), %r11
+       movq    5360(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -24622,13 +25210,13 @@ GL_PREFIX(BlendFuncSeparateEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5232(%rax), %r11
+       movq    5360(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5232(%rax), %r11
+       movq    5360(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -24642,7 +25230,7 @@ GL_PREFIX(BlendFuncSeparateEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5232(%rax), %r11
+       movq    5360(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BlendFuncSeparateEXT), .-GL_PREFIX(BlendFuncSeparateEXT)
@@ -24653,25 +25241,25 @@ GL_PREFIX(BlendFuncSeparateEXT):
 GL_PREFIX(FlushVertexArrayRangeNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5240(%rax), %r11
+       movq    5368(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       movq    5240(%rax), %r11
+       movq    5368(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5240(%rax), %r11
+       movq    5368(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       movq    5240(%rax), %r11
+       movq    5368(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(FlushVertexArrayRangeNV), .-GL_PREFIX(FlushVertexArrayRangeNV)
@@ -24682,7 +25270,7 @@ GL_PREFIX(FlushVertexArrayRangeNV):
 GL_PREFIX(VertexArrayRangeNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5248(%rax), %r11
+       movq    5376(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -24692,13 +25280,13 @@ GL_PREFIX(VertexArrayRangeNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5248(%rax), %r11
+       movq    5376(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5248(%rax), %r11
+       movq    5376(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -24708,7 +25296,7 @@ GL_PREFIX(VertexArrayRangeNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5248(%rax), %r11
+       movq    5376(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexArrayRangeNV), .-GL_PREFIX(VertexArrayRangeNV)
@@ -24719,7 +25307,7 @@ GL_PREFIX(VertexArrayRangeNV):
 GL_PREFIX(CombinerInputNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5256(%rax), %r11
+       movq    5384(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -24737,13 +25325,13 @@ GL_PREFIX(CombinerInputNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5256(%rax), %r11
+       movq    5384(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5256(%rax), %r11
+       movq    5384(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -24761,7 +25349,7 @@ GL_PREFIX(CombinerInputNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5256(%rax), %r11
+       movq    5384(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(CombinerInputNV), .-GL_PREFIX(CombinerInputNV)
@@ -24772,7 +25360,7 @@ GL_PREFIX(CombinerInputNV):
 GL_PREFIX(CombinerOutputNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5264(%rax), %r11
+       movq    5392(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -24790,13 +25378,13 @@ GL_PREFIX(CombinerOutputNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5264(%rax), %r11
+       movq    5392(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5264(%rax), %r11
+       movq    5392(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -24814,7 +25402,7 @@ GL_PREFIX(CombinerOutputNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5264(%rax), %r11
+       movq    5392(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(CombinerOutputNV), .-GL_PREFIX(CombinerOutputNV)
@@ -24825,7 +25413,7 @@ GL_PREFIX(CombinerOutputNV):
 GL_PREFIX(CombinerParameterfNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5272(%rax), %r11
+       movq    5400(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $24, %rsp
@@ -24835,13 +25423,13 @@ GL_PREFIX(CombinerParameterfNV):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $24, %rsp
-       movq    5272(%rax), %r11
+       movq    5400(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5272(%rax), %r11
+       movq    5400(%rax), %r11
        jmp     *%r11
 1:
        subq    $24, %rsp
@@ -24851,7 +25439,7 @@ GL_PREFIX(CombinerParameterfNV):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $24, %rsp
-       movq    5272(%rax), %r11
+       movq    5400(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(CombinerParameterfNV), .-GL_PREFIX(CombinerParameterfNV)
@@ -24862,7 +25450,7 @@ GL_PREFIX(CombinerParameterfNV):
 GL_PREFIX(CombinerParameterfvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5280(%rax), %r11
+       movq    5408(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -24872,13 +25460,13 @@ GL_PREFIX(CombinerParameterfvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5280(%rax), %r11
+       movq    5408(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5280(%rax), %r11
+       movq    5408(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -24888,7 +25476,7 @@ GL_PREFIX(CombinerParameterfvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5280(%rax), %r11
+       movq    5408(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(CombinerParameterfvNV), .-GL_PREFIX(CombinerParameterfvNV)
@@ -24899,7 +25487,7 @@ GL_PREFIX(CombinerParameterfvNV):
 GL_PREFIX(CombinerParameteriNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5288(%rax), %r11
+       movq    5416(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -24909,13 +25497,13 @@ GL_PREFIX(CombinerParameteriNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5288(%rax), %r11
+       movq    5416(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5288(%rax), %r11
+       movq    5416(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -24925,7 +25513,7 @@ GL_PREFIX(CombinerParameteriNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5288(%rax), %r11
+       movq    5416(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(CombinerParameteriNV), .-GL_PREFIX(CombinerParameteriNV)
@@ -24936,7 +25524,7 @@ GL_PREFIX(CombinerParameteriNV):
 GL_PREFIX(CombinerParameterivNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5296(%rax), %r11
+       movq    5424(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -24946,13 +25534,13 @@ GL_PREFIX(CombinerParameterivNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5296(%rax), %r11
+       movq    5424(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5296(%rax), %r11
+       movq    5424(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -24962,7 +25550,7 @@ GL_PREFIX(CombinerParameterivNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5296(%rax), %r11
+       movq    5424(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(CombinerParameterivNV), .-GL_PREFIX(CombinerParameterivNV)
@@ -24973,7 +25561,7 @@ GL_PREFIX(CombinerParameterivNV):
 GL_PREFIX(FinalCombinerInputNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5304(%rax), %r11
+       movq    5432(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -24987,13 +25575,13 @@ GL_PREFIX(FinalCombinerInputNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5304(%rax), %r11
+       movq    5432(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5304(%rax), %r11
+       movq    5432(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -25007,7 +25595,7 @@ GL_PREFIX(FinalCombinerInputNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5304(%rax), %r11
+       movq    5432(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(FinalCombinerInputNV), .-GL_PREFIX(FinalCombinerInputNV)
@@ -25018,7 +25606,7 @@ GL_PREFIX(FinalCombinerInputNV):
 GL_PREFIX(GetCombinerInputParameterfvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5312(%rax), %r11
+       movq    5440(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -25032,13 +25620,13 @@ GL_PREFIX(GetCombinerInputParameterfvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5312(%rax), %r11
+       movq    5440(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5312(%rax), %r11
+       movq    5440(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -25052,7 +25640,7 @@ GL_PREFIX(GetCombinerInputParameterfvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5312(%rax), %r11
+       movq    5440(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetCombinerInputParameterfvNV), .-GL_PREFIX(GetCombinerInputParameterfvNV)
@@ -25063,7 +25651,7 @@ GL_PREFIX(GetCombinerInputParameterfvNV):
 GL_PREFIX(GetCombinerInputParameterivNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5320(%rax), %r11
+       movq    5448(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -25077,13 +25665,13 @@ GL_PREFIX(GetCombinerInputParameterivNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5320(%rax), %r11
+       movq    5448(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5320(%rax), %r11
+       movq    5448(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -25097,7 +25685,7 @@ GL_PREFIX(GetCombinerInputParameterivNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5320(%rax), %r11
+       movq    5448(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetCombinerInputParameterivNV), .-GL_PREFIX(GetCombinerInputParameterivNV)
@@ -25108,7 +25696,7 @@ GL_PREFIX(GetCombinerInputParameterivNV):
 GL_PREFIX(GetCombinerOutputParameterfvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5328(%rax), %r11
+       movq    5456(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -25122,13 +25710,13 @@ GL_PREFIX(GetCombinerOutputParameterfvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5328(%rax), %r11
+       movq    5456(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5328(%rax), %r11
+       movq    5456(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -25142,7 +25730,7 @@ GL_PREFIX(GetCombinerOutputParameterfvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5328(%rax), %r11
+       movq    5456(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetCombinerOutputParameterfvNV), .-GL_PREFIX(GetCombinerOutputParameterfvNV)
@@ -25153,7 +25741,7 @@ GL_PREFIX(GetCombinerOutputParameterfvNV):
 GL_PREFIX(GetCombinerOutputParameterivNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5336(%rax), %r11
+       movq    5464(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -25167,13 +25755,13 @@ GL_PREFIX(GetCombinerOutputParameterivNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5336(%rax), %r11
+       movq    5464(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5336(%rax), %r11
+       movq    5464(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -25187,7 +25775,7 @@ GL_PREFIX(GetCombinerOutputParameterivNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5336(%rax), %r11
+       movq    5464(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetCombinerOutputParameterivNV), .-GL_PREFIX(GetCombinerOutputParameterivNV)
@@ -25198,7 +25786,7 @@ GL_PREFIX(GetCombinerOutputParameterivNV):
 GL_PREFIX(GetFinalCombinerInputParameterfvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5344(%rax), %r11
+       movq    5472(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -25208,13 +25796,13 @@ GL_PREFIX(GetFinalCombinerInputParameterfvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5344(%rax), %r11
+       movq    5472(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5344(%rax), %r11
+       movq    5472(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -25224,7 +25812,7 @@ GL_PREFIX(GetFinalCombinerInputParameterfvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5344(%rax), %r11
+       movq    5472(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetFinalCombinerInputParameterfvNV), .-GL_PREFIX(GetFinalCombinerInputParameterfvNV)
@@ -25235,7 +25823,7 @@ GL_PREFIX(GetFinalCombinerInputParameterfvNV):
 GL_PREFIX(GetFinalCombinerInputParameterivNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5352(%rax), %r11
+       movq    5480(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -25245,13 +25833,13 @@ GL_PREFIX(GetFinalCombinerInputParameterivNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5352(%rax), %r11
+       movq    5480(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5352(%rax), %r11
+       movq    5480(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -25261,7 +25849,7 @@ GL_PREFIX(GetFinalCombinerInputParameterivNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5352(%rax), %r11
+       movq    5480(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetFinalCombinerInputParameterivNV), .-GL_PREFIX(GetFinalCombinerInputParameterivNV)
@@ -25272,25 +25860,25 @@ GL_PREFIX(GetFinalCombinerInputParameterivNV):
 GL_PREFIX(ResizeBuffersMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5360(%rax), %r11
+       movq    5488(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       movq    5360(%rax), %r11
+       movq    5488(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5360(%rax), %r11
+       movq    5488(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       movq    5360(%rax), %r11
+       movq    5488(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ResizeBuffersMESA), .-GL_PREFIX(ResizeBuffersMESA)
@@ -25301,7 +25889,7 @@ GL_PREFIX(ResizeBuffersMESA):
 GL_PREFIX(WindowPos2dMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5368(%rax), %r11
+       movq    5496(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $24, %rsp
@@ -25311,13 +25899,13 @@ GL_PREFIX(WindowPos2dMESA):
        movq    8(%rsp), %xmm1
        movq    (%rsp), %xmm0
        addq    $24, %rsp
-       movq    5368(%rax), %r11
+       movq    5496(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5368(%rax), %r11
+       movq    5496(%rax), %r11
        jmp     *%r11
 1:
        subq    $24, %rsp
@@ -25327,7 +25915,7 @@ GL_PREFIX(WindowPos2dMESA):
        movq    8(%rsp), %xmm1
        movq    (%rsp), %xmm0
        addq    $24, %rsp
-       movq    5368(%rax), %r11
+       movq    5496(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos2dMESA), .-GL_PREFIX(WindowPos2dMESA)
@@ -25338,25 +25926,25 @@ GL_PREFIX(WindowPos2dMESA):
 GL_PREFIX(WindowPos2dvMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5376(%rax), %r11
+       movq    5504(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5376(%rax), %r11
+       movq    5504(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5376(%rax), %r11
+       movq    5504(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5376(%rax), %r11
+       movq    5504(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos2dvMESA), .-GL_PREFIX(WindowPos2dvMESA)
@@ -25367,7 +25955,7 @@ GL_PREFIX(WindowPos2dvMESA):
 GL_PREFIX(WindowPos2fMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5384(%rax), %r11
+       movq    5512(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $24, %rsp
@@ -25377,13 +25965,13 @@ GL_PREFIX(WindowPos2fMESA):
        movq    8(%rsp), %xmm1
        movq    (%rsp), %xmm0
        addq    $24, %rsp
-       movq    5384(%rax), %r11
+       movq    5512(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5384(%rax), %r11
+       movq    5512(%rax), %r11
        jmp     *%r11
 1:
        subq    $24, %rsp
@@ -25393,7 +25981,7 @@ GL_PREFIX(WindowPos2fMESA):
        movq    8(%rsp), %xmm1
        movq    (%rsp), %xmm0
        addq    $24, %rsp
-       movq    5384(%rax), %r11
+       movq    5512(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos2fMESA), .-GL_PREFIX(WindowPos2fMESA)
@@ -25404,25 +25992,25 @@ GL_PREFIX(WindowPos2fMESA):
 GL_PREFIX(WindowPos2fvMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5392(%rax), %r11
+       movq    5520(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5392(%rax), %r11
+       movq    5520(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5392(%rax), %r11
+       movq    5520(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5392(%rax), %r11
+       movq    5520(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos2fvMESA), .-GL_PREFIX(WindowPos2fvMESA)
@@ -25433,7 +26021,7 @@ GL_PREFIX(WindowPos2fvMESA):
 GL_PREFIX(WindowPos2iMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5400(%rax), %r11
+       movq    5528(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -25443,13 +26031,13 @@ GL_PREFIX(WindowPos2iMESA):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5400(%rax), %r11
+       movq    5528(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5400(%rax), %r11
+       movq    5528(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -25459,7 +26047,7 @@ GL_PREFIX(WindowPos2iMESA):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5400(%rax), %r11
+       movq    5528(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos2iMESA), .-GL_PREFIX(WindowPos2iMESA)
@@ -25470,25 +26058,25 @@ GL_PREFIX(WindowPos2iMESA):
 GL_PREFIX(WindowPos2ivMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5408(%rax), %r11
+       movq    5536(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5408(%rax), %r11
+       movq    5536(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5408(%rax), %r11
+       movq    5536(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5408(%rax), %r11
+       movq    5536(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos2ivMESA), .-GL_PREFIX(WindowPos2ivMESA)
@@ -25499,7 +26087,7 @@ GL_PREFIX(WindowPos2ivMESA):
 GL_PREFIX(WindowPos2sMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5416(%rax), %r11
+       movq    5544(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -25509,13 +26097,13 @@ GL_PREFIX(WindowPos2sMESA):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5416(%rax), %r11
+       movq    5544(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5416(%rax), %r11
+       movq    5544(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -25525,7 +26113,7 @@ GL_PREFIX(WindowPos2sMESA):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5416(%rax), %r11
+       movq    5544(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos2sMESA), .-GL_PREFIX(WindowPos2sMESA)
@@ -25536,25 +26124,25 @@ GL_PREFIX(WindowPos2sMESA):
 GL_PREFIX(WindowPos2svMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5424(%rax), %r11
+       movq    5552(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5424(%rax), %r11
+       movq    5552(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5424(%rax), %r11
+       movq    5552(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5424(%rax), %r11
+       movq    5552(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos2svMESA), .-GL_PREFIX(WindowPos2svMESA)
@@ -25565,7 +26153,7 @@ GL_PREFIX(WindowPos2svMESA):
 GL_PREFIX(WindowPos3dMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5432(%rax), %r11
+       movq    5560(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $24, %rsp
@@ -25577,13 +26165,13 @@ GL_PREFIX(WindowPos3dMESA):
        movq    8(%rsp), %xmm1
        movq    (%rsp), %xmm0
        addq    $24, %rsp
-       movq    5432(%rax), %r11
+       movq    5560(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5432(%rax), %r11
+       movq    5560(%rax), %r11
        jmp     *%r11
 1:
        subq    $24, %rsp
@@ -25595,7 +26183,7 @@ GL_PREFIX(WindowPos3dMESA):
        movq    8(%rsp), %xmm1
        movq    (%rsp), %xmm0
        addq    $24, %rsp
-       movq    5432(%rax), %r11
+       movq    5560(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos3dMESA), .-GL_PREFIX(WindowPos3dMESA)
@@ -25606,25 +26194,25 @@ GL_PREFIX(WindowPos3dMESA):
 GL_PREFIX(WindowPos3dvMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5440(%rax), %r11
+       movq    5568(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5440(%rax), %r11
+       movq    5568(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5440(%rax), %r11
+       movq    5568(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5440(%rax), %r11
+       movq    5568(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos3dvMESA), .-GL_PREFIX(WindowPos3dvMESA)
@@ -25635,7 +26223,7 @@ GL_PREFIX(WindowPos3dvMESA):
 GL_PREFIX(WindowPos3fMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5448(%rax), %r11
+       movq    5576(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $24, %rsp
@@ -25647,13 +26235,13 @@ GL_PREFIX(WindowPos3fMESA):
        movq    8(%rsp), %xmm1
        movq    (%rsp), %xmm0
        addq    $24, %rsp
-       movq    5448(%rax), %r11
+       movq    5576(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5448(%rax), %r11
+       movq    5576(%rax), %r11
        jmp     *%r11
 1:
        subq    $24, %rsp
@@ -25665,7 +26253,7 @@ GL_PREFIX(WindowPos3fMESA):
        movq    8(%rsp), %xmm1
        movq    (%rsp), %xmm0
        addq    $24, %rsp
-       movq    5448(%rax), %r11
+       movq    5576(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos3fMESA), .-GL_PREFIX(WindowPos3fMESA)
@@ -25676,25 +26264,25 @@ GL_PREFIX(WindowPos3fMESA):
 GL_PREFIX(WindowPos3fvMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5456(%rax), %r11
+       movq    5584(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5456(%rax), %r11
+       movq    5584(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5456(%rax), %r11
+       movq    5584(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5456(%rax), %r11
+       movq    5584(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos3fvMESA), .-GL_PREFIX(WindowPos3fvMESA)
@@ -25705,7 +26293,7 @@ GL_PREFIX(WindowPos3fvMESA):
 GL_PREFIX(WindowPos3iMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5464(%rax), %r11
+       movq    5592(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -25715,13 +26303,13 @@ GL_PREFIX(WindowPos3iMESA):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5464(%rax), %r11
+       movq    5592(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5464(%rax), %r11
+       movq    5592(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -25731,7 +26319,7 @@ GL_PREFIX(WindowPos3iMESA):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5464(%rax), %r11
+       movq    5592(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos3iMESA), .-GL_PREFIX(WindowPos3iMESA)
@@ -25742,25 +26330,25 @@ GL_PREFIX(WindowPos3iMESA):
 GL_PREFIX(WindowPos3ivMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5472(%rax), %r11
+       movq    5600(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5472(%rax), %r11
+       movq    5600(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5472(%rax), %r11
+       movq    5600(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5472(%rax), %r11
+       movq    5600(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos3ivMESA), .-GL_PREFIX(WindowPos3ivMESA)
@@ -25771,7 +26359,7 @@ GL_PREFIX(WindowPos3ivMESA):
 GL_PREFIX(WindowPos3sMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5480(%rax), %r11
+       movq    5608(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -25781,13 +26369,13 @@ GL_PREFIX(WindowPos3sMESA):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5480(%rax), %r11
+       movq    5608(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5480(%rax), %r11
+       movq    5608(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -25797,7 +26385,7 @@ GL_PREFIX(WindowPos3sMESA):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5480(%rax), %r11
+       movq    5608(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos3sMESA), .-GL_PREFIX(WindowPos3sMESA)
@@ -25808,25 +26396,25 @@ GL_PREFIX(WindowPos3sMESA):
 GL_PREFIX(WindowPos3svMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5488(%rax), %r11
+       movq    5616(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5488(%rax), %r11
+       movq    5616(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5488(%rax), %r11
+       movq    5616(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5488(%rax), %r11
+       movq    5616(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos3svMESA), .-GL_PREFIX(WindowPos3svMESA)
@@ -25837,7 +26425,7 @@ GL_PREFIX(WindowPos3svMESA):
 GL_PREFIX(WindowPos4dMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5496(%rax), %r11
+       movq    5624(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $40, %rsp
@@ -25851,13 +26439,13 @@ GL_PREFIX(WindowPos4dMESA):
        movq    8(%rsp), %xmm1
        movq    (%rsp), %xmm0
        addq    $40, %rsp
-       movq    5496(%rax), %r11
+       movq    5624(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5496(%rax), %r11
+       movq    5624(%rax), %r11
        jmp     *%r11
 1:
        subq    $40, %rsp
@@ -25871,7 +26459,7 @@ GL_PREFIX(WindowPos4dMESA):
        movq    8(%rsp), %xmm1
        movq    (%rsp), %xmm0
        addq    $40, %rsp
-       movq    5496(%rax), %r11
+       movq    5624(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos4dMESA), .-GL_PREFIX(WindowPos4dMESA)
@@ -25882,25 +26470,25 @@ GL_PREFIX(WindowPos4dMESA):
 GL_PREFIX(WindowPos4dvMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5504(%rax), %r11
+       movq    5632(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5504(%rax), %r11
+       movq    5632(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5504(%rax), %r11
+       movq    5632(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5504(%rax), %r11
+       movq    5632(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos4dvMESA), .-GL_PREFIX(WindowPos4dvMESA)
@@ -25911,7 +26499,7 @@ GL_PREFIX(WindowPos4dvMESA):
 GL_PREFIX(WindowPos4fMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5512(%rax), %r11
+       movq    5640(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $40, %rsp
@@ -25925,13 +26513,13 @@ GL_PREFIX(WindowPos4fMESA):
        movq    8(%rsp), %xmm1
        movq    (%rsp), %xmm0
        addq    $40, %rsp
-       movq    5512(%rax), %r11
+       movq    5640(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5512(%rax), %r11
+       movq    5640(%rax), %r11
        jmp     *%r11
 1:
        subq    $40, %rsp
@@ -25945,7 +26533,7 @@ GL_PREFIX(WindowPos4fMESA):
        movq    8(%rsp), %xmm1
        movq    (%rsp), %xmm0
        addq    $40, %rsp
-       movq    5512(%rax), %r11
+       movq    5640(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos4fMESA), .-GL_PREFIX(WindowPos4fMESA)
@@ -25956,25 +26544,25 @@ GL_PREFIX(WindowPos4fMESA):
 GL_PREFIX(WindowPos4fvMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5520(%rax), %r11
+       movq    5648(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5520(%rax), %r11
+       movq    5648(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5520(%rax), %r11
+       movq    5648(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5520(%rax), %r11
+       movq    5648(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos4fvMESA), .-GL_PREFIX(WindowPos4fvMESA)
@@ -25985,7 +26573,7 @@ GL_PREFIX(WindowPos4fvMESA):
 GL_PREFIX(WindowPos4iMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5528(%rax), %r11
+       movq    5656(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -25999,13 +26587,13 @@ GL_PREFIX(WindowPos4iMESA):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5528(%rax), %r11
+       movq    5656(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5528(%rax), %r11
+       movq    5656(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26019,7 +26607,7 @@ GL_PREFIX(WindowPos4iMESA):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5528(%rax), %r11
+       movq    5656(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos4iMESA), .-GL_PREFIX(WindowPos4iMESA)
@@ -26030,25 +26618,25 @@ GL_PREFIX(WindowPos4iMESA):
 GL_PREFIX(WindowPos4ivMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5536(%rax), %r11
+       movq    5664(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5536(%rax), %r11
+       movq    5664(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5536(%rax), %r11
+       movq    5664(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5536(%rax), %r11
+       movq    5664(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos4ivMESA), .-GL_PREFIX(WindowPos4ivMESA)
@@ -26059,7 +26647,7 @@ GL_PREFIX(WindowPos4ivMESA):
 GL_PREFIX(WindowPos4sMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5544(%rax), %r11
+       movq    5672(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26073,13 +26661,13 @@ GL_PREFIX(WindowPos4sMESA):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5544(%rax), %r11
+       movq    5672(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5544(%rax), %r11
+       movq    5672(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26093,7 +26681,7 @@ GL_PREFIX(WindowPos4sMESA):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5544(%rax), %r11
+       movq    5672(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos4sMESA), .-GL_PREFIX(WindowPos4sMESA)
@@ -26104,37 +26692,37 @@ GL_PREFIX(WindowPos4sMESA):
 GL_PREFIX(WindowPos4svMESA):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5552(%rax), %r11
+       movq    5680(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5552(%rax), %r11
+       movq    5680(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5552(%rax), %r11
+       movq    5680(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5552(%rax), %r11
+       movq    5680(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(WindowPos4svMESA), .-GL_PREFIX(WindowPos4svMESA)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_695)
-       .type   GL_PREFIX(_dispatch_stub_695), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_695))
-GL_PREFIX(_dispatch_stub_695):
+       .globl  GL_PREFIX(_dispatch_stub_711)
+       .type   GL_PREFIX(_dispatch_stub_711), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_711))
+GL_PREFIX(_dispatch_stub_711):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5560(%rax), %r11
+       movq    5688(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26148,13 +26736,13 @@ GL_PREFIX(_dispatch_stub_695):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5560(%rax), %r11
+       movq    5688(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5560(%rax), %r11
+       movq    5688(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26168,19 +26756,19 @@ GL_PREFIX(_dispatch_stub_695):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5560(%rax), %r11
+       movq    5688(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_695), .-GL_PREFIX(_dispatch_stub_695)
+       .size   GL_PREFIX(_dispatch_stub_711), .-GL_PREFIX(_dispatch_stub_711)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_696)
-       .type   GL_PREFIX(_dispatch_stub_696), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_696))
-GL_PREFIX(_dispatch_stub_696):
+       .globl  GL_PREFIX(_dispatch_stub_712)
+       .type   GL_PREFIX(_dispatch_stub_712), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_712))
+GL_PREFIX(_dispatch_stub_712):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5568(%rax), %r11
+       movq    5696(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26198,13 +26786,13 @@ GL_PREFIX(_dispatch_stub_696):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5568(%rax), %r11
+       movq    5696(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5568(%rax), %r11
+       movq    5696(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26222,19 +26810,19 @@ GL_PREFIX(_dispatch_stub_696):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5568(%rax), %r11
+       movq    5696(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_696), .-GL_PREFIX(_dispatch_stub_696)
+       .size   GL_PREFIX(_dispatch_stub_712), .-GL_PREFIX(_dispatch_stub_712)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_697)
-       .type   GL_PREFIX(_dispatch_stub_697), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_697))
-GL_PREFIX(_dispatch_stub_697):
+       .globl  GL_PREFIX(_dispatch_stub_713)
+       .type   GL_PREFIX(_dispatch_stub_713), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_713))
+GL_PREFIX(_dispatch_stub_713):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5576(%rax), %r11
+       movq    5704(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26244,13 +26832,13 @@ GL_PREFIX(_dispatch_stub_697):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5576(%rax), %r11
+       movq    5704(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5576(%rax), %r11
+       movq    5704(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26260,49 +26848,49 @@ GL_PREFIX(_dispatch_stub_697):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5576(%rax), %r11
+       movq    5704(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_697), .-GL_PREFIX(_dispatch_stub_697)
+       .size   GL_PREFIX(_dispatch_stub_713), .-GL_PREFIX(_dispatch_stub_713)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_698)
-       .type   GL_PREFIX(_dispatch_stub_698), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_698))
-GL_PREFIX(_dispatch_stub_698):
+       .globl  GL_PREFIX(_dispatch_stub_714)
+       .type   GL_PREFIX(_dispatch_stub_714), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_714))
+GL_PREFIX(_dispatch_stub_714):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5584(%rax), %r11
+       movq    5712(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5584(%rax), %r11
+       movq    5712(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5584(%rax), %r11
+       movq    5712(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5584(%rax), %r11
+       movq    5712(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_698), .-GL_PREFIX(_dispatch_stub_698)
+       .size   GL_PREFIX(_dispatch_stub_714), .-GL_PREFIX(_dispatch_stub_714)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_699)
-       .type   GL_PREFIX(_dispatch_stub_699), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_699))
-GL_PREFIX(_dispatch_stub_699):
+       .globl  GL_PREFIX(_dispatch_stub_715)
+       .type   GL_PREFIX(_dispatch_stub_715), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_715))
+GL_PREFIX(_dispatch_stub_715):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5592(%rax), %r11
+       movq    5720(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26312,13 +26900,13 @@ GL_PREFIX(_dispatch_stub_699):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5592(%rax), %r11
+       movq    5720(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5592(%rax), %r11
+       movq    5720(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26328,19 +26916,19 @@ GL_PREFIX(_dispatch_stub_699):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5592(%rax), %r11
+       movq    5720(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_699), .-GL_PREFIX(_dispatch_stub_699)
+       .size   GL_PREFIX(_dispatch_stub_715), .-GL_PREFIX(_dispatch_stub_715)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_700)
-       .type   GL_PREFIX(_dispatch_stub_700), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_700))
-GL_PREFIX(_dispatch_stub_700):
+       .globl  GL_PREFIX(_dispatch_stub_716)
+       .type   GL_PREFIX(_dispatch_stub_716), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_716))
+GL_PREFIX(_dispatch_stub_716):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5600(%rax), %r11
+       movq    5728(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26350,13 +26938,13 @@ GL_PREFIX(_dispatch_stub_700):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5600(%rax), %r11
+       movq    5728(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5600(%rax), %r11
+       movq    5728(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26366,49 +26954,49 @@ GL_PREFIX(_dispatch_stub_700):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5600(%rax), %r11
+       movq    5728(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_700), .-GL_PREFIX(_dispatch_stub_700)
+       .size   GL_PREFIX(_dispatch_stub_716), .-GL_PREFIX(_dispatch_stub_716)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_701)
-       .type   GL_PREFIX(_dispatch_stub_701), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_701))
-GL_PREFIX(_dispatch_stub_701):
+       .globl  GL_PREFIX(_dispatch_stub_717)
+       .type   GL_PREFIX(_dispatch_stub_717), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_717))
+GL_PREFIX(_dispatch_stub_717):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5608(%rax), %r11
+       movq    5736(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5608(%rax), %r11
+       movq    5736(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5608(%rax), %r11
+       movq    5736(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5608(%rax), %r11
+       movq    5736(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_701), .-GL_PREFIX(_dispatch_stub_701)
+       .size   GL_PREFIX(_dispatch_stub_717), .-GL_PREFIX(_dispatch_stub_717)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_702)
-       .type   GL_PREFIX(_dispatch_stub_702), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_702))
-GL_PREFIX(_dispatch_stub_702):
+       .globl  GL_PREFIX(_dispatch_stub_718)
+       .type   GL_PREFIX(_dispatch_stub_718), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_718))
+GL_PREFIX(_dispatch_stub_718):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5616(%rax), %r11
+       movq    5744(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26418,13 +27006,13 @@ GL_PREFIX(_dispatch_stub_702):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5616(%rax), %r11
+       movq    5744(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5616(%rax), %r11
+       movq    5744(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26434,40 +27022,40 @@ GL_PREFIX(_dispatch_stub_702):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5616(%rax), %r11
+       movq    5744(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_702), .-GL_PREFIX(_dispatch_stub_702)
+       .size   GL_PREFIX(_dispatch_stub_718), .-GL_PREFIX(_dispatch_stub_718)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_703)
-       .type   GL_PREFIX(_dispatch_stub_703), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_703))
-GL_PREFIX(_dispatch_stub_703):
+       .globl  GL_PREFIX(_dispatch_stub_719)
+       .type   GL_PREFIX(_dispatch_stub_719), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_719))
+GL_PREFIX(_dispatch_stub_719):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5624(%rax), %r11
+       movq    5752(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5624(%rax), %r11
+       movq    5752(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5624(%rax), %r11
+       movq    5752(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5624(%rax), %r11
+       movq    5752(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_703), .-GL_PREFIX(_dispatch_stub_703)
+       .size   GL_PREFIX(_dispatch_stub_719), .-GL_PREFIX(_dispatch_stub_719)
 
        .p2align        4,,15
        .globl  GL_PREFIX(AreProgramsResidentNV)
@@ -26475,7 +27063,7 @@ GL_PREFIX(_dispatch_stub_703):
 GL_PREFIX(AreProgramsResidentNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5632(%rax), %r11
+       movq    5760(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26485,13 +27073,13 @@ GL_PREFIX(AreProgramsResidentNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5632(%rax), %r11
+       movq    5760(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5632(%rax), %r11
+       movq    5760(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26501,7 +27089,7 @@ GL_PREFIX(AreProgramsResidentNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5632(%rax), %r11
+       movq    5760(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(AreProgramsResidentNV), .-GL_PREFIX(AreProgramsResidentNV)
@@ -26512,7 +27100,7 @@ GL_PREFIX(AreProgramsResidentNV):
 GL_PREFIX(BindProgramNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5640(%rax), %r11
+       movq    5768(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26522,13 +27110,13 @@ GL_PREFIX(BindProgramNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5640(%rax), %r11
+       movq    5768(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5640(%rax), %r11
+       movq    5768(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26538,7 +27126,7 @@ GL_PREFIX(BindProgramNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5640(%rax), %r11
+       movq    5768(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BindProgramNV), .-GL_PREFIX(BindProgramNV)
@@ -26549,7 +27137,7 @@ GL_PREFIX(BindProgramNV):
 GL_PREFIX(DeleteProgramsNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5648(%rax), %r11
+       movq    5776(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26559,13 +27147,13 @@ GL_PREFIX(DeleteProgramsNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5648(%rax), %r11
+       movq    5776(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5648(%rax), %r11
+       movq    5776(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26575,7 +27163,7 @@ GL_PREFIX(DeleteProgramsNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5648(%rax), %r11
+       movq    5776(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(DeleteProgramsNV), .-GL_PREFIX(DeleteProgramsNV)
@@ -26586,7 +27174,7 @@ GL_PREFIX(DeleteProgramsNV):
 GL_PREFIX(ExecuteProgramNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5656(%rax), %r11
+       movq    5784(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26596,13 +27184,13 @@ GL_PREFIX(ExecuteProgramNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5656(%rax), %r11
+       movq    5784(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5656(%rax), %r11
+       movq    5784(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26612,7 +27200,7 @@ GL_PREFIX(ExecuteProgramNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5656(%rax), %r11
+       movq    5784(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ExecuteProgramNV), .-GL_PREFIX(ExecuteProgramNV)
@@ -26623,7 +27211,7 @@ GL_PREFIX(ExecuteProgramNV):
 GL_PREFIX(GenProgramsNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5664(%rax), %r11
+       movq    5792(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26633,13 +27221,13 @@ GL_PREFIX(GenProgramsNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5664(%rax), %r11
+       movq    5792(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5664(%rax), %r11
+       movq    5792(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26649,7 +27237,7 @@ GL_PREFIX(GenProgramsNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5664(%rax), %r11
+       movq    5792(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GenProgramsNV), .-GL_PREFIX(GenProgramsNV)
@@ -26660,7 +27248,7 @@ GL_PREFIX(GenProgramsNV):
 GL_PREFIX(GetProgramParameterdvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5672(%rax), %r11
+       movq    5800(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26674,13 +27262,13 @@ GL_PREFIX(GetProgramParameterdvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5672(%rax), %r11
+       movq    5800(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5672(%rax), %r11
+       movq    5800(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26694,7 +27282,7 @@ GL_PREFIX(GetProgramParameterdvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5672(%rax), %r11
+       movq    5800(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetProgramParameterdvNV), .-GL_PREFIX(GetProgramParameterdvNV)
@@ -26705,7 +27293,7 @@ GL_PREFIX(GetProgramParameterdvNV):
 GL_PREFIX(GetProgramParameterfvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5680(%rax), %r11
+       movq    5808(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26719,13 +27307,13 @@ GL_PREFIX(GetProgramParameterfvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5680(%rax), %r11
+       movq    5808(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5680(%rax), %r11
+       movq    5808(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26739,7 +27327,7 @@ GL_PREFIX(GetProgramParameterfvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5680(%rax), %r11
+       movq    5808(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetProgramParameterfvNV), .-GL_PREFIX(GetProgramParameterfvNV)
@@ -26750,7 +27338,7 @@ GL_PREFIX(GetProgramParameterfvNV):
 GL_PREFIX(GetProgramStringNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5688(%rax), %r11
+       movq    5816(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26760,13 +27348,13 @@ GL_PREFIX(GetProgramStringNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5688(%rax), %r11
+       movq    5816(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5688(%rax), %r11
+       movq    5816(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26776,7 +27364,7 @@ GL_PREFIX(GetProgramStringNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5688(%rax), %r11
+       movq    5816(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetProgramStringNV), .-GL_PREFIX(GetProgramStringNV)
@@ -26787,7 +27375,7 @@ GL_PREFIX(GetProgramStringNV):
 GL_PREFIX(GetProgramivNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5696(%rax), %r11
+       movq    5824(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26797,13 +27385,13 @@ GL_PREFIX(GetProgramivNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5696(%rax), %r11
+       movq    5824(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5696(%rax), %r11
+       movq    5824(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26813,7 +27401,7 @@ GL_PREFIX(GetProgramivNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5696(%rax), %r11
+       movq    5824(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetProgramivNV), .-GL_PREFIX(GetProgramivNV)
@@ -26824,7 +27412,7 @@ GL_PREFIX(GetProgramivNV):
 GL_PREFIX(GetTrackMatrixivNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5704(%rax), %r11
+       movq    5832(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26838,13 +27426,13 @@ GL_PREFIX(GetTrackMatrixivNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5704(%rax), %r11
+       movq    5832(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5704(%rax), %r11
+       movq    5832(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26858,7 +27446,7 @@ GL_PREFIX(GetTrackMatrixivNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5704(%rax), %r11
+       movq    5832(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetTrackMatrixivNV), .-GL_PREFIX(GetTrackMatrixivNV)
@@ -26869,7 +27457,7 @@ GL_PREFIX(GetTrackMatrixivNV):
 GL_PREFIX(GetVertexAttribPointervNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5712(%rax), %r11
+       movq    5840(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26879,13 +27467,13 @@ GL_PREFIX(GetVertexAttribPointervNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5712(%rax), %r11
+       movq    5840(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5712(%rax), %r11
+       movq    5840(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26895,7 +27483,7 @@ GL_PREFIX(GetVertexAttribPointervNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5712(%rax), %r11
+       movq    5840(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetVertexAttribPointervNV), .-GL_PREFIX(GetVertexAttribPointervNV)
@@ -26906,7 +27494,7 @@ GL_PREFIX(GetVertexAttribPointervNV):
 GL_PREFIX(GetVertexAttribdvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5720(%rax), %r11
+       movq    5848(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26916,13 +27504,13 @@ GL_PREFIX(GetVertexAttribdvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5720(%rax), %r11
+       movq    5848(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5720(%rax), %r11
+       movq    5848(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26932,7 +27520,7 @@ GL_PREFIX(GetVertexAttribdvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5720(%rax), %r11
+       movq    5848(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetVertexAttribdvNV), .-GL_PREFIX(GetVertexAttribdvNV)
@@ -26943,7 +27531,7 @@ GL_PREFIX(GetVertexAttribdvNV):
 GL_PREFIX(GetVertexAttribfvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5728(%rax), %r11
+       movq    5856(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26953,13 +27541,13 @@ GL_PREFIX(GetVertexAttribfvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5728(%rax), %r11
+       movq    5856(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5728(%rax), %r11
+       movq    5856(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -26969,7 +27557,7 @@ GL_PREFIX(GetVertexAttribfvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5728(%rax), %r11
+       movq    5856(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetVertexAttribfvNV), .-GL_PREFIX(GetVertexAttribfvNV)
@@ -26980,7 +27568,7 @@ GL_PREFIX(GetVertexAttribfvNV):
 GL_PREFIX(GetVertexAttribivNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5736(%rax), %r11
+       movq    5864(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -26990,13 +27578,13 @@ GL_PREFIX(GetVertexAttribivNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5736(%rax), %r11
+       movq    5864(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5736(%rax), %r11
+       movq    5864(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27006,7 +27594,7 @@ GL_PREFIX(GetVertexAttribivNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5736(%rax), %r11
+       movq    5864(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetVertexAttribivNV), .-GL_PREFIX(GetVertexAttribivNV)
@@ -27017,25 +27605,25 @@ GL_PREFIX(GetVertexAttribivNV):
 GL_PREFIX(IsProgramNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5744(%rax), %r11
+       movq    5872(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    5744(%rax), %r11
+       movq    5872(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5744(%rax), %r11
+       movq    5872(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    5744(%rax), %r11
+       movq    5872(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(IsProgramNV), .-GL_PREFIX(IsProgramNV)
@@ -27046,7 +27634,7 @@ GL_PREFIX(IsProgramNV):
 GL_PREFIX(LoadProgramNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5752(%rax), %r11
+       movq    5880(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27060,13 +27648,13 @@ GL_PREFIX(LoadProgramNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5752(%rax), %r11
+       movq    5880(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5752(%rax), %r11
+       movq    5880(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27080,7 +27668,7 @@ GL_PREFIX(LoadProgramNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5752(%rax), %r11
+       movq    5880(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(LoadProgramNV), .-GL_PREFIX(LoadProgramNV)
@@ -27091,7 +27679,7 @@ GL_PREFIX(LoadProgramNV):
 GL_PREFIX(ProgramParameters4dvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5760(%rax), %r11
+       movq    5888(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27105,13 +27693,13 @@ GL_PREFIX(ProgramParameters4dvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5760(%rax), %r11
+       movq    5888(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5760(%rax), %r11
+       movq    5888(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27125,7 +27713,7 @@ GL_PREFIX(ProgramParameters4dvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5760(%rax), %r11
+       movq    5888(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ProgramParameters4dvNV), .-GL_PREFIX(ProgramParameters4dvNV)
@@ -27136,7 +27724,7 @@ GL_PREFIX(ProgramParameters4dvNV):
 GL_PREFIX(ProgramParameters4fvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5768(%rax), %r11
+       movq    5896(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27150,13 +27738,13 @@ GL_PREFIX(ProgramParameters4fvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5768(%rax), %r11
+       movq    5896(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5768(%rax), %r11
+       movq    5896(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27170,7 +27758,7 @@ GL_PREFIX(ProgramParameters4fvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5768(%rax), %r11
+       movq    5896(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ProgramParameters4fvNV), .-GL_PREFIX(ProgramParameters4fvNV)
@@ -27181,7 +27769,7 @@ GL_PREFIX(ProgramParameters4fvNV):
 GL_PREFIX(RequestResidentProgramsNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5776(%rax), %r11
+       movq    5904(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27191,13 +27779,13 @@ GL_PREFIX(RequestResidentProgramsNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5776(%rax), %r11
+       movq    5904(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5776(%rax), %r11
+       movq    5904(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27207,7 +27795,7 @@ GL_PREFIX(RequestResidentProgramsNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5776(%rax), %r11
+       movq    5904(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(RequestResidentProgramsNV), .-GL_PREFIX(RequestResidentProgramsNV)
@@ -27218,7 +27806,7 @@ GL_PREFIX(RequestResidentProgramsNV):
 GL_PREFIX(TrackMatrixNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5784(%rax), %r11
+       movq    5912(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27232,13 +27820,13 @@ GL_PREFIX(TrackMatrixNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5784(%rax), %r11
+       movq    5912(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5784(%rax), %r11
+       movq    5912(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27252,7 +27840,7 @@ GL_PREFIX(TrackMatrixNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5784(%rax), %r11
+       movq    5912(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(TrackMatrixNV), .-GL_PREFIX(TrackMatrixNV)
@@ -27263,7 +27851,7 @@ GL_PREFIX(TrackMatrixNV):
 GL_PREFIX(VertexAttrib1dNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5792(%rax), %r11
+       movq    5920(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $24, %rsp
@@ -27273,13 +27861,13 @@ GL_PREFIX(VertexAttrib1dNV):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $24, %rsp
-       movq    5792(%rax), %r11
+       movq    5920(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5792(%rax), %r11
+       movq    5920(%rax), %r11
        jmp     *%r11
 1:
        subq    $24, %rsp
@@ -27289,7 +27877,7 @@ GL_PREFIX(VertexAttrib1dNV):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $24, %rsp
-       movq    5792(%rax), %r11
+       movq    5920(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib1dNV), .-GL_PREFIX(VertexAttrib1dNV)
@@ -27300,7 +27888,7 @@ GL_PREFIX(VertexAttrib1dNV):
 GL_PREFIX(VertexAttrib1dvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5800(%rax), %r11
+       movq    5928(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27310,13 +27898,13 @@ GL_PREFIX(VertexAttrib1dvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5800(%rax), %r11
+       movq    5928(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5800(%rax), %r11
+       movq    5928(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27326,7 +27914,7 @@ GL_PREFIX(VertexAttrib1dvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5800(%rax), %r11
+       movq    5928(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib1dvNV), .-GL_PREFIX(VertexAttrib1dvNV)
@@ -27337,7 +27925,7 @@ GL_PREFIX(VertexAttrib1dvNV):
 GL_PREFIX(VertexAttrib1fNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5808(%rax), %r11
+       movq    5936(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $24, %rsp
@@ -27347,13 +27935,13 @@ GL_PREFIX(VertexAttrib1fNV):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $24, %rsp
-       movq    5808(%rax), %r11
+       movq    5936(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5808(%rax), %r11
+       movq    5936(%rax), %r11
        jmp     *%r11
 1:
        subq    $24, %rsp
@@ -27363,7 +27951,7 @@ GL_PREFIX(VertexAttrib1fNV):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $24, %rsp
-       movq    5808(%rax), %r11
+       movq    5936(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib1fNV), .-GL_PREFIX(VertexAttrib1fNV)
@@ -27374,7 +27962,7 @@ GL_PREFIX(VertexAttrib1fNV):
 GL_PREFIX(VertexAttrib1fvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5816(%rax), %r11
+       movq    5944(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27384,13 +27972,13 @@ GL_PREFIX(VertexAttrib1fvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5816(%rax), %r11
+       movq    5944(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5816(%rax), %r11
+       movq    5944(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27400,7 +27988,7 @@ GL_PREFIX(VertexAttrib1fvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5816(%rax), %r11
+       movq    5944(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib1fvNV), .-GL_PREFIX(VertexAttrib1fvNV)
@@ -27411,7 +27999,7 @@ GL_PREFIX(VertexAttrib1fvNV):
 GL_PREFIX(VertexAttrib1sNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5824(%rax), %r11
+       movq    5952(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27421,13 +28009,13 @@ GL_PREFIX(VertexAttrib1sNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5824(%rax), %r11
+       movq    5952(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5824(%rax), %r11
+       movq    5952(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27437,7 +28025,7 @@ GL_PREFIX(VertexAttrib1sNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5824(%rax), %r11
+       movq    5952(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib1sNV), .-GL_PREFIX(VertexAttrib1sNV)
@@ -27448,7 +28036,7 @@ GL_PREFIX(VertexAttrib1sNV):
 GL_PREFIX(VertexAttrib1svNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5832(%rax), %r11
+       movq    5960(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27458,13 +28046,13 @@ GL_PREFIX(VertexAttrib1svNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5832(%rax), %r11
+       movq    5960(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5832(%rax), %r11
+       movq    5960(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27474,7 +28062,7 @@ GL_PREFIX(VertexAttrib1svNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5832(%rax), %r11
+       movq    5960(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib1svNV), .-GL_PREFIX(VertexAttrib1svNV)
@@ -27485,7 +28073,7 @@ GL_PREFIX(VertexAttrib1svNV):
 GL_PREFIX(VertexAttrib2dNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5840(%rax), %r11
+       movq    5968(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $24, %rsp
@@ -27497,13 +28085,13 @@ GL_PREFIX(VertexAttrib2dNV):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $24, %rsp
-       movq    5840(%rax), %r11
+       movq    5968(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5840(%rax), %r11
+       movq    5968(%rax), %r11
        jmp     *%r11
 1:
        subq    $24, %rsp
@@ -27515,7 +28103,7 @@ GL_PREFIX(VertexAttrib2dNV):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $24, %rsp
-       movq    5840(%rax), %r11
+       movq    5968(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib2dNV), .-GL_PREFIX(VertexAttrib2dNV)
@@ -27526,7 +28114,7 @@ GL_PREFIX(VertexAttrib2dNV):
 GL_PREFIX(VertexAttrib2dvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5848(%rax), %r11
+       movq    5976(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27536,13 +28124,13 @@ GL_PREFIX(VertexAttrib2dvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5848(%rax), %r11
+       movq    5976(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5848(%rax), %r11
+       movq    5976(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27552,7 +28140,7 @@ GL_PREFIX(VertexAttrib2dvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5848(%rax), %r11
+       movq    5976(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib2dvNV), .-GL_PREFIX(VertexAttrib2dvNV)
@@ -27563,7 +28151,7 @@ GL_PREFIX(VertexAttrib2dvNV):
 GL_PREFIX(VertexAttrib2fNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5856(%rax), %r11
+       movq    5984(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $24, %rsp
@@ -27575,13 +28163,13 @@ GL_PREFIX(VertexAttrib2fNV):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $24, %rsp
-       movq    5856(%rax), %r11
+       movq    5984(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5856(%rax), %r11
+       movq    5984(%rax), %r11
        jmp     *%r11
 1:
        subq    $24, %rsp
@@ -27593,7 +28181,7 @@ GL_PREFIX(VertexAttrib2fNV):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $24, %rsp
-       movq    5856(%rax), %r11
+       movq    5984(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib2fNV), .-GL_PREFIX(VertexAttrib2fNV)
@@ -27604,7 +28192,7 @@ GL_PREFIX(VertexAttrib2fNV):
 GL_PREFIX(VertexAttrib2fvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5864(%rax), %r11
+       movq    5992(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27614,13 +28202,13 @@ GL_PREFIX(VertexAttrib2fvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5864(%rax), %r11
+       movq    5992(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5864(%rax), %r11
+       movq    5992(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27630,7 +28218,7 @@ GL_PREFIX(VertexAttrib2fvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5864(%rax), %r11
+       movq    5992(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib2fvNV), .-GL_PREFIX(VertexAttrib2fvNV)
@@ -27641,7 +28229,7 @@ GL_PREFIX(VertexAttrib2fvNV):
 GL_PREFIX(VertexAttrib2sNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5872(%rax), %r11
+       movq    6000(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27651,13 +28239,13 @@ GL_PREFIX(VertexAttrib2sNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5872(%rax), %r11
+       movq    6000(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5872(%rax), %r11
+       movq    6000(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27667,7 +28255,7 @@ GL_PREFIX(VertexAttrib2sNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5872(%rax), %r11
+       movq    6000(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib2sNV), .-GL_PREFIX(VertexAttrib2sNV)
@@ -27678,7 +28266,7 @@ GL_PREFIX(VertexAttrib2sNV):
 GL_PREFIX(VertexAttrib2svNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5880(%rax), %r11
+       movq    6008(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27688,13 +28276,13 @@ GL_PREFIX(VertexAttrib2svNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5880(%rax), %r11
+       movq    6008(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5880(%rax), %r11
+       movq    6008(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27704,7 +28292,7 @@ GL_PREFIX(VertexAttrib2svNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5880(%rax), %r11
+       movq    6008(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib2svNV), .-GL_PREFIX(VertexAttrib2svNV)
@@ -27715,7 +28303,7 @@ GL_PREFIX(VertexAttrib2svNV):
 GL_PREFIX(VertexAttrib3dNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5888(%rax), %r11
+       movq    6016(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $40, %rsp
@@ -27729,13 +28317,13 @@ GL_PREFIX(VertexAttrib3dNV):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $40, %rsp
-       movq    5888(%rax), %r11
+       movq    6016(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5888(%rax), %r11
+       movq    6016(%rax), %r11
        jmp     *%r11
 1:
        subq    $40, %rsp
@@ -27749,7 +28337,7 @@ GL_PREFIX(VertexAttrib3dNV):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $40, %rsp
-       movq    5888(%rax), %r11
+       movq    6016(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib3dNV), .-GL_PREFIX(VertexAttrib3dNV)
@@ -27760,7 +28348,7 @@ GL_PREFIX(VertexAttrib3dNV):
 GL_PREFIX(VertexAttrib3dvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5896(%rax), %r11
+       movq    6024(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27770,13 +28358,13 @@ GL_PREFIX(VertexAttrib3dvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5896(%rax), %r11
+       movq    6024(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5896(%rax), %r11
+       movq    6024(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27786,7 +28374,7 @@ GL_PREFIX(VertexAttrib3dvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5896(%rax), %r11
+       movq    6024(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib3dvNV), .-GL_PREFIX(VertexAttrib3dvNV)
@@ -27797,7 +28385,7 @@ GL_PREFIX(VertexAttrib3dvNV):
 GL_PREFIX(VertexAttrib3fNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5904(%rax), %r11
+       movq    6032(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $40, %rsp
@@ -27811,13 +28399,13 @@ GL_PREFIX(VertexAttrib3fNV):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $40, %rsp
-       movq    5904(%rax), %r11
+       movq    6032(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5904(%rax), %r11
+       movq    6032(%rax), %r11
        jmp     *%r11
 1:
        subq    $40, %rsp
@@ -27831,7 +28419,7 @@ GL_PREFIX(VertexAttrib3fNV):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $40, %rsp
-       movq    5904(%rax), %r11
+       movq    6032(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib3fNV), .-GL_PREFIX(VertexAttrib3fNV)
@@ -27842,7 +28430,7 @@ GL_PREFIX(VertexAttrib3fNV):
 GL_PREFIX(VertexAttrib3fvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5912(%rax), %r11
+       movq    6040(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27852,13 +28440,13 @@ GL_PREFIX(VertexAttrib3fvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5912(%rax), %r11
+       movq    6040(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5912(%rax), %r11
+       movq    6040(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27868,7 +28456,7 @@ GL_PREFIX(VertexAttrib3fvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5912(%rax), %r11
+       movq    6040(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib3fvNV), .-GL_PREFIX(VertexAttrib3fvNV)
@@ -27879,7 +28467,7 @@ GL_PREFIX(VertexAttrib3fvNV):
 GL_PREFIX(VertexAttrib3sNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5920(%rax), %r11
+       movq    6048(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27893,13 +28481,13 @@ GL_PREFIX(VertexAttrib3sNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5920(%rax), %r11
+       movq    6048(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5920(%rax), %r11
+       movq    6048(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27913,7 +28501,7 @@ GL_PREFIX(VertexAttrib3sNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5920(%rax), %r11
+       movq    6048(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib3sNV), .-GL_PREFIX(VertexAttrib3sNV)
@@ -27924,7 +28512,7 @@ GL_PREFIX(VertexAttrib3sNV):
 GL_PREFIX(VertexAttrib3svNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5928(%rax), %r11
+       movq    6056(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -27934,13 +28522,13 @@ GL_PREFIX(VertexAttrib3svNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5928(%rax), %r11
+       movq    6056(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5928(%rax), %r11
+       movq    6056(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -27950,7 +28538,7 @@ GL_PREFIX(VertexAttrib3svNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5928(%rax), %r11
+       movq    6056(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib3svNV), .-GL_PREFIX(VertexAttrib3svNV)
@@ -27961,7 +28549,7 @@ GL_PREFIX(VertexAttrib3svNV):
 GL_PREFIX(VertexAttrib4dNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5936(%rax), %r11
+       movq    6064(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $40, %rsp
@@ -27977,13 +28565,13 @@ GL_PREFIX(VertexAttrib4dNV):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $40, %rsp
-       movq    5936(%rax), %r11
+       movq    6064(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5936(%rax), %r11
+       movq    6064(%rax), %r11
        jmp     *%r11
 1:
        subq    $40, %rsp
@@ -27999,7 +28587,7 @@ GL_PREFIX(VertexAttrib4dNV):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $40, %rsp
-       movq    5936(%rax), %r11
+       movq    6064(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib4dNV), .-GL_PREFIX(VertexAttrib4dNV)
@@ -28010,7 +28598,7 @@ GL_PREFIX(VertexAttrib4dNV):
 GL_PREFIX(VertexAttrib4dvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5944(%rax), %r11
+       movq    6072(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28020,13 +28608,13 @@ GL_PREFIX(VertexAttrib4dvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5944(%rax), %r11
+       movq    6072(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5944(%rax), %r11
+       movq    6072(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28036,7 +28624,7 @@ GL_PREFIX(VertexAttrib4dvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5944(%rax), %r11
+       movq    6072(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib4dvNV), .-GL_PREFIX(VertexAttrib4dvNV)
@@ -28047,7 +28635,7 @@ GL_PREFIX(VertexAttrib4dvNV):
 GL_PREFIX(VertexAttrib4fNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5952(%rax), %r11
+       movq    6080(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $40, %rsp
@@ -28063,13 +28651,13 @@ GL_PREFIX(VertexAttrib4fNV):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $40, %rsp
-       movq    5952(%rax), %r11
+       movq    6080(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5952(%rax), %r11
+       movq    6080(%rax), %r11
        jmp     *%r11
 1:
        subq    $40, %rsp
@@ -28085,7 +28673,7 @@ GL_PREFIX(VertexAttrib4fNV):
        movq    8(%rsp), %xmm0
        movq    (%rsp), %rdi
        addq    $40, %rsp
-       movq    5952(%rax), %r11
+       movq    6080(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib4fNV), .-GL_PREFIX(VertexAttrib4fNV)
@@ -28096,7 +28684,7 @@ GL_PREFIX(VertexAttrib4fNV):
 GL_PREFIX(VertexAttrib4fvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5960(%rax), %r11
+       movq    6088(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28106,13 +28694,13 @@ GL_PREFIX(VertexAttrib4fvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5960(%rax), %r11
+       movq    6088(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5960(%rax), %r11
+       movq    6088(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28122,7 +28710,7 @@ GL_PREFIX(VertexAttrib4fvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5960(%rax), %r11
+       movq    6088(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib4fvNV), .-GL_PREFIX(VertexAttrib4fvNV)
@@ -28133,7 +28721,7 @@ GL_PREFIX(VertexAttrib4fvNV):
 GL_PREFIX(VertexAttrib4sNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5968(%rax), %r11
+       movq    6096(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28147,13 +28735,13 @@ GL_PREFIX(VertexAttrib4sNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5968(%rax), %r11
+       movq    6096(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5968(%rax), %r11
+       movq    6096(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28167,7 +28755,7 @@ GL_PREFIX(VertexAttrib4sNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5968(%rax), %r11
+       movq    6096(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib4sNV), .-GL_PREFIX(VertexAttrib4sNV)
@@ -28178,7 +28766,7 @@ GL_PREFIX(VertexAttrib4sNV):
 GL_PREFIX(VertexAttrib4svNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5976(%rax), %r11
+       movq    6104(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28188,13 +28776,13 @@ GL_PREFIX(VertexAttrib4svNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5976(%rax), %r11
+       movq    6104(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5976(%rax), %r11
+       movq    6104(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28204,7 +28792,7 @@ GL_PREFIX(VertexAttrib4svNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5976(%rax), %r11
+       movq    6104(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib4svNV), .-GL_PREFIX(VertexAttrib4svNV)
@@ -28215,7 +28803,7 @@ GL_PREFIX(VertexAttrib4svNV):
 GL_PREFIX(VertexAttrib4ubNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5984(%rax), %r11
+       movq    6112(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28229,13 +28817,13 @@ GL_PREFIX(VertexAttrib4ubNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5984(%rax), %r11
+       movq    6112(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5984(%rax), %r11
+       movq    6112(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28249,7 +28837,7 @@ GL_PREFIX(VertexAttrib4ubNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    5984(%rax), %r11
+       movq    6112(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib4ubNV), .-GL_PREFIX(VertexAttrib4ubNV)
@@ -28260,7 +28848,7 @@ GL_PREFIX(VertexAttrib4ubNV):
 GL_PREFIX(VertexAttrib4ubvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    5992(%rax), %r11
+       movq    6120(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28270,13 +28858,13 @@ GL_PREFIX(VertexAttrib4ubvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5992(%rax), %r11
+       movq    6120(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    5992(%rax), %r11
+       movq    6120(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28286,7 +28874,7 @@ GL_PREFIX(VertexAttrib4ubvNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    5992(%rax), %r11
+       movq    6120(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttrib4ubvNV), .-GL_PREFIX(VertexAttrib4ubvNV)
@@ -28297,7 +28885,7 @@ GL_PREFIX(VertexAttrib4ubvNV):
 GL_PREFIX(VertexAttribPointerNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6000(%rax), %r11
+       movq    6128(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28311,13 +28899,13 @@ GL_PREFIX(VertexAttribPointerNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6000(%rax), %r11
+       movq    6128(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6000(%rax), %r11
+       movq    6128(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28331,7 +28919,7 @@ GL_PREFIX(VertexAttribPointerNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6000(%rax), %r11
+       movq    6128(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribPointerNV), .-GL_PREFIX(VertexAttribPointerNV)
@@ -28342,7 +28930,7 @@ GL_PREFIX(VertexAttribPointerNV):
 GL_PREFIX(VertexAttribs1dvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6008(%rax), %r11
+       movq    6136(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28352,13 +28940,13 @@ GL_PREFIX(VertexAttribs1dvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6008(%rax), %r11
+       movq    6136(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6008(%rax), %r11
+       movq    6136(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28368,7 +28956,7 @@ GL_PREFIX(VertexAttribs1dvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6008(%rax), %r11
+       movq    6136(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribs1dvNV), .-GL_PREFIX(VertexAttribs1dvNV)
@@ -28379,7 +28967,7 @@ GL_PREFIX(VertexAttribs1dvNV):
 GL_PREFIX(VertexAttribs1fvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6016(%rax), %r11
+       movq    6144(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28389,13 +28977,13 @@ GL_PREFIX(VertexAttribs1fvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6016(%rax), %r11
+       movq    6144(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6016(%rax), %r11
+       movq    6144(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28405,7 +28993,7 @@ GL_PREFIX(VertexAttribs1fvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6016(%rax), %r11
+       movq    6144(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribs1fvNV), .-GL_PREFIX(VertexAttribs1fvNV)
@@ -28416,7 +29004,7 @@ GL_PREFIX(VertexAttribs1fvNV):
 GL_PREFIX(VertexAttribs1svNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6024(%rax), %r11
+       movq    6152(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28426,13 +29014,13 @@ GL_PREFIX(VertexAttribs1svNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6024(%rax), %r11
+       movq    6152(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6024(%rax), %r11
+       movq    6152(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28442,7 +29030,7 @@ GL_PREFIX(VertexAttribs1svNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6024(%rax), %r11
+       movq    6152(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribs1svNV), .-GL_PREFIX(VertexAttribs1svNV)
@@ -28453,7 +29041,7 @@ GL_PREFIX(VertexAttribs1svNV):
 GL_PREFIX(VertexAttribs2dvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6032(%rax), %r11
+       movq    6160(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28463,13 +29051,13 @@ GL_PREFIX(VertexAttribs2dvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6032(%rax), %r11
+       movq    6160(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6032(%rax), %r11
+       movq    6160(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28479,7 +29067,7 @@ GL_PREFIX(VertexAttribs2dvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6032(%rax), %r11
+       movq    6160(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribs2dvNV), .-GL_PREFIX(VertexAttribs2dvNV)
@@ -28490,7 +29078,7 @@ GL_PREFIX(VertexAttribs2dvNV):
 GL_PREFIX(VertexAttribs2fvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6040(%rax), %r11
+       movq    6168(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28500,13 +29088,13 @@ GL_PREFIX(VertexAttribs2fvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6040(%rax), %r11
+       movq    6168(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6040(%rax), %r11
+       movq    6168(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28516,7 +29104,7 @@ GL_PREFIX(VertexAttribs2fvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6040(%rax), %r11
+       movq    6168(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribs2fvNV), .-GL_PREFIX(VertexAttribs2fvNV)
@@ -28527,7 +29115,7 @@ GL_PREFIX(VertexAttribs2fvNV):
 GL_PREFIX(VertexAttribs2svNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6048(%rax), %r11
+       movq    6176(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28537,13 +29125,13 @@ GL_PREFIX(VertexAttribs2svNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6048(%rax), %r11
+       movq    6176(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6048(%rax), %r11
+       movq    6176(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28553,7 +29141,7 @@ GL_PREFIX(VertexAttribs2svNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6048(%rax), %r11
+       movq    6176(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribs2svNV), .-GL_PREFIX(VertexAttribs2svNV)
@@ -28564,7 +29152,7 @@ GL_PREFIX(VertexAttribs2svNV):
 GL_PREFIX(VertexAttribs3dvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6056(%rax), %r11
+       movq    6184(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28574,13 +29162,13 @@ GL_PREFIX(VertexAttribs3dvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6056(%rax), %r11
+       movq    6184(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6056(%rax), %r11
+       movq    6184(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28590,7 +29178,7 @@ GL_PREFIX(VertexAttribs3dvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6056(%rax), %r11
+       movq    6184(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribs3dvNV), .-GL_PREFIX(VertexAttribs3dvNV)
@@ -28601,7 +29189,7 @@ GL_PREFIX(VertexAttribs3dvNV):
 GL_PREFIX(VertexAttribs3fvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6064(%rax), %r11
+       movq    6192(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28611,13 +29199,13 @@ GL_PREFIX(VertexAttribs3fvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6064(%rax), %r11
+       movq    6192(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6064(%rax), %r11
+       movq    6192(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28627,7 +29215,7 @@ GL_PREFIX(VertexAttribs3fvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6064(%rax), %r11
+       movq    6192(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribs3fvNV), .-GL_PREFIX(VertexAttribs3fvNV)
@@ -28638,7 +29226,7 @@ GL_PREFIX(VertexAttribs3fvNV):
 GL_PREFIX(VertexAttribs3svNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6072(%rax), %r11
+       movq    6200(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28648,13 +29236,13 @@ GL_PREFIX(VertexAttribs3svNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6072(%rax), %r11
+       movq    6200(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6072(%rax), %r11
+       movq    6200(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28664,7 +29252,7 @@ GL_PREFIX(VertexAttribs3svNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6072(%rax), %r11
+       movq    6200(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribs3svNV), .-GL_PREFIX(VertexAttribs3svNV)
@@ -28675,7 +29263,7 @@ GL_PREFIX(VertexAttribs3svNV):
 GL_PREFIX(VertexAttribs4dvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6080(%rax), %r11
+       movq    6208(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28685,13 +29273,13 @@ GL_PREFIX(VertexAttribs4dvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6080(%rax), %r11
+       movq    6208(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6080(%rax), %r11
+       movq    6208(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28701,7 +29289,7 @@ GL_PREFIX(VertexAttribs4dvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6080(%rax), %r11
+       movq    6208(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribs4dvNV), .-GL_PREFIX(VertexAttribs4dvNV)
@@ -28712,7 +29300,7 @@ GL_PREFIX(VertexAttribs4dvNV):
 GL_PREFIX(VertexAttribs4fvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6088(%rax), %r11
+       movq    6216(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28722,13 +29310,13 @@ GL_PREFIX(VertexAttribs4fvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6088(%rax), %r11
+       movq    6216(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6088(%rax), %r11
+       movq    6216(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28738,7 +29326,7 @@ GL_PREFIX(VertexAttribs4fvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6088(%rax), %r11
+       movq    6216(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribs4fvNV), .-GL_PREFIX(VertexAttribs4fvNV)
@@ -28749,7 +29337,7 @@ GL_PREFIX(VertexAttribs4fvNV):
 GL_PREFIX(VertexAttribs4svNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6096(%rax), %r11
+       movq    6224(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28759,13 +29347,13 @@ GL_PREFIX(VertexAttribs4svNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6096(%rax), %r11
+       movq    6224(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6096(%rax), %r11
+       movq    6224(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28775,7 +29363,7 @@ GL_PREFIX(VertexAttribs4svNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6096(%rax), %r11
+       movq    6224(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribs4svNV), .-GL_PREFIX(VertexAttribs4svNV)
@@ -28786,7 +29374,7 @@ GL_PREFIX(VertexAttribs4svNV):
 GL_PREFIX(VertexAttribs4ubvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6104(%rax), %r11
+       movq    6232(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28796,13 +29384,13 @@ GL_PREFIX(VertexAttribs4ubvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6104(%rax), %r11
+       movq    6232(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6104(%rax), %r11
+       movq    6232(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28812,7 +29400,7 @@ GL_PREFIX(VertexAttribs4ubvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6104(%rax), %r11
+       movq    6232(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribs4ubvNV), .-GL_PREFIX(VertexAttribs4ubvNV)
@@ -28823,7 +29411,7 @@ GL_PREFIX(VertexAttribs4ubvNV):
 GL_PREFIX(GetTexBumpParameterfvATI):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6112(%rax), %r11
+       movq    6240(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28833,13 +29421,13 @@ GL_PREFIX(GetTexBumpParameterfvATI):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6112(%rax), %r11
+       movq    6240(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6112(%rax), %r11
+       movq    6240(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28849,7 +29437,7 @@ GL_PREFIX(GetTexBumpParameterfvATI):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6112(%rax), %r11
+       movq    6240(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetTexBumpParameterfvATI), .-GL_PREFIX(GetTexBumpParameterfvATI)
@@ -28860,7 +29448,7 @@ GL_PREFIX(GetTexBumpParameterfvATI):
 GL_PREFIX(GetTexBumpParameterivATI):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6120(%rax), %r11
+       movq    6248(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28870,13 +29458,13 @@ GL_PREFIX(GetTexBumpParameterivATI):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6120(%rax), %r11
+       movq    6248(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6120(%rax), %r11
+       movq    6248(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28886,7 +29474,7 @@ GL_PREFIX(GetTexBumpParameterivATI):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6120(%rax), %r11
+       movq    6248(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetTexBumpParameterivATI), .-GL_PREFIX(GetTexBumpParameterivATI)
@@ -28897,7 +29485,7 @@ GL_PREFIX(GetTexBumpParameterivATI):
 GL_PREFIX(TexBumpParameterfvATI):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6128(%rax), %r11
+       movq    6256(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28907,13 +29495,13 @@ GL_PREFIX(TexBumpParameterfvATI):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6128(%rax), %r11
+       movq    6256(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6128(%rax), %r11
+       movq    6256(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28923,7 +29511,7 @@ GL_PREFIX(TexBumpParameterfvATI):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6128(%rax), %r11
+       movq    6256(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(TexBumpParameterfvATI), .-GL_PREFIX(TexBumpParameterfvATI)
@@ -28934,7 +29522,7 @@ GL_PREFIX(TexBumpParameterfvATI):
 GL_PREFIX(TexBumpParameterivATI):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6136(%rax), %r11
+       movq    6264(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28944,13 +29532,13 @@ GL_PREFIX(TexBumpParameterivATI):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6136(%rax), %r11
+       movq    6264(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6136(%rax), %r11
+       movq    6264(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -28960,7 +29548,7 @@ GL_PREFIX(TexBumpParameterivATI):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6136(%rax), %r11
+       movq    6264(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(TexBumpParameterivATI), .-GL_PREFIX(TexBumpParameterivATI)
@@ -28971,7 +29559,7 @@ GL_PREFIX(TexBumpParameterivATI):
 GL_PREFIX(AlphaFragmentOp1ATI):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6144(%rax), %r11
+       movq    6272(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -28989,13 +29577,13 @@ GL_PREFIX(AlphaFragmentOp1ATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6144(%rax), %r11
+       movq    6272(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6144(%rax), %r11
+       movq    6272(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29013,7 +29601,7 @@ GL_PREFIX(AlphaFragmentOp1ATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6144(%rax), %r11
+       movq    6272(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(AlphaFragmentOp1ATI), .-GL_PREFIX(AlphaFragmentOp1ATI)
@@ -29024,7 +29612,7 @@ GL_PREFIX(AlphaFragmentOp1ATI):
 GL_PREFIX(AlphaFragmentOp2ATI):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6152(%rax), %r11
+       movq    6280(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29042,13 +29630,13 @@ GL_PREFIX(AlphaFragmentOp2ATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6152(%rax), %r11
+       movq    6280(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6152(%rax), %r11
+       movq    6280(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29066,7 +29654,7 @@ GL_PREFIX(AlphaFragmentOp2ATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6152(%rax), %r11
+       movq    6280(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(AlphaFragmentOp2ATI), .-GL_PREFIX(AlphaFragmentOp2ATI)
@@ -29077,7 +29665,7 @@ GL_PREFIX(AlphaFragmentOp2ATI):
 GL_PREFIX(AlphaFragmentOp3ATI):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6160(%rax), %r11
+       movq    6288(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29095,13 +29683,13 @@ GL_PREFIX(AlphaFragmentOp3ATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6160(%rax), %r11
+       movq    6288(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6160(%rax), %r11
+       movq    6288(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29119,7 +29707,7 @@ GL_PREFIX(AlphaFragmentOp3ATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6160(%rax), %r11
+       movq    6288(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(AlphaFragmentOp3ATI), .-GL_PREFIX(AlphaFragmentOp3ATI)
@@ -29130,25 +29718,25 @@ GL_PREFIX(AlphaFragmentOp3ATI):
 GL_PREFIX(BeginFragmentShaderATI):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6168(%rax), %r11
+       movq    6296(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       movq    6168(%rax), %r11
+       movq    6296(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6168(%rax), %r11
+       movq    6296(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       movq    6168(%rax), %r11
+       movq    6296(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BeginFragmentShaderATI), .-GL_PREFIX(BeginFragmentShaderATI)
@@ -29159,25 +29747,25 @@ GL_PREFIX(BeginFragmentShaderATI):
 GL_PREFIX(BindFragmentShaderATI):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6176(%rax), %r11
+       movq    6304(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    6176(%rax), %r11
+       movq    6304(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6176(%rax), %r11
+       movq    6304(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    6176(%rax), %r11
+       movq    6304(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BindFragmentShaderATI), .-GL_PREFIX(BindFragmentShaderATI)
@@ -29188,7 +29776,7 @@ GL_PREFIX(BindFragmentShaderATI):
 GL_PREFIX(ColorFragmentOp1ATI):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6184(%rax), %r11
+       movq    6312(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29206,13 +29794,13 @@ GL_PREFIX(ColorFragmentOp1ATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6184(%rax), %r11
+       movq    6312(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6184(%rax), %r11
+       movq    6312(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29230,7 +29818,7 @@ GL_PREFIX(ColorFragmentOp1ATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6184(%rax), %r11
+       movq    6312(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ColorFragmentOp1ATI), .-GL_PREFIX(ColorFragmentOp1ATI)
@@ -29241,7 +29829,7 @@ GL_PREFIX(ColorFragmentOp1ATI):
 GL_PREFIX(ColorFragmentOp2ATI):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6192(%rax), %r11
+       movq    6320(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29259,13 +29847,13 @@ GL_PREFIX(ColorFragmentOp2ATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6192(%rax), %r11
+       movq    6320(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6192(%rax), %r11
+       movq    6320(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29283,7 +29871,7 @@ GL_PREFIX(ColorFragmentOp2ATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6192(%rax), %r11
+       movq    6320(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ColorFragmentOp2ATI), .-GL_PREFIX(ColorFragmentOp2ATI)
@@ -29294,7 +29882,7 @@ GL_PREFIX(ColorFragmentOp2ATI):
 GL_PREFIX(ColorFragmentOp3ATI):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6200(%rax), %r11
+       movq    6328(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29312,13 +29900,13 @@ GL_PREFIX(ColorFragmentOp3ATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6200(%rax), %r11
+       movq    6328(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6200(%rax), %r11
+       movq    6328(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29336,7 +29924,7 @@ GL_PREFIX(ColorFragmentOp3ATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6200(%rax), %r11
+       movq    6328(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ColorFragmentOp3ATI), .-GL_PREFIX(ColorFragmentOp3ATI)
@@ -29347,25 +29935,25 @@ GL_PREFIX(ColorFragmentOp3ATI):
 GL_PREFIX(DeleteFragmentShaderATI):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6208(%rax), %r11
+       movq    6336(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    6208(%rax), %r11
+       movq    6336(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6208(%rax), %r11
+       movq    6336(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    6208(%rax), %r11
+       movq    6336(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(DeleteFragmentShaderATI), .-GL_PREFIX(DeleteFragmentShaderATI)
@@ -29376,25 +29964,25 @@ GL_PREFIX(DeleteFragmentShaderATI):
 GL_PREFIX(EndFragmentShaderATI):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6216(%rax), %r11
+       movq    6344(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       movq    6216(%rax), %r11
+       movq    6344(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6216(%rax), %r11
+       movq    6344(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       movq    6216(%rax), %r11
+       movq    6344(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(EndFragmentShaderATI), .-GL_PREFIX(EndFragmentShaderATI)
@@ -29405,25 +29993,25 @@ GL_PREFIX(EndFragmentShaderATI):
 GL_PREFIX(GenFragmentShadersATI):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6224(%rax), %r11
+       movq    6352(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    6224(%rax), %r11
+       movq    6352(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6224(%rax), %r11
+       movq    6352(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    6224(%rax), %r11
+       movq    6352(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GenFragmentShadersATI), .-GL_PREFIX(GenFragmentShadersATI)
@@ -29434,7 +30022,7 @@ GL_PREFIX(GenFragmentShadersATI):
 GL_PREFIX(PassTexCoordATI):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6232(%rax), %r11
+       movq    6360(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29444,13 +30032,13 @@ GL_PREFIX(PassTexCoordATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6232(%rax), %r11
+       movq    6360(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6232(%rax), %r11
+       movq    6360(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29460,7 +30048,7 @@ GL_PREFIX(PassTexCoordATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6232(%rax), %r11
+       movq    6360(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(PassTexCoordATI), .-GL_PREFIX(PassTexCoordATI)
@@ -29471,7 +30059,7 @@ GL_PREFIX(PassTexCoordATI):
 GL_PREFIX(SampleMapATI):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6240(%rax), %r11
+       movq    6368(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29481,13 +30069,13 @@ GL_PREFIX(SampleMapATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6240(%rax), %r11
+       movq    6368(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6240(%rax), %r11
+       movq    6368(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29497,7 +30085,7 @@ GL_PREFIX(SampleMapATI):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6240(%rax), %r11
+       movq    6368(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SampleMapATI), .-GL_PREFIX(SampleMapATI)
@@ -29508,7 +30096,7 @@ GL_PREFIX(SampleMapATI):
 GL_PREFIX(SetFragmentShaderConstantATI):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6248(%rax), %r11
+       movq    6376(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29518,13 +30106,13 @@ GL_PREFIX(SetFragmentShaderConstantATI):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6248(%rax), %r11
+       movq    6376(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6248(%rax), %r11
+       movq    6376(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29534,7 +30122,7 @@ GL_PREFIX(SetFragmentShaderConstantATI):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6248(%rax), %r11
+       movq    6376(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(SetFragmentShaderConstantATI), .-GL_PREFIX(SetFragmentShaderConstantATI)
@@ -29545,7 +30133,7 @@ GL_PREFIX(SetFragmentShaderConstantATI):
 GL_PREFIX(PointParameteriNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6256(%rax), %r11
+       movq    6384(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29555,13 +30143,13 @@ GL_PREFIX(PointParameteriNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6256(%rax), %r11
+       movq    6384(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6256(%rax), %r11
+       movq    6384(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29571,7 +30159,7 @@ GL_PREFIX(PointParameteriNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6256(%rax), %r11
+       movq    6384(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(PointParameteriNV), .-GL_PREFIX(PointParameteriNV)
@@ -29582,7 +30170,7 @@ GL_PREFIX(PointParameteriNV):
 GL_PREFIX(PointParameterivNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6264(%rax), %r11
+       movq    6392(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29592,13 +30180,13 @@ GL_PREFIX(PointParameterivNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6264(%rax), %r11
+       movq    6392(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6264(%rax), %r11
+       movq    6392(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29608,79 +30196,79 @@ GL_PREFIX(PointParameterivNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6264(%rax), %r11
+       movq    6392(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(PointParameterivNV), .-GL_PREFIX(PointParameterivNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_784)
-       .type   GL_PREFIX(_dispatch_stub_784), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_784))
-GL_PREFIX(_dispatch_stub_784):
+       .globl  GL_PREFIX(_dispatch_stub_800)
+       .type   GL_PREFIX(_dispatch_stub_800), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_800))
+GL_PREFIX(_dispatch_stub_800):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6272(%rax), %r11
+       movq    6400(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    6272(%rax), %r11
+       movq    6400(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6272(%rax), %r11
+       movq    6400(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    6272(%rax), %r11
+       movq    6400(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_784), .-GL_PREFIX(_dispatch_stub_784)
+       .size   GL_PREFIX(_dispatch_stub_800), .-GL_PREFIX(_dispatch_stub_800)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_785)
-       .type   GL_PREFIX(_dispatch_stub_785), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_785))
-GL_PREFIX(_dispatch_stub_785):
+       .globl  GL_PREFIX(_dispatch_stub_801)
+       .type   GL_PREFIX(_dispatch_stub_801), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_801))
+GL_PREFIX(_dispatch_stub_801):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6280(%rax), %r11
+       movq    6408(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    6280(%rax), %r11
+       movq    6408(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6280(%rax), %r11
+       movq    6408(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    6280(%rax), %r11
+       movq    6408(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_785), .-GL_PREFIX(_dispatch_stub_785)
+       .size   GL_PREFIX(_dispatch_stub_801), .-GL_PREFIX(_dispatch_stub_801)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_786)
-       .type   GL_PREFIX(_dispatch_stub_786), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_786))
-GL_PREFIX(_dispatch_stub_786):
+       .globl  GL_PREFIX(_dispatch_stub_802)
+       .type   GL_PREFIX(_dispatch_stub_802), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_802))
+GL_PREFIX(_dispatch_stub_802):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6288(%rax), %r11
+       movq    6416(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29690,13 +30278,13 @@ GL_PREFIX(_dispatch_stub_786):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6288(%rax), %r11
+       movq    6416(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6288(%rax), %r11
+       movq    6416(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29706,19 +30294,19 @@ GL_PREFIX(_dispatch_stub_786):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6288(%rax), %r11
+       movq    6416(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_786), .-GL_PREFIX(_dispatch_stub_786)
+       .size   GL_PREFIX(_dispatch_stub_802), .-GL_PREFIX(_dispatch_stub_802)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_787)
-       .type   GL_PREFIX(_dispatch_stub_787), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_787))
-GL_PREFIX(_dispatch_stub_787):
+       .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    6296(%rax), %r11
+       movq    6424(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29728,13 +30316,13 @@ GL_PREFIX(_dispatch_stub_787):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6296(%rax), %r11
+       movq    6424(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6296(%rax), %r11
+       movq    6424(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29744,40 +30332,40 @@ GL_PREFIX(_dispatch_stub_787):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6296(%rax), %r11
+       movq    6424(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_787), .-GL_PREFIX(_dispatch_stub_787)
+       .size   GL_PREFIX(_dispatch_stub_803), .-GL_PREFIX(_dispatch_stub_803)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_788)
-       .type   GL_PREFIX(_dispatch_stub_788), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_788))
-GL_PREFIX(_dispatch_stub_788):
+       .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    6304(%rax), %r11
+       movq    6432(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    6304(%rax), %r11
+       movq    6432(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6304(%rax), %r11
+       movq    6432(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    6304(%rax), %r11
+       movq    6432(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_788), .-GL_PREFIX(_dispatch_stub_788)
+       .size   GL_PREFIX(_dispatch_stub_804), .-GL_PREFIX(_dispatch_stub_804)
 
        .p2align        4,,15
        .globl  GL_PREFIX(GetProgramNamedParameterdvNV)
@@ -29785,7 +30373,7 @@ GL_PREFIX(_dispatch_stub_788):
 GL_PREFIX(GetProgramNamedParameterdvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6312(%rax), %r11
+       movq    6440(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29799,13 +30387,13 @@ GL_PREFIX(GetProgramNamedParameterdvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6312(%rax), %r11
+       movq    6440(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6312(%rax), %r11
+       movq    6440(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29819,7 +30407,7 @@ GL_PREFIX(GetProgramNamedParameterdvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6312(%rax), %r11
+       movq    6440(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetProgramNamedParameterdvNV), .-GL_PREFIX(GetProgramNamedParameterdvNV)
@@ -29830,7 +30418,7 @@ GL_PREFIX(GetProgramNamedParameterdvNV):
 GL_PREFIX(GetProgramNamedParameterfvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6320(%rax), %r11
+       movq    6448(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29844,13 +30432,13 @@ GL_PREFIX(GetProgramNamedParameterfvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6320(%rax), %r11
+       movq    6448(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6320(%rax), %r11
+       movq    6448(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29864,7 +30452,7 @@ GL_PREFIX(GetProgramNamedParameterfvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6320(%rax), %r11
+       movq    6448(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetProgramNamedParameterfvNV), .-GL_PREFIX(GetProgramNamedParameterfvNV)
@@ -29875,7 +30463,7 @@ GL_PREFIX(GetProgramNamedParameterfvNV):
 GL_PREFIX(ProgramNamedParameter4dNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6328(%rax), %r11
+       movq    6456(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $56, %rsp
@@ -29895,13 +30483,13 @@ GL_PREFIX(ProgramNamedParameter4dNV):
        movq    8(%rsp), %rsi
        movq    (%rsp), %rdi
        addq    $56, %rsp
-       movq    6328(%rax), %r11
+       movq    6456(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6328(%rax), %r11
+       movq    6456(%rax), %r11
        jmp     *%r11
 1:
        subq    $56, %rsp
@@ -29921,7 +30509,7 @@ GL_PREFIX(ProgramNamedParameter4dNV):
        movq    8(%rsp), %rsi
        movq    (%rsp), %rdi
        addq    $56, %rsp
-       movq    6328(%rax), %r11
+       movq    6456(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ProgramNamedParameter4dNV), .-GL_PREFIX(ProgramNamedParameter4dNV)
@@ -29932,7 +30520,7 @@ GL_PREFIX(ProgramNamedParameter4dNV):
 GL_PREFIX(ProgramNamedParameter4dvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6336(%rax), %r11
+       movq    6464(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -29946,13 +30534,13 @@ GL_PREFIX(ProgramNamedParameter4dvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6336(%rax), %r11
+       movq    6464(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6336(%rax), %r11
+       movq    6464(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -29966,7 +30554,7 @@ GL_PREFIX(ProgramNamedParameter4dvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6336(%rax), %r11
+       movq    6464(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ProgramNamedParameter4dvNV), .-GL_PREFIX(ProgramNamedParameter4dvNV)
@@ -29977,7 +30565,7 @@ GL_PREFIX(ProgramNamedParameter4dvNV):
 GL_PREFIX(ProgramNamedParameter4fNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6344(%rax), %r11
+       movq    6472(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        subq    $56, %rsp
@@ -29997,13 +30585,13 @@ GL_PREFIX(ProgramNamedParameter4fNV):
        movq    8(%rsp), %rsi
        movq    (%rsp), %rdi
        addq    $56, %rsp
-       movq    6344(%rax), %r11
+       movq    6472(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6344(%rax), %r11
+       movq    6472(%rax), %r11
        jmp     *%r11
 1:
        subq    $56, %rsp
@@ -30023,7 +30611,7 @@ GL_PREFIX(ProgramNamedParameter4fNV):
        movq    8(%rsp), %rsi
        movq    (%rsp), %rdi
        addq    $56, %rsp
-       movq    6344(%rax), %r11
+       movq    6472(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ProgramNamedParameter4fNV), .-GL_PREFIX(ProgramNamedParameter4fNV)
@@ -30034,7 +30622,7 @@ GL_PREFIX(ProgramNamedParameter4fNV):
 GL_PREFIX(ProgramNamedParameter4fvNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6352(%rax), %r11
+       movq    6480(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30048,13 +30636,13 @@ GL_PREFIX(ProgramNamedParameter4fvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6352(%rax), %r11
+       movq    6480(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6352(%rax), %r11
+       movq    6480(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30068,7 +30656,7 @@ GL_PREFIX(ProgramNamedParameter4fvNV):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6352(%rax), %r11
+       movq    6480(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ProgramNamedParameter4fvNV), .-GL_PREFIX(ProgramNamedParameter4fvNV)
@@ -30079,25 +30667,25 @@ GL_PREFIX(ProgramNamedParameter4fvNV):
 GL_PREFIX(PrimitiveRestartIndexNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6360(%rax), %r11
+       movq    6488(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    6360(%rax), %r11
+       movq    6488(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6360(%rax), %r11
+       movq    6488(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    6360(%rax), %r11
+       movq    6488(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(PrimitiveRestartIndexNV), .-GL_PREFIX(PrimitiveRestartIndexNV)
@@ -30108,37 +30696,37 @@ GL_PREFIX(PrimitiveRestartIndexNV):
 GL_PREFIX(PrimitiveRestartNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6368(%rax), %r11
+       movq    6496(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       movq    6368(%rax), %r11
+       movq    6496(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6368(%rax), %r11
+       movq    6496(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       movq    6368(%rax), %r11
+       movq    6496(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(PrimitiveRestartNV), .-GL_PREFIX(PrimitiveRestartNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_797)
-       .type   GL_PREFIX(_dispatch_stub_797), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_797))
-GL_PREFIX(_dispatch_stub_797):
+       .globl  GL_PREFIX(_dispatch_stub_813)
+       .type   GL_PREFIX(_dispatch_stub_813), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_813))
+GL_PREFIX(_dispatch_stub_813):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6376(%rax), %r11
+       movq    6504(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30148,13 +30736,13 @@ GL_PREFIX(_dispatch_stub_797):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6376(%rax), %r11
+       movq    6504(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6376(%rax), %r11
+       movq    6504(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30164,19 +30752,19 @@ GL_PREFIX(_dispatch_stub_797):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6376(%rax), %r11
+       movq    6504(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_797), .-GL_PREFIX(_dispatch_stub_797)
+       .size   GL_PREFIX(_dispatch_stub_813), .-GL_PREFIX(_dispatch_stub_813)
 
        .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(_dispatch_stub_814)
+       .type   GL_PREFIX(_dispatch_stub_814), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_814))
+GL_PREFIX(_dispatch_stub_814):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6384(%rax), %r11
+       movq    6512(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30186,13 +30774,13 @@ GL_PREFIX(_dispatch_stub_798):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6384(%rax), %r11
+       movq    6512(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6384(%rax), %r11
+       movq    6512(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30202,10 +30790,10 @@ GL_PREFIX(_dispatch_stub_798):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6384(%rax), %r11
+       movq    6512(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_798), .-GL_PREFIX(_dispatch_stub_798)
+       .size   GL_PREFIX(_dispatch_stub_814), .-GL_PREFIX(_dispatch_stub_814)
 
        .p2align        4,,15
        .globl  GL_PREFIX(BindFramebufferEXT)
@@ -30213,7 +30801,7 @@ GL_PREFIX(_dispatch_stub_798):
 GL_PREFIX(BindFramebufferEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6392(%rax), %r11
+       movq    6520(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30223,13 +30811,13 @@ GL_PREFIX(BindFramebufferEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6392(%rax), %r11
+       movq    6520(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6392(%rax), %r11
+       movq    6520(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30239,7 +30827,7 @@ GL_PREFIX(BindFramebufferEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6392(%rax), %r11
+       movq    6520(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BindFramebufferEXT), .-GL_PREFIX(BindFramebufferEXT)
@@ -30250,7 +30838,7 @@ GL_PREFIX(BindFramebufferEXT):
 GL_PREFIX(BindRenderbufferEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6400(%rax), %r11
+       movq    6528(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30260,13 +30848,13 @@ GL_PREFIX(BindRenderbufferEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6400(%rax), %r11
+       movq    6528(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6400(%rax), %r11
+       movq    6528(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30276,7 +30864,7 @@ GL_PREFIX(BindRenderbufferEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6400(%rax), %r11
+       movq    6528(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BindRenderbufferEXT), .-GL_PREFIX(BindRenderbufferEXT)
@@ -30287,25 +30875,25 @@ GL_PREFIX(BindRenderbufferEXT):
 GL_PREFIX(CheckFramebufferStatusEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6408(%rax), %r11
+       movq    6536(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    6408(%rax), %r11
+       movq    6536(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6408(%rax), %r11
+       movq    6536(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    6408(%rax), %r11
+       movq    6536(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(CheckFramebufferStatusEXT), .-GL_PREFIX(CheckFramebufferStatusEXT)
@@ -30316,7 +30904,7 @@ GL_PREFIX(CheckFramebufferStatusEXT):
 GL_PREFIX(DeleteFramebuffersEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6416(%rax), %r11
+       movq    6544(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30326,13 +30914,13 @@ GL_PREFIX(DeleteFramebuffersEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6416(%rax), %r11
+       movq    6544(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6416(%rax), %r11
+       movq    6544(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30342,7 +30930,7 @@ GL_PREFIX(DeleteFramebuffersEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6416(%rax), %r11
+       movq    6544(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(DeleteFramebuffersEXT), .-GL_PREFIX(DeleteFramebuffersEXT)
@@ -30353,7 +30941,7 @@ GL_PREFIX(DeleteFramebuffersEXT):
 GL_PREFIX(DeleteRenderbuffersEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6424(%rax), %r11
+       movq    6552(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30363,13 +30951,13 @@ GL_PREFIX(DeleteRenderbuffersEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6424(%rax), %r11
+       movq    6552(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6424(%rax), %r11
+       movq    6552(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30379,7 +30967,7 @@ GL_PREFIX(DeleteRenderbuffersEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6424(%rax), %r11
+       movq    6552(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(DeleteRenderbuffersEXT), .-GL_PREFIX(DeleteRenderbuffersEXT)
@@ -30390,7 +30978,7 @@ GL_PREFIX(DeleteRenderbuffersEXT):
 GL_PREFIX(FramebufferRenderbufferEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6432(%rax), %r11
+       movq    6560(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30404,13 +30992,13 @@ GL_PREFIX(FramebufferRenderbufferEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6432(%rax), %r11
+       movq    6560(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6432(%rax), %r11
+       movq    6560(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30424,7 +31012,7 @@ GL_PREFIX(FramebufferRenderbufferEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6432(%rax), %r11
+       movq    6560(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(FramebufferRenderbufferEXT), .-GL_PREFIX(FramebufferRenderbufferEXT)
@@ -30435,7 +31023,7 @@ GL_PREFIX(FramebufferRenderbufferEXT):
 GL_PREFIX(FramebufferTexture1DEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6440(%rax), %r11
+       movq    6568(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30449,13 +31037,13 @@ GL_PREFIX(FramebufferTexture1DEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6440(%rax), %r11
+       movq    6568(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6440(%rax), %r11
+       movq    6568(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30469,7 +31057,7 @@ GL_PREFIX(FramebufferTexture1DEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6440(%rax), %r11
+       movq    6568(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(FramebufferTexture1DEXT), .-GL_PREFIX(FramebufferTexture1DEXT)
@@ -30480,7 +31068,7 @@ GL_PREFIX(FramebufferTexture1DEXT):
 GL_PREFIX(FramebufferTexture2DEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6448(%rax), %r11
+       movq    6576(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30494,13 +31082,13 @@ GL_PREFIX(FramebufferTexture2DEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6448(%rax), %r11
+       movq    6576(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6448(%rax), %r11
+       movq    6576(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30514,7 +31102,7 @@ GL_PREFIX(FramebufferTexture2DEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6448(%rax), %r11
+       movq    6576(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(FramebufferTexture2DEXT), .-GL_PREFIX(FramebufferTexture2DEXT)
@@ -30525,7 +31113,7 @@ GL_PREFIX(FramebufferTexture2DEXT):
 GL_PREFIX(FramebufferTexture3DEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6456(%rax), %r11
+       movq    6584(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30543,13 +31131,13 @@ GL_PREFIX(FramebufferTexture3DEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6456(%rax), %r11
+       movq    6584(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6456(%rax), %r11
+       movq    6584(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30567,7 +31155,7 @@ GL_PREFIX(FramebufferTexture3DEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6456(%rax), %r11
+       movq    6584(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(FramebufferTexture3DEXT), .-GL_PREFIX(FramebufferTexture3DEXT)
@@ -30578,7 +31166,7 @@ GL_PREFIX(FramebufferTexture3DEXT):
 GL_PREFIX(GenFramebuffersEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6464(%rax), %r11
+       movq    6592(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30588,13 +31176,13 @@ GL_PREFIX(GenFramebuffersEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6464(%rax), %r11
+       movq    6592(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6464(%rax), %r11
+       movq    6592(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30604,7 +31192,7 @@ GL_PREFIX(GenFramebuffersEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6464(%rax), %r11
+       movq    6592(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GenFramebuffersEXT), .-GL_PREFIX(GenFramebuffersEXT)
@@ -30615,7 +31203,7 @@ GL_PREFIX(GenFramebuffersEXT):
 GL_PREFIX(GenRenderbuffersEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6472(%rax), %r11
+       movq    6600(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30625,13 +31213,13 @@ GL_PREFIX(GenRenderbuffersEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6472(%rax), %r11
+       movq    6600(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6472(%rax), %r11
+       movq    6600(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30641,7 +31229,7 @@ GL_PREFIX(GenRenderbuffersEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6472(%rax), %r11
+       movq    6600(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GenRenderbuffersEXT), .-GL_PREFIX(GenRenderbuffersEXT)
@@ -30652,25 +31240,25 @@ GL_PREFIX(GenRenderbuffersEXT):
 GL_PREFIX(GenerateMipmapEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6480(%rax), %r11
+       movq    6608(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    6480(%rax), %r11
+       movq    6608(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6480(%rax), %r11
+       movq    6608(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    6480(%rax), %r11
+       movq    6608(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GenerateMipmapEXT), .-GL_PREFIX(GenerateMipmapEXT)
@@ -30681,7 +31269,7 @@ GL_PREFIX(GenerateMipmapEXT):
 GL_PREFIX(GetFramebufferAttachmentParameterivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6488(%rax), %r11
+       movq    6616(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30695,13 +31283,13 @@ GL_PREFIX(GetFramebufferAttachmentParameterivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6488(%rax), %r11
+       movq    6616(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6488(%rax), %r11
+       movq    6616(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30715,7 +31303,7 @@ GL_PREFIX(GetFramebufferAttachmentParameterivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6488(%rax), %r11
+       movq    6616(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetFramebufferAttachmentParameterivEXT), .-GL_PREFIX(GetFramebufferAttachmentParameterivEXT)
@@ -30726,7 +31314,7 @@ GL_PREFIX(GetFramebufferAttachmentParameterivEXT):
 GL_PREFIX(GetRenderbufferParameterivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6496(%rax), %r11
+       movq    6624(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30736,13 +31324,13 @@ GL_PREFIX(GetRenderbufferParameterivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6496(%rax), %r11
+       movq    6624(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6496(%rax), %r11
+       movq    6624(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30752,7 +31340,7 @@ GL_PREFIX(GetRenderbufferParameterivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6496(%rax), %r11
+       movq    6624(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetRenderbufferParameterivEXT), .-GL_PREFIX(GetRenderbufferParameterivEXT)
@@ -30763,25 +31351,25 @@ GL_PREFIX(GetRenderbufferParameterivEXT):
 GL_PREFIX(IsFramebufferEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6504(%rax), %r11
+       movq    6632(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    6504(%rax), %r11
+       movq    6632(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6504(%rax), %r11
+       movq    6632(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    6504(%rax), %r11
+       movq    6632(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(IsFramebufferEXT), .-GL_PREFIX(IsFramebufferEXT)
@@ -30792,25 +31380,25 @@ GL_PREFIX(IsFramebufferEXT):
 GL_PREFIX(IsRenderbufferEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6512(%rax), %r11
+       movq    6640(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    6512(%rax), %r11
+       movq    6640(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6512(%rax), %r11
+       movq    6640(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    6512(%rax), %r11
+       movq    6640(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(IsRenderbufferEXT), .-GL_PREFIX(IsRenderbufferEXT)
@@ -30821,7 +31409,7 @@ GL_PREFIX(IsRenderbufferEXT):
 GL_PREFIX(RenderbufferStorageEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6520(%rax), %r11
+       movq    6648(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30835,13 +31423,13 @@ GL_PREFIX(RenderbufferStorageEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6520(%rax), %r11
+       movq    6648(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6520(%rax), %r11
+       movq    6648(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30855,19 +31443,19 @@ GL_PREFIX(RenderbufferStorageEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6520(%rax), %r11
+       movq    6648(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(RenderbufferStorageEXT), .-GL_PREFIX(RenderbufferStorageEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_816)
-       .type   GL_PREFIX(_dispatch_stub_816), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_816))
-GL_PREFIX(_dispatch_stub_816):
+       .globl  GL_PREFIX(_dispatch_stub_832)
+       .type   GL_PREFIX(_dispatch_stub_832), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_832))
+GL_PREFIX(_dispatch_stub_832):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6528(%rax), %r11
+       movq    6656(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30885,13 +31473,13 @@ GL_PREFIX(_dispatch_stub_816):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6528(%rax), %r11
+       movq    6656(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6528(%rax), %r11
+       movq    6656(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30909,19 +31497,19 @@ GL_PREFIX(_dispatch_stub_816):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6528(%rax), %r11
+       movq    6656(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_816), .-GL_PREFIX(_dispatch_stub_816)
+       .size   GL_PREFIX(_dispatch_stub_832), .-GL_PREFIX(_dispatch_stub_832)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_817)
-       .type   GL_PREFIX(_dispatch_stub_817), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_817))
-GL_PREFIX(_dispatch_stub_817):
+       .globl  GL_PREFIX(_dispatch_stub_833)
+       .type   GL_PREFIX(_dispatch_stub_833), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_833))
+GL_PREFIX(_dispatch_stub_833):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6536(%rax), %r11
+       movq    6664(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30931,13 +31519,13 @@ GL_PREFIX(_dispatch_stub_817):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6536(%rax), %r11
+       movq    6664(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6536(%rax), %r11
+       movq    6664(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30947,19 +31535,19 @@ GL_PREFIX(_dispatch_stub_817):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6536(%rax), %r11
+       movq    6664(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_817), .-GL_PREFIX(_dispatch_stub_817)
+       .size   GL_PREFIX(_dispatch_stub_833), .-GL_PREFIX(_dispatch_stub_833)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_818)
-       .type   GL_PREFIX(_dispatch_stub_818), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_818))
-GL_PREFIX(_dispatch_stub_818):
+       .globl  GL_PREFIX(_dispatch_stub_834)
+       .type   GL_PREFIX(_dispatch_stub_834), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_834))
+GL_PREFIX(_dispatch_stub_834):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6544(%rax), %r11
+       movq    6672(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -30969,13 +31557,13 @@ GL_PREFIX(_dispatch_stub_818):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6544(%rax), %r11
+       movq    6672(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6544(%rax), %r11
+       movq    6672(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -30985,10 +31573,10 @@ GL_PREFIX(_dispatch_stub_818):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6544(%rax), %r11
+       movq    6672(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_818), .-GL_PREFIX(_dispatch_stub_818)
+       .size   GL_PREFIX(_dispatch_stub_834), .-GL_PREFIX(_dispatch_stub_834)
 
        .p2align        4,,15
        .globl  GL_PREFIX(BindFragDataLocationEXT)
@@ -30996,7 +31584,7 @@ GL_PREFIX(_dispatch_stub_818):
 GL_PREFIX(BindFragDataLocationEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6552(%rax), %r11
+       movq    6680(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31006,13 +31594,13 @@ GL_PREFIX(BindFragDataLocationEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6552(%rax), %r11
+       movq    6680(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6552(%rax), %r11
+       movq    6680(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31022,7 +31610,7 @@ GL_PREFIX(BindFragDataLocationEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6552(%rax), %r11
+       movq    6680(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BindFragDataLocationEXT), .-GL_PREFIX(BindFragDataLocationEXT)
@@ -31033,7 +31621,7 @@ GL_PREFIX(BindFragDataLocationEXT):
 GL_PREFIX(GetFragDataLocationEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6560(%rax), %r11
+       movq    6688(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31043,13 +31631,13 @@ GL_PREFIX(GetFragDataLocationEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6560(%rax), %r11
+       movq    6688(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6560(%rax), %r11
+       movq    6688(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31059,7 +31647,7 @@ GL_PREFIX(GetFragDataLocationEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6560(%rax), %r11
+       movq    6688(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetFragDataLocationEXT), .-GL_PREFIX(GetFragDataLocationEXT)
@@ -31070,7 +31658,7 @@ GL_PREFIX(GetFragDataLocationEXT):
 GL_PREFIX(GetUniformuivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6568(%rax), %r11
+       movq    6696(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31080,13 +31668,13 @@ GL_PREFIX(GetUniformuivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6568(%rax), %r11
+       movq    6696(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6568(%rax), %r11
+       movq    6696(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31096,7 +31684,7 @@ GL_PREFIX(GetUniformuivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6568(%rax), %r11
+       movq    6696(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetUniformuivEXT), .-GL_PREFIX(GetUniformuivEXT)
@@ -31107,7 +31695,7 @@ GL_PREFIX(GetUniformuivEXT):
 GL_PREFIX(GetVertexAttribIivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6576(%rax), %r11
+       movq    6704(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31117,13 +31705,13 @@ GL_PREFIX(GetVertexAttribIivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6576(%rax), %r11
+       movq    6704(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6576(%rax), %r11
+       movq    6704(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31133,7 +31721,7 @@ GL_PREFIX(GetVertexAttribIivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6576(%rax), %r11
+       movq    6704(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetVertexAttribIivEXT), .-GL_PREFIX(GetVertexAttribIivEXT)
@@ -31144,7 +31732,7 @@ GL_PREFIX(GetVertexAttribIivEXT):
 GL_PREFIX(GetVertexAttribIuivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6584(%rax), %r11
+       movq    6712(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31154,13 +31742,13 @@ GL_PREFIX(GetVertexAttribIuivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6584(%rax), %r11
+       movq    6712(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6584(%rax), %r11
+       movq    6712(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31170,7 +31758,7 @@ GL_PREFIX(GetVertexAttribIuivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6584(%rax), %r11
+       movq    6712(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetVertexAttribIuivEXT), .-GL_PREFIX(GetVertexAttribIuivEXT)
@@ -31181,7 +31769,7 @@ GL_PREFIX(GetVertexAttribIuivEXT):
 GL_PREFIX(Uniform1uiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6592(%rax), %r11
+       movq    6720(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31191,13 +31779,13 @@ GL_PREFIX(Uniform1uiEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6592(%rax), %r11
+       movq    6720(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6592(%rax), %r11
+       movq    6720(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31207,7 +31795,7 @@ GL_PREFIX(Uniform1uiEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6592(%rax), %r11
+       movq    6720(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(Uniform1uiEXT), .-GL_PREFIX(Uniform1uiEXT)
@@ -31218,7 +31806,7 @@ GL_PREFIX(Uniform1uiEXT):
 GL_PREFIX(Uniform1uivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6600(%rax), %r11
+       movq    6728(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31228,13 +31816,13 @@ GL_PREFIX(Uniform1uivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6600(%rax), %r11
+       movq    6728(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6600(%rax), %r11
+       movq    6728(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31244,7 +31832,7 @@ GL_PREFIX(Uniform1uivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6600(%rax), %r11
+       movq    6728(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(Uniform1uivEXT), .-GL_PREFIX(Uniform1uivEXT)
@@ -31255,7 +31843,7 @@ GL_PREFIX(Uniform1uivEXT):
 GL_PREFIX(Uniform2uiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6608(%rax), %r11
+       movq    6736(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31265,13 +31853,13 @@ GL_PREFIX(Uniform2uiEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6608(%rax), %r11
+       movq    6736(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6608(%rax), %r11
+       movq    6736(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31281,7 +31869,7 @@ GL_PREFIX(Uniform2uiEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6608(%rax), %r11
+       movq    6736(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(Uniform2uiEXT), .-GL_PREFIX(Uniform2uiEXT)
@@ -31292,7 +31880,7 @@ GL_PREFIX(Uniform2uiEXT):
 GL_PREFIX(Uniform2uivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6616(%rax), %r11
+       movq    6744(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31302,13 +31890,13 @@ GL_PREFIX(Uniform2uivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6616(%rax), %r11
+       movq    6744(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6616(%rax), %r11
+       movq    6744(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31318,7 +31906,7 @@ GL_PREFIX(Uniform2uivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6616(%rax), %r11
+       movq    6744(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(Uniform2uivEXT), .-GL_PREFIX(Uniform2uivEXT)
@@ -31329,7 +31917,7 @@ GL_PREFIX(Uniform2uivEXT):
 GL_PREFIX(Uniform3uiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6624(%rax), %r11
+       movq    6752(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31343,13 +31931,13 @@ GL_PREFIX(Uniform3uiEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6624(%rax), %r11
+       movq    6752(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6624(%rax), %r11
+       movq    6752(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31363,7 +31951,7 @@ GL_PREFIX(Uniform3uiEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6624(%rax), %r11
+       movq    6752(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(Uniform3uiEXT), .-GL_PREFIX(Uniform3uiEXT)
@@ -31374,7 +31962,7 @@ GL_PREFIX(Uniform3uiEXT):
 GL_PREFIX(Uniform3uivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6632(%rax), %r11
+       movq    6760(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31384,13 +31972,13 @@ GL_PREFIX(Uniform3uivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6632(%rax), %r11
+       movq    6760(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6632(%rax), %r11
+       movq    6760(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31400,7 +31988,7 @@ GL_PREFIX(Uniform3uivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6632(%rax), %r11
+       movq    6760(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(Uniform3uivEXT), .-GL_PREFIX(Uniform3uivEXT)
@@ -31411,7 +31999,7 @@ GL_PREFIX(Uniform3uivEXT):
 GL_PREFIX(Uniform4uiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6640(%rax), %r11
+       movq    6768(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31425,13 +32013,13 @@ GL_PREFIX(Uniform4uiEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6640(%rax), %r11
+       movq    6768(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6640(%rax), %r11
+       movq    6768(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31445,7 +32033,7 @@ GL_PREFIX(Uniform4uiEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6640(%rax), %r11
+       movq    6768(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(Uniform4uiEXT), .-GL_PREFIX(Uniform4uiEXT)
@@ -31456,7 +32044,7 @@ GL_PREFIX(Uniform4uiEXT):
 GL_PREFIX(Uniform4uivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6648(%rax), %r11
+       movq    6776(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31466,13 +32054,13 @@ GL_PREFIX(Uniform4uivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6648(%rax), %r11
+       movq    6776(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6648(%rax), %r11
+       movq    6776(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31482,7 +32070,7 @@ GL_PREFIX(Uniform4uivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6648(%rax), %r11
+       movq    6776(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(Uniform4uivEXT), .-GL_PREFIX(Uniform4uivEXT)
@@ -31493,7 +32081,7 @@ GL_PREFIX(Uniform4uivEXT):
 GL_PREFIX(VertexAttribI1iEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6656(%rax), %r11
+       movq    6784(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31503,13 +32091,13 @@ GL_PREFIX(VertexAttribI1iEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6656(%rax), %r11
+       movq    6784(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6656(%rax), %r11
+       movq    6784(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31519,7 +32107,7 @@ GL_PREFIX(VertexAttribI1iEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6656(%rax), %r11
+       movq    6784(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI1iEXT), .-GL_PREFIX(VertexAttribI1iEXT)
@@ -31530,7 +32118,7 @@ GL_PREFIX(VertexAttribI1iEXT):
 GL_PREFIX(VertexAttribI1ivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6664(%rax), %r11
+       movq    6792(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31540,13 +32128,13 @@ GL_PREFIX(VertexAttribI1ivEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6664(%rax), %r11
+       movq    6792(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6664(%rax), %r11
+       movq    6792(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31556,7 +32144,7 @@ GL_PREFIX(VertexAttribI1ivEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6664(%rax), %r11
+       movq    6792(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI1ivEXT), .-GL_PREFIX(VertexAttribI1ivEXT)
@@ -31567,7 +32155,7 @@ GL_PREFIX(VertexAttribI1ivEXT):
 GL_PREFIX(VertexAttribI1uiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6672(%rax), %r11
+       movq    6800(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31577,13 +32165,13 @@ GL_PREFIX(VertexAttribI1uiEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6672(%rax), %r11
+       movq    6800(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6672(%rax), %r11
+       movq    6800(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31593,7 +32181,7 @@ GL_PREFIX(VertexAttribI1uiEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6672(%rax), %r11
+       movq    6800(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI1uiEXT), .-GL_PREFIX(VertexAttribI1uiEXT)
@@ -31604,7 +32192,7 @@ GL_PREFIX(VertexAttribI1uiEXT):
 GL_PREFIX(VertexAttribI1uivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6680(%rax), %r11
+       movq    6808(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31614,13 +32202,13 @@ GL_PREFIX(VertexAttribI1uivEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6680(%rax), %r11
+       movq    6808(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6680(%rax), %r11
+       movq    6808(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31630,7 +32218,7 @@ GL_PREFIX(VertexAttribI1uivEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6680(%rax), %r11
+       movq    6808(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI1uivEXT), .-GL_PREFIX(VertexAttribI1uivEXT)
@@ -31641,7 +32229,7 @@ GL_PREFIX(VertexAttribI1uivEXT):
 GL_PREFIX(VertexAttribI2iEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6688(%rax), %r11
+       movq    6816(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31651,13 +32239,13 @@ GL_PREFIX(VertexAttribI2iEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6688(%rax), %r11
+       movq    6816(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6688(%rax), %r11
+       movq    6816(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31667,7 +32255,7 @@ GL_PREFIX(VertexAttribI2iEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6688(%rax), %r11
+       movq    6816(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI2iEXT), .-GL_PREFIX(VertexAttribI2iEXT)
@@ -31678,7 +32266,7 @@ GL_PREFIX(VertexAttribI2iEXT):
 GL_PREFIX(VertexAttribI2ivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6696(%rax), %r11
+       movq    6824(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31688,13 +32276,13 @@ GL_PREFIX(VertexAttribI2ivEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6696(%rax), %r11
+       movq    6824(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6696(%rax), %r11
+       movq    6824(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31704,7 +32292,7 @@ GL_PREFIX(VertexAttribI2ivEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6696(%rax), %r11
+       movq    6824(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI2ivEXT), .-GL_PREFIX(VertexAttribI2ivEXT)
@@ -31715,7 +32303,7 @@ GL_PREFIX(VertexAttribI2ivEXT):
 GL_PREFIX(VertexAttribI2uiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6704(%rax), %r11
+       movq    6832(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31725,13 +32313,13 @@ GL_PREFIX(VertexAttribI2uiEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6704(%rax), %r11
+       movq    6832(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6704(%rax), %r11
+       movq    6832(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31741,7 +32329,7 @@ GL_PREFIX(VertexAttribI2uiEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6704(%rax), %r11
+       movq    6832(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI2uiEXT), .-GL_PREFIX(VertexAttribI2uiEXT)
@@ -31752,7 +32340,7 @@ GL_PREFIX(VertexAttribI2uiEXT):
 GL_PREFIX(VertexAttribI2uivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6712(%rax), %r11
+       movq    6840(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31762,13 +32350,13 @@ GL_PREFIX(VertexAttribI2uivEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6712(%rax), %r11
+       movq    6840(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6712(%rax), %r11
+       movq    6840(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31778,7 +32366,7 @@ GL_PREFIX(VertexAttribI2uivEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6712(%rax), %r11
+       movq    6840(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI2uivEXT), .-GL_PREFIX(VertexAttribI2uivEXT)
@@ -31789,7 +32377,7 @@ GL_PREFIX(VertexAttribI2uivEXT):
 GL_PREFIX(VertexAttribI3iEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6720(%rax), %r11
+       movq    6848(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31803,13 +32391,13 @@ GL_PREFIX(VertexAttribI3iEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6720(%rax), %r11
+       movq    6848(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6720(%rax), %r11
+       movq    6848(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31823,7 +32411,7 @@ GL_PREFIX(VertexAttribI3iEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6720(%rax), %r11
+       movq    6848(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI3iEXT), .-GL_PREFIX(VertexAttribI3iEXT)
@@ -31834,7 +32422,7 @@ GL_PREFIX(VertexAttribI3iEXT):
 GL_PREFIX(VertexAttribI3ivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6728(%rax), %r11
+       movq    6856(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31844,13 +32432,13 @@ GL_PREFIX(VertexAttribI3ivEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6728(%rax), %r11
+       movq    6856(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6728(%rax), %r11
+       movq    6856(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31860,7 +32448,7 @@ GL_PREFIX(VertexAttribI3ivEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6728(%rax), %r11
+       movq    6856(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI3ivEXT), .-GL_PREFIX(VertexAttribI3ivEXT)
@@ -31871,7 +32459,7 @@ GL_PREFIX(VertexAttribI3ivEXT):
 GL_PREFIX(VertexAttribI3uiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6736(%rax), %r11
+       movq    6864(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31885,13 +32473,13 @@ GL_PREFIX(VertexAttribI3uiEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6736(%rax), %r11
+       movq    6864(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6736(%rax), %r11
+       movq    6864(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31905,7 +32493,7 @@ GL_PREFIX(VertexAttribI3uiEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6736(%rax), %r11
+       movq    6864(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI3uiEXT), .-GL_PREFIX(VertexAttribI3uiEXT)
@@ -31916,7 +32504,7 @@ GL_PREFIX(VertexAttribI3uiEXT):
 GL_PREFIX(VertexAttribI3uivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6744(%rax), %r11
+       movq    6872(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31926,13 +32514,13 @@ GL_PREFIX(VertexAttribI3uivEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6744(%rax), %r11
+       movq    6872(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6744(%rax), %r11
+       movq    6872(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31942,7 +32530,7 @@ GL_PREFIX(VertexAttribI3uivEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6744(%rax), %r11
+       movq    6872(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI3uivEXT), .-GL_PREFIX(VertexAttribI3uivEXT)
@@ -31953,7 +32541,7 @@ GL_PREFIX(VertexAttribI3uivEXT):
 GL_PREFIX(VertexAttribI4bvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6752(%rax), %r11
+       movq    6880(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -31963,13 +32551,13 @@ GL_PREFIX(VertexAttribI4bvEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6752(%rax), %r11
+       movq    6880(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6752(%rax), %r11
+       movq    6880(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -31979,7 +32567,7 @@ GL_PREFIX(VertexAttribI4bvEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6752(%rax), %r11
+       movq    6880(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI4bvEXT), .-GL_PREFIX(VertexAttribI4bvEXT)
@@ -31990,7 +32578,7 @@ GL_PREFIX(VertexAttribI4bvEXT):
 GL_PREFIX(VertexAttribI4iEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6760(%rax), %r11
+       movq    6888(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32004,13 +32592,13 @@ GL_PREFIX(VertexAttribI4iEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6760(%rax), %r11
+       movq    6888(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6760(%rax), %r11
+       movq    6888(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32024,7 +32612,7 @@ GL_PREFIX(VertexAttribI4iEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6760(%rax), %r11
+       movq    6888(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI4iEXT), .-GL_PREFIX(VertexAttribI4iEXT)
@@ -32035,7 +32623,7 @@ GL_PREFIX(VertexAttribI4iEXT):
 GL_PREFIX(VertexAttribI4ivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6768(%rax), %r11
+       movq    6896(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32045,13 +32633,13 @@ GL_PREFIX(VertexAttribI4ivEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6768(%rax), %r11
+       movq    6896(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6768(%rax), %r11
+       movq    6896(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32061,7 +32649,7 @@ GL_PREFIX(VertexAttribI4ivEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6768(%rax), %r11
+       movq    6896(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI4ivEXT), .-GL_PREFIX(VertexAttribI4ivEXT)
@@ -32072,7 +32660,7 @@ GL_PREFIX(VertexAttribI4ivEXT):
 GL_PREFIX(VertexAttribI4svEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6776(%rax), %r11
+       movq    6904(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32082,13 +32670,13 @@ GL_PREFIX(VertexAttribI4svEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6776(%rax), %r11
+       movq    6904(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6776(%rax), %r11
+       movq    6904(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32098,7 +32686,7 @@ GL_PREFIX(VertexAttribI4svEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6776(%rax), %r11
+       movq    6904(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI4svEXT), .-GL_PREFIX(VertexAttribI4svEXT)
@@ -32109,7 +32697,7 @@ GL_PREFIX(VertexAttribI4svEXT):
 GL_PREFIX(VertexAttribI4ubvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6784(%rax), %r11
+       movq    6912(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32119,13 +32707,13 @@ GL_PREFIX(VertexAttribI4ubvEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6784(%rax), %r11
+       movq    6912(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6784(%rax), %r11
+       movq    6912(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32135,7 +32723,7 @@ GL_PREFIX(VertexAttribI4ubvEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6784(%rax), %r11
+       movq    6912(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI4ubvEXT), .-GL_PREFIX(VertexAttribI4ubvEXT)
@@ -32146,7 +32734,7 @@ GL_PREFIX(VertexAttribI4ubvEXT):
 GL_PREFIX(VertexAttribI4uiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6792(%rax), %r11
+       movq    6920(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32160,13 +32748,13 @@ GL_PREFIX(VertexAttribI4uiEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6792(%rax), %r11
+       movq    6920(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6792(%rax), %r11
+       movq    6920(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32180,7 +32768,7 @@ GL_PREFIX(VertexAttribI4uiEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6792(%rax), %r11
+       movq    6920(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI4uiEXT), .-GL_PREFIX(VertexAttribI4uiEXT)
@@ -32191,7 +32779,7 @@ GL_PREFIX(VertexAttribI4uiEXT):
 GL_PREFIX(VertexAttribI4uivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6800(%rax), %r11
+       movq    6928(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32201,13 +32789,13 @@ GL_PREFIX(VertexAttribI4uivEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6800(%rax), %r11
+       movq    6928(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6800(%rax), %r11
+       movq    6928(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32217,7 +32805,7 @@ GL_PREFIX(VertexAttribI4uivEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6800(%rax), %r11
+       movq    6928(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI4uivEXT), .-GL_PREFIX(VertexAttribI4uivEXT)
@@ -32228,7 +32816,7 @@ GL_PREFIX(VertexAttribI4uivEXT):
 GL_PREFIX(VertexAttribI4usvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6808(%rax), %r11
+       movq    6936(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32238,13 +32826,13 @@ GL_PREFIX(VertexAttribI4usvEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6808(%rax), %r11
+       movq    6936(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6808(%rax), %r11
+       movq    6936(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32254,7 +32842,7 @@ GL_PREFIX(VertexAttribI4usvEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6808(%rax), %r11
+       movq    6936(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribI4usvEXT), .-GL_PREFIX(VertexAttribI4usvEXT)
@@ -32265,7 +32853,7 @@ GL_PREFIX(VertexAttribI4usvEXT):
 GL_PREFIX(VertexAttribIPointerEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6816(%rax), %r11
+       movq    6944(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32279,13 +32867,13 @@ GL_PREFIX(VertexAttribIPointerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6816(%rax), %r11
+       movq    6944(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6816(%rax), %r11
+       movq    6944(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32299,7 +32887,7 @@ GL_PREFIX(VertexAttribIPointerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6816(%rax), %r11
+       movq    6944(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(VertexAttribIPointerEXT), .-GL_PREFIX(VertexAttribIPointerEXT)
@@ -32310,7 +32898,7 @@ GL_PREFIX(VertexAttribIPointerEXT):
 GL_PREFIX(FramebufferTextureLayerEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6824(%rax), %r11
+       movq    6952(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32324,13 +32912,13 @@ GL_PREFIX(FramebufferTextureLayerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6824(%rax), %r11
+       movq    6952(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6824(%rax), %r11
+       movq    6952(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32344,7 +32932,7 @@ GL_PREFIX(FramebufferTextureLayerEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6824(%rax), %r11
+       movq    6952(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(FramebufferTextureLayerEXT), .-GL_PREFIX(FramebufferTextureLayerEXT)
@@ -32355,7 +32943,7 @@ GL_PREFIX(FramebufferTextureLayerEXT):
 GL_PREFIX(ColorMaskIndexedEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6832(%rax), %r11
+       movq    6960(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32369,13 +32957,13 @@ GL_PREFIX(ColorMaskIndexedEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6832(%rax), %r11
+       movq    6960(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6832(%rax), %r11
+       movq    6960(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32389,7 +32977,7 @@ GL_PREFIX(ColorMaskIndexedEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6832(%rax), %r11
+       movq    6960(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ColorMaskIndexedEXT), .-GL_PREFIX(ColorMaskIndexedEXT)
@@ -32400,7 +32988,7 @@ GL_PREFIX(ColorMaskIndexedEXT):
 GL_PREFIX(DisableIndexedEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6840(%rax), %r11
+       movq    6968(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32410,13 +32998,13 @@ GL_PREFIX(DisableIndexedEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6840(%rax), %r11
+       movq    6968(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6840(%rax), %r11
+       movq    6968(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32426,7 +33014,7 @@ GL_PREFIX(DisableIndexedEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6840(%rax), %r11
+       movq    6968(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(DisableIndexedEXT), .-GL_PREFIX(DisableIndexedEXT)
@@ -32437,7 +33025,7 @@ GL_PREFIX(DisableIndexedEXT):
 GL_PREFIX(EnableIndexedEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6848(%rax), %r11
+       movq    6976(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32447,13 +33035,13 @@ GL_PREFIX(EnableIndexedEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6848(%rax), %r11
+       movq    6976(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6848(%rax), %r11
+       movq    6976(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32463,7 +33051,7 @@ GL_PREFIX(EnableIndexedEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6848(%rax), %r11
+       movq    6976(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(EnableIndexedEXT), .-GL_PREFIX(EnableIndexedEXT)
@@ -32474,7 +33062,7 @@ GL_PREFIX(EnableIndexedEXT):
 GL_PREFIX(GetBooleanIndexedvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6856(%rax), %r11
+       movq    6984(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32484,13 +33072,13 @@ GL_PREFIX(GetBooleanIndexedvEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6856(%rax), %r11
+       movq    6984(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6856(%rax), %r11
+       movq    6984(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32500,7 +33088,7 @@ GL_PREFIX(GetBooleanIndexedvEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6856(%rax), %r11
+       movq    6984(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetBooleanIndexedvEXT), .-GL_PREFIX(GetBooleanIndexedvEXT)
@@ -32511,7 +33099,7 @@ GL_PREFIX(GetBooleanIndexedvEXT):
 GL_PREFIX(GetIntegerIndexedvEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6864(%rax), %r11
+       movq    6992(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32521,13 +33109,13 @@ GL_PREFIX(GetIntegerIndexedvEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6864(%rax), %r11
+       movq    6992(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6864(%rax), %r11
+       movq    6992(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32537,7 +33125,7 @@ GL_PREFIX(GetIntegerIndexedvEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6864(%rax), %r11
+       movq    6992(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetIntegerIndexedvEXT), .-GL_PREFIX(GetIntegerIndexedvEXT)
@@ -32548,7 +33136,7 @@ GL_PREFIX(GetIntegerIndexedvEXT):
 GL_PREFIX(IsEnabledIndexedEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6872(%rax), %r11
+       movq    7000(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32558,13 +33146,13 @@ GL_PREFIX(IsEnabledIndexedEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6872(%rax), %r11
+       movq    7000(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6872(%rax), %r11
+       movq    7000(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32574,7 +33162,7 @@ GL_PREFIX(IsEnabledIndexedEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6872(%rax), %r11
+       movq    7000(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(IsEnabledIndexedEXT), .-GL_PREFIX(IsEnabledIndexedEXT)
@@ -32585,7 +33173,7 @@ GL_PREFIX(IsEnabledIndexedEXT):
 GL_PREFIX(ClearColorIiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6880(%rax), %r11
+       movq    7008(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32599,13 +33187,13 @@ GL_PREFIX(ClearColorIiEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6880(%rax), %r11
+       movq    7008(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6880(%rax), %r11
+       movq    7008(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32619,7 +33207,7 @@ GL_PREFIX(ClearColorIiEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6880(%rax), %r11
+       movq    7008(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ClearColorIiEXT), .-GL_PREFIX(ClearColorIiEXT)
@@ -32630,7 +33218,7 @@ GL_PREFIX(ClearColorIiEXT):
 GL_PREFIX(ClearColorIuiEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6888(%rax), %r11
+       movq    7016(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32644,13 +33232,13 @@ GL_PREFIX(ClearColorIuiEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6888(%rax), %r11
+       movq    7016(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6888(%rax), %r11
+       movq    7016(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32664,7 +33252,7 @@ GL_PREFIX(ClearColorIuiEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6888(%rax), %r11
+       movq    7016(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ClearColorIuiEXT), .-GL_PREFIX(ClearColorIuiEXT)
@@ -32675,7 +33263,7 @@ GL_PREFIX(ClearColorIuiEXT):
 GL_PREFIX(GetTexParameterIivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6896(%rax), %r11
+       movq    7024(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32685,13 +33273,13 @@ GL_PREFIX(GetTexParameterIivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6896(%rax), %r11
+       movq    7024(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6896(%rax), %r11
+       movq    7024(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32701,7 +33289,7 @@ GL_PREFIX(GetTexParameterIivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6896(%rax), %r11
+       movq    7024(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetTexParameterIivEXT), .-GL_PREFIX(GetTexParameterIivEXT)
@@ -32712,7 +33300,7 @@ GL_PREFIX(GetTexParameterIivEXT):
 GL_PREFIX(GetTexParameterIuivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6904(%rax), %r11
+       movq    7032(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32722,13 +33310,13 @@ GL_PREFIX(GetTexParameterIuivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6904(%rax), %r11
+       movq    7032(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6904(%rax), %r11
+       movq    7032(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32738,7 +33326,7 @@ GL_PREFIX(GetTexParameterIuivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6904(%rax), %r11
+       movq    7032(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetTexParameterIuivEXT), .-GL_PREFIX(GetTexParameterIuivEXT)
@@ -32749,7 +33337,7 @@ GL_PREFIX(GetTexParameterIuivEXT):
 GL_PREFIX(TexParameterIivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6912(%rax), %r11
+       movq    7040(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32759,13 +33347,13 @@ GL_PREFIX(TexParameterIivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6912(%rax), %r11
+       movq    7040(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6912(%rax), %r11
+       movq    7040(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32775,7 +33363,7 @@ GL_PREFIX(TexParameterIivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6912(%rax), %r11
+       movq    7040(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(TexParameterIivEXT), .-GL_PREFIX(TexParameterIivEXT)
@@ -32786,7 +33374,7 @@ GL_PREFIX(TexParameterIivEXT):
 GL_PREFIX(TexParameterIuivEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6920(%rax), %r11
+       movq    7048(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32796,13 +33384,13 @@ GL_PREFIX(TexParameterIuivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6920(%rax), %r11
+       movq    7048(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6920(%rax), %r11
+       movq    7048(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32812,7 +33400,7 @@ GL_PREFIX(TexParameterIuivEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6920(%rax), %r11
+       movq    7048(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(TexParameterIuivEXT), .-GL_PREFIX(TexParameterIuivEXT)
@@ -32823,7 +33411,7 @@ GL_PREFIX(TexParameterIuivEXT):
 GL_PREFIX(BeginConditionalRenderNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6928(%rax), %r11
+       movq    7056(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32833,13 +33421,13 @@ GL_PREFIX(BeginConditionalRenderNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6928(%rax), %r11
+       movq    7056(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6928(%rax), %r11
+       movq    7056(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32849,7 +33437,7 @@ GL_PREFIX(BeginConditionalRenderNV):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    6928(%rax), %r11
+       movq    7056(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BeginConditionalRenderNV), .-GL_PREFIX(BeginConditionalRenderNV)
@@ -32860,25 +33448,25 @@ GL_PREFIX(BeginConditionalRenderNV):
 GL_PREFIX(EndConditionalRenderNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6936(%rax), %r11
+       movq    7064(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       movq    6936(%rax), %r11
+       movq    7064(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6936(%rax), %r11
+       movq    7064(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       movq    6936(%rax), %r11
+       movq    7064(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(EndConditionalRenderNV), .-GL_PREFIX(EndConditionalRenderNV)
@@ -32889,25 +33477,25 @@ GL_PREFIX(EndConditionalRenderNV):
 GL_PREFIX(BeginTransformFeedbackEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6944(%rax), %r11
+       movq    7072(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    6944(%rax), %r11
+       movq    7072(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6944(%rax), %r11
+       movq    7072(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    6944(%rax), %r11
+       movq    7072(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BeginTransformFeedbackEXT), .-GL_PREFIX(BeginTransformFeedbackEXT)
@@ -32918,7 +33506,7 @@ GL_PREFIX(BeginTransformFeedbackEXT):
 GL_PREFIX(BindBufferBaseEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6952(%rax), %r11
+       movq    7080(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32928,13 +33516,13 @@ GL_PREFIX(BindBufferBaseEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6952(%rax), %r11
+       movq    7080(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6952(%rax), %r11
+       movq    7080(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32944,7 +33532,7 @@ GL_PREFIX(BindBufferBaseEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6952(%rax), %r11
+       movq    7080(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BindBufferBaseEXT), .-GL_PREFIX(BindBufferBaseEXT)
@@ -32955,7 +33543,7 @@ GL_PREFIX(BindBufferBaseEXT):
 GL_PREFIX(BindBufferOffsetEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6960(%rax), %r11
+       movq    7088(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -32969,13 +33557,13 @@ GL_PREFIX(BindBufferOffsetEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6960(%rax), %r11
+       movq    7088(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6960(%rax), %r11
+       movq    7088(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -32989,7 +33577,7 @@ GL_PREFIX(BindBufferOffsetEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6960(%rax), %r11
+       movq    7088(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BindBufferOffsetEXT), .-GL_PREFIX(BindBufferOffsetEXT)
@@ -33000,7 +33588,7 @@ GL_PREFIX(BindBufferOffsetEXT):
 GL_PREFIX(BindBufferRangeEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6968(%rax), %r11
+       movq    7096(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -33014,13 +33602,13 @@ GL_PREFIX(BindBufferRangeEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6968(%rax), %r11
+       movq    7096(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6968(%rax), %r11
+       movq    7096(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -33034,7 +33622,7 @@ GL_PREFIX(BindBufferRangeEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6968(%rax), %r11
+       movq    7096(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(BindBufferRangeEXT), .-GL_PREFIX(BindBufferRangeEXT)
@@ -33045,25 +33633,25 @@ GL_PREFIX(BindBufferRangeEXT):
 GL_PREFIX(EndTransformFeedbackEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6976(%rax), %r11
+       movq    7104(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       movq    6976(%rax), %r11
+       movq    7104(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6976(%rax), %r11
+       movq    7104(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       movq    6976(%rax), %r11
+       movq    7104(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(EndTransformFeedbackEXT), .-GL_PREFIX(EndTransformFeedbackEXT)
@@ -33074,7 +33662,7 @@ GL_PREFIX(EndTransformFeedbackEXT):
 GL_PREFIX(GetTransformFeedbackVaryingEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6984(%rax), %r11
+       movq    7112(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -33092,13 +33680,13 @@ GL_PREFIX(GetTransformFeedbackVaryingEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6984(%rax), %r11
+       movq    7112(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6984(%rax), %r11
+       movq    7112(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -33116,7 +33704,7 @@ GL_PREFIX(GetTransformFeedbackVaryingEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6984(%rax), %r11
+       movq    7112(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetTransformFeedbackVaryingEXT), .-GL_PREFIX(GetTransformFeedbackVaryingEXT)
@@ -33127,7 +33715,7 @@ GL_PREFIX(GetTransformFeedbackVaryingEXT):
 GL_PREFIX(TransformFeedbackVaryingsEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    6992(%rax), %r11
+       movq    7120(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -33141,13 +33729,13 @@ GL_PREFIX(TransformFeedbackVaryingsEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6992(%rax), %r11
+       movq    7120(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    6992(%rax), %r11
+       movq    7120(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -33161,7 +33749,7 @@ GL_PREFIX(TransformFeedbackVaryingsEXT):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    6992(%rax), %r11
+       movq    7120(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(TransformFeedbackVaryingsEXT), .-GL_PREFIX(TransformFeedbackVaryingsEXT)
@@ -33172,37 +33760,37 @@ GL_PREFIX(TransformFeedbackVaryingsEXT):
 GL_PREFIX(ProvokingVertexEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    7000(%rax), %r11
+       movq    7128(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    7000(%rax), %r11
+       movq    7128(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    7000(%rax), %r11
+       movq    7128(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    7000(%rax), %r11
+       movq    7128(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ProvokingVertexEXT), .-GL_PREFIX(ProvokingVertexEXT)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_876)
-       .type   GL_PREFIX(_dispatch_stub_876), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_876))
-GL_PREFIX(_dispatch_stub_876):
+       .globl  GL_PREFIX(_dispatch_stub_892)
+       .type   GL_PREFIX(_dispatch_stub_892), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_892))
+GL_PREFIX(_dispatch_stub_892):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    7008(%rax), %r11
+       movq    7136(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -33212,13 +33800,13 @@ GL_PREFIX(_dispatch_stub_876):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7008(%rax), %r11
+       movq    7136(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    7008(%rax), %r11
+       movq    7136(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -33228,19 +33816,19 @@ GL_PREFIX(_dispatch_stub_876):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7008(%rax), %r11
+       movq    7136(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_876), .-GL_PREFIX(_dispatch_stub_876)
+       .size   GL_PREFIX(_dispatch_stub_892), .-GL_PREFIX(_dispatch_stub_892)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_877)
-       .type   GL_PREFIX(_dispatch_stub_877), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_877))
-GL_PREFIX(_dispatch_stub_877):
+       .globl  GL_PREFIX(_dispatch_stub_893)
+       .type   GL_PREFIX(_dispatch_stub_893), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_893))
+GL_PREFIX(_dispatch_stub_893):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    7016(%rax), %r11
+       movq    7144(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -33250,13 +33838,13 @@ GL_PREFIX(_dispatch_stub_877):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7016(%rax), %r11
+       movq    7144(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    7016(%rax), %r11
+       movq    7144(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -33266,10 +33854,10 @@ GL_PREFIX(_dispatch_stub_877):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7016(%rax), %r11
+       movq    7144(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_877), .-GL_PREFIX(_dispatch_stub_877)
+       .size   GL_PREFIX(_dispatch_stub_893), .-GL_PREFIX(_dispatch_stub_893)
 
        .p2align        4,,15
        .globl  GL_PREFIX(GetObjectParameterivAPPLE)
@@ -33277,7 +33865,7 @@ GL_PREFIX(_dispatch_stub_877):
 GL_PREFIX(GetObjectParameterivAPPLE):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    7024(%rax), %r11
+       movq    7152(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -33291,13 +33879,13 @@ GL_PREFIX(GetObjectParameterivAPPLE):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7024(%rax), %r11
+       movq    7152(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    7024(%rax), %r11
+       movq    7152(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -33311,7 +33899,7 @@ GL_PREFIX(GetObjectParameterivAPPLE):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7024(%rax), %r11
+       movq    7152(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(GetObjectParameterivAPPLE), .-GL_PREFIX(GetObjectParameterivAPPLE)
@@ -33322,7 +33910,7 @@ GL_PREFIX(GetObjectParameterivAPPLE):
 GL_PREFIX(ObjectPurgeableAPPLE):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    7032(%rax), %r11
+       movq    7160(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -33332,13 +33920,13 @@ GL_PREFIX(ObjectPurgeableAPPLE):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7032(%rax), %r11
+       movq    7160(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    7032(%rax), %r11
+       movq    7160(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -33348,7 +33936,7 @@ GL_PREFIX(ObjectPurgeableAPPLE):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7032(%rax), %r11
+       movq    7160(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ObjectPurgeableAPPLE), .-GL_PREFIX(ObjectPurgeableAPPLE)
@@ -33359,7 +33947,7 @@ GL_PREFIX(ObjectPurgeableAPPLE):
 GL_PREFIX(ObjectUnpurgeableAPPLE):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    7040(%rax), %r11
+       movq    7168(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -33369,13 +33957,13 @@ GL_PREFIX(ObjectUnpurgeableAPPLE):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7040(%rax), %r11
+       movq    7168(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    7040(%rax), %r11
+       movq    7168(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -33385,7 +33973,7 @@ GL_PREFIX(ObjectUnpurgeableAPPLE):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7040(%rax), %r11
+       movq    7168(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ObjectUnpurgeableAPPLE), .-GL_PREFIX(ObjectUnpurgeableAPPLE)
@@ -33396,25 +33984,25 @@ GL_PREFIX(ObjectUnpurgeableAPPLE):
 GL_PREFIX(ActiveProgramEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    7048(%rax), %r11
+       movq    7176(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
        call    _x86_64_get_dispatch@PLT
        popq    %rdi
-       movq    7048(%rax), %r11
+       movq    7176(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    7048(%rax), %r11
+       movq    7176(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
        call    _glapi_get_dispatch
        popq    %rdi
-       movq    7048(%rax), %r11
+       movq    7176(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(ActiveProgramEXT), .-GL_PREFIX(ActiveProgramEXT)
@@ -33425,7 +34013,7 @@ GL_PREFIX(ActiveProgramEXT):
 GL_PREFIX(CreateShaderProgramEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    7056(%rax), %r11
+       movq    7184(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -33435,13 +34023,13 @@ GL_PREFIX(CreateShaderProgramEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    7056(%rax), %r11
+       movq    7184(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    7056(%rax), %r11
+       movq    7184(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -33451,7 +34039,7 @@ GL_PREFIX(CreateShaderProgramEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    7056(%rax), %r11
+       movq    7184(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(CreateShaderProgramEXT), .-GL_PREFIX(CreateShaderProgramEXT)
@@ -33462,7 +34050,7 @@ GL_PREFIX(CreateShaderProgramEXT):
 GL_PREFIX(UseShaderProgramEXT):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    7064(%rax), %r11
+       movq    7192(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -33472,13 +34060,13 @@ GL_PREFIX(UseShaderProgramEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    7064(%rax), %r11
+       movq    7192(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    7064(%rax), %r11
+       movq    7192(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -33488,7 +34076,7 @@ GL_PREFIX(UseShaderProgramEXT):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    7064(%rax), %r11
+       movq    7192(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(UseShaderProgramEXT), .-GL_PREFIX(UseShaderProgramEXT)
@@ -33499,37 +34087,37 @@ GL_PREFIX(UseShaderProgramEXT):
 GL_PREFIX(TextureBarrierNV):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    7072(%rax), %r11
+       movq    7200(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rbp
        call    _x86_64_get_dispatch@PLT
        popq    %rbp
-       movq    7072(%rax), %r11
+       movq    7200(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    7072(%rax), %r11
+       movq    7200(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rbp
        call    _glapi_get_dispatch
        popq    %rbp
-       movq    7072(%rax), %r11
+       movq    7200(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(TextureBarrierNV), .-GL_PREFIX(TextureBarrierNV)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_885)
-       .type   GL_PREFIX(_dispatch_stub_885), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_885))
-GL_PREFIX(_dispatch_stub_885):
+       .globl  GL_PREFIX(_dispatch_stub_901)
+       .type   GL_PREFIX(_dispatch_stub_901), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_901))
+GL_PREFIX(_dispatch_stub_901):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    7080(%rax), %r11
+       movq    7208(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -33543,13 +34131,13 @@ GL_PREFIX(_dispatch_stub_885):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7080(%rax), %r11
+       movq    7208(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    7080(%rax), %r11
+       movq    7208(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -33563,19 +34151,19 @@ GL_PREFIX(_dispatch_stub_885):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7080(%rax), %r11
+       movq    7208(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_885), .-GL_PREFIX(_dispatch_stub_885)
+       .size   GL_PREFIX(_dispatch_stub_901), .-GL_PREFIX(_dispatch_stub_901)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_886)
-       .type   GL_PREFIX(_dispatch_stub_886), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_886))
-GL_PREFIX(_dispatch_stub_886):
+       .globl  GL_PREFIX(_dispatch_stub_902)
+       .type   GL_PREFIX(_dispatch_stub_902), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_902))
+GL_PREFIX(_dispatch_stub_902):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    7088(%rax), %r11
+       movq    7216(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -33589,13 +34177,13 @@ GL_PREFIX(_dispatch_stub_886):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7088(%rax), %r11
+       movq    7216(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    7088(%rax), %r11
+       movq    7216(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -33609,19 +34197,19 @@ GL_PREFIX(_dispatch_stub_886):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7088(%rax), %r11
+       movq    7216(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_886), .-GL_PREFIX(_dispatch_stub_886)
+       .size   GL_PREFIX(_dispatch_stub_902), .-GL_PREFIX(_dispatch_stub_902)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_887)
-       .type   GL_PREFIX(_dispatch_stub_887), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_887))
-GL_PREFIX(_dispatch_stub_887):
+       .globl  GL_PREFIX(_dispatch_stub_903)
+       .type   GL_PREFIX(_dispatch_stub_903), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_903))
+GL_PREFIX(_dispatch_stub_903):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    7096(%rax), %r11
+       movq    7224(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -33635,13 +34223,13 @@ GL_PREFIX(_dispatch_stub_887):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7096(%rax), %r11
+       movq    7224(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    7096(%rax), %r11
+       movq    7224(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -33655,19 +34243,19 @@ GL_PREFIX(_dispatch_stub_887):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7096(%rax), %r11
+       movq    7224(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_887), .-GL_PREFIX(_dispatch_stub_887)
+       .size   GL_PREFIX(_dispatch_stub_903), .-GL_PREFIX(_dispatch_stub_903)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_888)
-       .type   GL_PREFIX(_dispatch_stub_888), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_888))
-GL_PREFIX(_dispatch_stub_888):
+       .globl  GL_PREFIX(_dispatch_stub_904)
+       .type   GL_PREFIX(_dispatch_stub_904), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_904))
+GL_PREFIX(_dispatch_stub_904):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    7104(%rax), %r11
+       movq    7232(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -33677,13 +34265,13 @@ GL_PREFIX(_dispatch_stub_888):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7104(%rax), %r11
+       movq    7232(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    7104(%rax), %r11
+       movq    7232(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -33693,19 +34281,19 @@ GL_PREFIX(_dispatch_stub_888):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7104(%rax), %r11
+       movq    7232(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_888), .-GL_PREFIX(_dispatch_stub_888)
+       .size   GL_PREFIX(_dispatch_stub_904), .-GL_PREFIX(_dispatch_stub_904)
 
        .p2align        4,,15
-       .globl  GL_PREFIX(_dispatch_stub_889)
-       .type   GL_PREFIX(_dispatch_stub_889), @function
-       HIDDEN(GL_PREFIX(_dispatch_stub_889))
-GL_PREFIX(_dispatch_stub_889):
+       .globl  GL_PREFIX(_dispatch_stub_905)
+       .type   GL_PREFIX(_dispatch_stub_905), @function
+       HIDDEN(GL_PREFIX(_dispatch_stub_905))
+GL_PREFIX(_dispatch_stub_905):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    7112(%rax), %r11
+       movq    7240(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -33715,13 +34303,13 @@ GL_PREFIX(_dispatch_stub_889):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7112(%rax), %r11
+       movq    7240(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    7112(%rax), %r11
+       movq    7240(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -33731,10 +34319,10 @@ GL_PREFIX(_dispatch_stub_889):
        popq    %rdx
        popq    %rsi
        popq    %rdi
-       movq    7112(%rax), %r11
+       movq    7240(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
-       .size   GL_PREFIX(_dispatch_stub_889), .-GL_PREFIX(_dispatch_stub_889)
+       .size   GL_PREFIX(_dispatch_stub_905), .-GL_PREFIX(_dispatch_stub_905)
 
        .p2align        4,,15
        .globl  GL_PREFIX(EGLImageTargetRenderbufferStorageOES)
@@ -33742,7 +34330,7 @@ GL_PREFIX(_dispatch_stub_889):
 GL_PREFIX(EGLImageTargetRenderbufferStorageOES):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    7120(%rax), %r11
+       movq    7248(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -33752,13 +34340,13 @@ GL_PREFIX(EGLImageTargetRenderbufferStorageOES):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    7120(%rax), %r11
+       movq    7248(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    7120(%rax), %r11
+       movq    7248(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -33768,7 +34356,7 @@ GL_PREFIX(EGLImageTargetRenderbufferStorageOES):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    7120(%rax), %r11
+       movq    7248(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(EGLImageTargetRenderbufferStorageOES), .-GL_PREFIX(EGLImageTargetRenderbufferStorageOES)
@@ -33779,7 +34367,7 @@ GL_PREFIX(EGLImageTargetRenderbufferStorageOES):
 GL_PREFIX(EGLImageTargetTexture2DOES):
 #if defined(GLX_USE_TLS)
        call    _x86_64_get_dispatch@PLT
-       movq    7128(%rax), %r11
+       movq    7256(%rax), %r11
        jmp     *%r11
 #elif defined(PTHREADS)
        pushq   %rdi
@@ -33789,13 +34377,13 @@ GL_PREFIX(EGLImageTargetTexture2DOES):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    7128(%rax), %r11
+       movq    7256(%rax), %r11
        jmp     *%r11
 #else
        movq    _glapi_Dispatch(%rip), %rax
        testq   %rax, %rax
        je      1f
-       movq    7128(%rax), %r11
+       movq    7256(%rax), %r11
        jmp     *%r11
 1:
        pushq   %rdi
@@ -33805,7 +34393,7 @@ GL_PREFIX(EGLImageTargetTexture2DOES):
        popq    %rbp
        popq    %rsi
        popq    %rdi
-       movq    7128(%rax), %r11
+       movq    7256(%rax), %r11
        jmp     *%r11
 #endif /* defined(GLX_USE_TLS) */
        .size   GL_PREFIX(EGLImageTargetTexture2DOES), .-GL_PREFIX(EGLImageTargetTexture2DOES)
@@ -34068,10 +34656,10 @@ GL_PREFIX(EGLImageTargetTexture2DOES):
        .globl GL_PREFIX(IsProgramARB) ; .set GL_PREFIX(IsProgramARB), GL_PREFIX(IsProgramNV)
        .globl GL_PREFIX(PointParameteri) ; .set GL_PREFIX(PointParameteri), GL_PREFIX(PointParameteriNV)
        .globl GL_PREFIX(PointParameteriv) ; .set GL_PREFIX(PointParameteriv), GL_PREFIX(PointParameterivNV)
-       .globl GL_PREFIX(DeleteVertexArrays) ; .set GL_PREFIX(DeleteVertexArrays), GL_PREFIX(_dispatch_stub_786)
-       .globl GL_PREFIX(IsVertexArray) ; .set GL_PREFIX(IsVertexArray), GL_PREFIX(_dispatch_stub_788)
+       .globl GL_PREFIX(DeleteVertexArrays) ; .set GL_PREFIX(DeleteVertexArrays), GL_PREFIX(_dispatch_stub_802)
+       .globl GL_PREFIX(IsVertexArray) ; .set GL_PREFIX(IsVertexArray), GL_PREFIX(_dispatch_stub_804)
        .globl GL_PREFIX(PrimitiveRestartIndex) ; .set GL_PREFIX(PrimitiveRestartIndex), GL_PREFIX(PrimitiveRestartIndexNV)
-       .globl GL_PREFIX(BlendEquationSeparate) ; .set GL_PREFIX(BlendEquationSeparate), GL_PREFIX(_dispatch_stub_798)
+       .globl GL_PREFIX(BlendEquationSeparate) ; .set GL_PREFIX(BlendEquationSeparate), GL_PREFIX(_dispatch_stub_814)
        .globl GL_PREFIX(BindFramebuffer) ; .set GL_PREFIX(BindFramebuffer), GL_PREFIX(BindFramebufferEXT)
        .globl GL_PREFIX(BindRenderbuffer) ; .set GL_PREFIX(BindRenderbuffer), GL_PREFIX(BindRenderbufferEXT)
        .globl GL_PREFIX(CheckFramebufferStatus) ; .set GL_PREFIX(CheckFramebufferStatus), GL_PREFIX(CheckFramebufferStatusEXT)
@@ -34089,7 +34677,7 @@ GL_PREFIX(EGLImageTargetTexture2DOES):
        .globl GL_PREFIX(IsFramebuffer) ; .set GL_PREFIX(IsFramebuffer), GL_PREFIX(IsFramebufferEXT)
        .globl GL_PREFIX(IsRenderbuffer) ; .set GL_PREFIX(IsRenderbuffer), GL_PREFIX(IsRenderbufferEXT)
        .globl GL_PREFIX(RenderbufferStorage) ; .set GL_PREFIX(RenderbufferStorage), GL_PREFIX(RenderbufferStorageEXT)
-       .globl GL_PREFIX(BlitFramebuffer) ; .set GL_PREFIX(BlitFramebuffer), GL_PREFIX(_dispatch_stub_816)
+       .globl GL_PREFIX(BlitFramebuffer) ; .set GL_PREFIX(BlitFramebuffer), GL_PREFIX(_dispatch_stub_832)
        .globl GL_PREFIX(BindFragDataLocation) ; .set GL_PREFIX(BindFragDataLocation), GL_PREFIX(BindFragDataLocationEXT)
        .globl GL_PREFIX(GetFragDataLocation) ; .set GL_PREFIX(GetFragDataLocation), GL_PREFIX(GetFragDataLocationEXT)
        .globl GL_PREFIX(GetUniformuiv) ; .set GL_PREFIX(GetUniformuiv), GL_PREFIX(GetUniformuivEXT)
index 2ef45f3b7344b2b9b327f5c27fa48732de2b3371..f56dc748deef28fb5aa5d674bc3507606d866fc8 100644 (file)
@@ -722,361 +722,377 @@ GLNAME(gl_dispatch_functions_start):
        GL_STUB(GetActiveAttribARB, 569, GetActiveAttribARB@28)
        GL_STUB(GetAttribLocationARB, 570, GetAttribLocationARB@8)
        GL_STUB(DrawBuffersARB, 571, DrawBuffersARB@8)
-       GL_STUB(DrawArraysInstancedARB, 572, DrawArraysInstancedARB@16)
-       GL_STUB(DrawElementsInstancedARB, 573, DrawElementsInstancedARB@20)
-       GL_STUB(RenderbufferStorageMultisample, 574, RenderbufferStorageMultisample@20)
-       GL_STUB(FramebufferTextureARB, 575, FramebufferTextureARB@16)
-       GL_STUB(FramebufferTextureFaceARB, 576, FramebufferTextureFaceARB@20)
-       GL_STUB(ProgramParameteriARB, 577, ProgramParameteriARB@12)
-       GL_STUB(VertexAttribDivisorARB, 578, VertexAttribDivisorARB@8)
-       GL_STUB(FlushMappedBufferRange, 579, FlushMappedBufferRange@12)
-       GL_STUB(MapBufferRange, 580, MapBufferRange@16)
-       GL_STUB(BindVertexArray, 581, BindVertexArray@4)
-       GL_STUB(GenVertexArrays, 582, GenVertexArrays@8)
-       GL_STUB(CopyBufferSubData, 583, CopyBufferSubData@20)
-       GL_STUB(ClientWaitSync, 584, ClientWaitSync@12)
-       GL_STUB(DeleteSync, 585, DeleteSync@4)
-       GL_STUB(FenceSync, 586, FenceSync@8)
-       GL_STUB(GetInteger64v, 587, GetInteger64v@8)
-       GL_STUB(GetSynciv, 588, GetSynciv@20)
-       GL_STUB(IsSync, 589, IsSync@4)
-       GL_STUB(WaitSync, 590, WaitSync@12)
-       GL_STUB(DrawElementsBaseVertex, 591, DrawElementsBaseVertex@20)
-       GL_STUB(DrawRangeElementsBaseVertex, 592, DrawRangeElementsBaseVertex@28)
-       GL_STUB(MultiDrawElementsBaseVertex, 593, MultiDrawElementsBaseVertex@24)
-       GL_STUB(BlendEquationSeparateiARB, 594, BlendEquationSeparateiARB@12)
-       GL_STUB(BlendEquationiARB, 595, BlendEquationiARB@8)
-       GL_STUB(BlendFuncSeparateiARB, 596, BlendFuncSeparateiARB@20)
-       GL_STUB(BlendFunciARB, 597, BlendFunciARB@12)
-       GL_STUB(BindTransformFeedback, 598, BindTransformFeedback@8)
-       GL_STUB(DeleteTransformFeedbacks, 599, DeleteTransformFeedbacks@8)
-       GL_STUB(DrawTransformFeedback, 600, DrawTransformFeedback@8)
-       GL_STUB(GenTransformFeedbacks, 601, GenTransformFeedbacks@8)
-       GL_STUB(IsTransformFeedback, 602, IsTransformFeedback@4)
-       GL_STUB(PauseTransformFeedback, 603, PauseTransformFeedback@0)
-       GL_STUB(ResumeTransformFeedback, 604, ResumeTransformFeedback@0)
-       GL_STUB(ClearDepthf, 605, ClearDepthf@4)
-       GL_STUB(DepthRangef, 606, DepthRangef@8)
-       GL_STUB(GetShaderPrecisionFormat, 607, GetShaderPrecisionFormat@16)
-       GL_STUB(ReleaseShaderCompiler, 608, ReleaseShaderCompiler@0)
-       GL_STUB(ShaderBinary, 609, ShaderBinary@20)
-       GL_STUB(PolygonOffsetEXT, 610, PolygonOffsetEXT@8)
-       GL_STUB(_dispatch_stub_611, 611, _dispatch_stub_611@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_611, _dispatch_stub_611@8))
-       GL_STUB(_dispatch_stub_612, 612, _dispatch_stub_612@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_612, _dispatch_stub_612@8))
-       GL_STUB(_dispatch_stub_613, 613, _dispatch_stub_613@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_613, _dispatch_stub_613@8))
-       GL_STUB(_dispatch_stub_614, 614, _dispatch_stub_614@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_614, _dispatch_stub_614@8))
-       GL_STUB(_dispatch_stub_615, 615, _dispatch_stub_615@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_615, _dispatch_stub_615@8))
-       GL_STUB(_dispatch_stub_616, 616, _dispatch_stub_616@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_616, _dispatch_stub_616@8))
-       GL_STUB(_dispatch_stub_617, 617, _dispatch_stub_617@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_617, _dispatch_stub_617@8))
-       GL_STUB(_dispatch_stub_618, 618, _dispatch_stub_618@4)
-       HIDDEN(GL_PREFIX(_dispatch_stub_618, _dispatch_stub_618@4))
-       GL_STUB(ColorPointerEXT, 619, ColorPointerEXT@20)
-       GL_STUB(EdgeFlagPointerEXT, 620, EdgeFlagPointerEXT@12)
-       GL_STUB(IndexPointerEXT, 621, IndexPointerEXT@16)
-       GL_STUB(NormalPointerEXT, 622, NormalPointerEXT@16)
-       GL_STUB(TexCoordPointerEXT, 623, TexCoordPointerEXT@20)
-       GL_STUB(VertexPointerEXT, 624, VertexPointerEXT@20)
-       GL_STUB(PointParameterfEXT, 625, PointParameterfEXT@8)
-       GL_STUB(PointParameterfvEXT, 626, PointParameterfvEXT@8)
-       GL_STUB(LockArraysEXT, 627, LockArraysEXT@8)
-       GL_STUB(UnlockArraysEXT, 628, UnlockArraysEXT@0)
-       GL_STUB(SecondaryColor3bEXT, 629, SecondaryColor3bEXT@12)
-       GL_STUB(SecondaryColor3bvEXT, 630, SecondaryColor3bvEXT@4)
-       GL_STUB(SecondaryColor3dEXT, 631, SecondaryColor3dEXT@24)
-       GL_STUB(SecondaryColor3dvEXT, 632, SecondaryColor3dvEXT@4)
-       GL_STUB(SecondaryColor3fEXT, 633, SecondaryColor3fEXT@12)
-       GL_STUB(SecondaryColor3fvEXT, 634, SecondaryColor3fvEXT@4)
-       GL_STUB(SecondaryColor3iEXT, 635, SecondaryColor3iEXT@12)
-       GL_STUB(SecondaryColor3ivEXT, 636, SecondaryColor3ivEXT@4)
-       GL_STUB(SecondaryColor3sEXT, 637, SecondaryColor3sEXT@12)
-       GL_STUB(SecondaryColor3svEXT, 638, SecondaryColor3svEXT@4)
-       GL_STUB(SecondaryColor3ubEXT, 639, SecondaryColor3ubEXT@12)
-       GL_STUB(SecondaryColor3ubvEXT, 640, SecondaryColor3ubvEXT@4)
-       GL_STUB(SecondaryColor3uiEXT, 641, SecondaryColor3uiEXT@12)
-       GL_STUB(SecondaryColor3uivEXT, 642, SecondaryColor3uivEXT@4)
-       GL_STUB(SecondaryColor3usEXT, 643, SecondaryColor3usEXT@12)
-       GL_STUB(SecondaryColor3usvEXT, 644, SecondaryColor3usvEXT@4)
-       GL_STUB(SecondaryColorPointerEXT, 645, SecondaryColorPointerEXT@16)
-       GL_STUB(MultiDrawArraysEXT, 646, MultiDrawArraysEXT@16)
-       GL_STUB(MultiDrawElementsEXT, 647, MultiDrawElementsEXT@20)
-       GL_STUB(FogCoordPointerEXT, 648, FogCoordPointerEXT@12)
-       GL_STUB(FogCoorddEXT, 649, FogCoorddEXT@8)
-       GL_STUB(FogCoorddvEXT, 650, FogCoorddvEXT@4)
-       GL_STUB(FogCoordfEXT, 651, FogCoordfEXT@4)
-       GL_STUB(FogCoordfvEXT, 652, FogCoordfvEXT@4)
-       GL_STUB(_dispatch_stub_653, 653, _dispatch_stub_653@4)
-       HIDDEN(GL_PREFIX(_dispatch_stub_653, _dispatch_stub_653@4))
-       GL_STUB(BlendFuncSeparateEXT, 654, BlendFuncSeparateEXT@16)
-       GL_STUB(FlushVertexArrayRangeNV, 655, FlushVertexArrayRangeNV@0)
-       GL_STUB(VertexArrayRangeNV, 656, VertexArrayRangeNV@8)
-       GL_STUB(CombinerInputNV, 657, CombinerInputNV@24)
-       GL_STUB(CombinerOutputNV, 658, CombinerOutputNV@40)
-       GL_STUB(CombinerParameterfNV, 659, CombinerParameterfNV@8)
-       GL_STUB(CombinerParameterfvNV, 660, CombinerParameterfvNV@8)
-       GL_STUB(CombinerParameteriNV, 661, CombinerParameteriNV@8)
-       GL_STUB(CombinerParameterivNV, 662, CombinerParameterivNV@8)
-       GL_STUB(FinalCombinerInputNV, 663, FinalCombinerInputNV@16)
-       GL_STUB(GetCombinerInputParameterfvNV, 664, GetCombinerInputParameterfvNV@20)
-       GL_STUB(GetCombinerInputParameterivNV, 665, GetCombinerInputParameterivNV@20)
-       GL_STUB(GetCombinerOutputParameterfvNV, 666, GetCombinerOutputParameterfvNV@16)
-       GL_STUB(GetCombinerOutputParameterivNV, 667, GetCombinerOutputParameterivNV@16)
-       GL_STUB(GetFinalCombinerInputParameterfvNV, 668, GetFinalCombinerInputParameterfvNV@12)
-       GL_STUB(GetFinalCombinerInputParameterivNV, 669, GetFinalCombinerInputParameterivNV@12)
-       GL_STUB(ResizeBuffersMESA, 670, ResizeBuffersMESA@0)
-       GL_STUB(WindowPos2dMESA, 671, WindowPos2dMESA@16)
-       GL_STUB(WindowPos2dvMESA, 672, WindowPos2dvMESA@4)
-       GL_STUB(WindowPos2fMESA, 673, WindowPos2fMESA@8)
-       GL_STUB(WindowPos2fvMESA, 674, WindowPos2fvMESA@4)
-       GL_STUB(WindowPos2iMESA, 675, WindowPos2iMESA@8)
-       GL_STUB(WindowPos2ivMESA, 676, WindowPos2ivMESA@4)
-       GL_STUB(WindowPos2sMESA, 677, WindowPos2sMESA@8)
-       GL_STUB(WindowPos2svMESA, 678, WindowPos2svMESA@4)
-       GL_STUB(WindowPos3dMESA, 679, WindowPos3dMESA@24)
-       GL_STUB(WindowPos3dvMESA, 680, WindowPos3dvMESA@4)
-       GL_STUB(WindowPos3fMESA, 681, WindowPos3fMESA@12)
-       GL_STUB(WindowPos3fvMESA, 682, WindowPos3fvMESA@4)
-       GL_STUB(WindowPos3iMESA, 683, WindowPos3iMESA@12)
-       GL_STUB(WindowPos3ivMESA, 684, WindowPos3ivMESA@4)
-       GL_STUB(WindowPos3sMESA, 685, WindowPos3sMESA@12)
-       GL_STUB(WindowPos3svMESA, 686, WindowPos3svMESA@4)
-       GL_STUB(WindowPos4dMESA, 687, WindowPos4dMESA@32)
-       GL_STUB(WindowPos4dvMESA, 688, WindowPos4dvMESA@4)
-       GL_STUB(WindowPos4fMESA, 689, WindowPos4fMESA@16)
-       GL_STUB(WindowPos4fvMESA, 690, WindowPos4fvMESA@4)
-       GL_STUB(WindowPos4iMESA, 691, WindowPos4iMESA@16)
-       GL_STUB(WindowPos4ivMESA, 692, WindowPos4ivMESA@4)
-       GL_STUB(WindowPos4sMESA, 693, WindowPos4sMESA@16)
-       GL_STUB(WindowPos4svMESA, 694, WindowPos4svMESA@4)
-       GL_STUB(_dispatch_stub_695, 695, _dispatch_stub_695@20)
-       HIDDEN(GL_PREFIX(_dispatch_stub_695, _dispatch_stub_695@20))
-       GL_STUB(_dispatch_stub_696, 696, _dispatch_stub_696@24)
-       HIDDEN(GL_PREFIX(_dispatch_stub_696, _dispatch_stub_696@24))
-       GL_STUB(_dispatch_stub_697, 697, _dispatch_stub_697@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_697, _dispatch_stub_697@8))
-       GL_STUB(_dispatch_stub_698, 698, _dispatch_stub_698@4)
-       HIDDEN(GL_PREFIX(_dispatch_stub_698, _dispatch_stub_698@4))
-       GL_STUB(_dispatch_stub_699, 699, _dispatch_stub_699@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_699, _dispatch_stub_699@8))
-       GL_STUB(_dispatch_stub_700, 700, _dispatch_stub_700@12)
-       HIDDEN(GL_PREFIX(_dispatch_stub_700, _dispatch_stub_700@12))
-       GL_STUB(_dispatch_stub_701, 701, _dispatch_stub_701@4)
-       HIDDEN(GL_PREFIX(_dispatch_stub_701, _dispatch_stub_701@4))
-       GL_STUB(_dispatch_stub_702, 702, _dispatch_stub_702@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_702, _dispatch_stub_702@8))
-       GL_STUB(_dispatch_stub_703, 703, _dispatch_stub_703@4)
-       HIDDEN(GL_PREFIX(_dispatch_stub_703, _dispatch_stub_703@4))
-       GL_STUB(AreProgramsResidentNV, 704, AreProgramsResidentNV@12)
-       GL_STUB(BindProgramNV, 705, BindProgramNV@8)
-       GL_STUB(DeleteProgramsNV, 706, DeleteProgramsNV@8)
-       GL_STUB(ExecuteProgramNV, 707, ExecuteProgramNV@12)
-       GL_STUB(GenProgramsNV, 708, GenProgramsNV@8)
-       GL_STUB(GetProgramParameterdvNV, 709, GetProgramParameterdvNV@16)
-       GL_STUB(GetProgramParameterfvNV, 710, GetProgramParameterfvNV@16)
-       GL_STUB(GetProgramStringNV, 711, GetProgramStringNV@12)
-       GL_STUB(GetProgramivNV, 712, GetProgramivNV@12)
-       GL_STUB(GetTrackMatrixivNV, 713, GetTrackMatrixivNV@16)
-       GL_STUB(GetVertexAttribPointervNV, 714, GetVertexAttribPointervNV@12)
-       GL_STUB(GetVertexAttribdvNV, 715, GetVertexAttribdvNV@12)
-       GL_STUB(GetVertexAttribfvNV, 716, GetVertexAttribfvNV@12)
-       GL_STUB(GetVertexAttribivNV, 717, GetVertexAttribivNV@12)
-       GL_STUB(IsProgramNV, 718, IsProgramNV@4)
-       GL_STUB(LoadProgramNV, 719, LoadProgramNV@16)
-       GL_STUB(ProgramParameters4dvNV, 720, ProgramParameters4dvNV@16)
-       GL_STUB(ProgramParameters4fvNV, 721, ProgramParameters4fvNV@16)
-       GL_STUB(RequestResidentProgramsNV, 722, RequestResidentProgramsNV@8)
-       GL_STUB(TrackMatrixNV, 723, TrackMatrixNV@16)
-       GL_STUB(VertexAttrib1dNV, 724, VertexAttrib1dNV@12)
-       GL_STUB(VertexAttrib1dvNV, 725, VertexAttrib1dvNV@8)
-       GL_STUB(VertexAttrib1fNV, 726, VertexAttrib1fNV@8)
-       GL_STUB(VertexAttrib1fvNV, 727, VertexAttrib1fvNV@8)
-       GL_STUB(VertexAttrib1sNV, 728, VertexAttrib1sNV@8)
-       GL_STUB(VertexAttrib1svNV, 729, VertexAttrib1svNV@8)
-       GL_STUB(VertexAttrib2dNV, 730, VertexAttrib2dNV@20)
-       GL_STUB(VertexAttrib2dvNV, 731, VertexAttrib2dvNV@8)
-       GL_STUB(VertexAttrib2fNV, 732, VertexAttrib2fNV@12)
-       GL_STUB(VertexAttrib2fvNV, 733, VertexAttrib2fvNV@8)
-       GL_STUB(VertexAttrib2sNV, 734, VertexAttrib2sNV@12)
-       GL_STUB(VertexAttrib2svNV, 735, VertexAttrib2svNV@8)
-       GL_STUB(VertexAttrib3dNV, 736, VertexAttrib3dNV@28)
-       GL_STUB(VertexAttrib3dvNV, 737, VertexAttrib3dvNV@8)
-       GL_STUB(VertexAttrib3fNV, 738, VertexAttrib3fNV@16)
-       GL_STUB(VertexAttrib3fvNV, 739, VertexAttrib3fvNV@8)
-       GL_STUB(VertexAttrib3sNV, 740, VertexAttrib3sNV@16)
-       GL_STUB(VertexAttrib3svNV, 741, VertexAttrib3svNV@8)
-       GL_STUB(VertexAttrib4dNV, 742, VertexAttrib4dNV@36)
-       GL_STUB(VertexAttrib4dvNV, 743, VertexAttrib4dvNV@8)
-       GL_STUB(VertexAttrib4fNV, 744, VertexAttrib4fNV@20)
-       GL_STUB(VertexAttrib4fvNV, 745, VertexAttrib4fvNV@8)
-       GL_STUB(VertexAttrib4sNV, 746, VertexAttrib4sNV@20)
-       GL_STUB(VertexAttrib4svNV, 747, VertexAttrib4svNV@8)
-       GL_STUB(VertexAttrib4ubNV, 748, VertexAttrib4ubNV@20)
-       GL_STUB(VertexAttrib4ubvNV, 749, VertexAttrib4ubvNV@8)
-       GL_STUB(VertexAttribPointerNV, 750, VertexAttribPointerNV@20)
-       GL_STUB(VertexAttribs1dvNV, 751, VertexAttribs1dvNV@12)
-       GL_STUB(VertexAttribs1fvNV, 752, VertexAttribs1fvNV@12)
-       GL_STUB(VertexAttribs1svNV, 753, VertexAttribs1svNV@12)
-       GL_STUB(VertexAttribs2dvNV, 754, VertexAttribs2dvNV@12)
-       GL_STUB(VertexAttribs2fvNV, 755, VertexAttribs2fvNV@12)
-       GL_STUB(VertexAttribs2svNV, 756, VertexAttribs2svNV@12)
-       GL_STUB(VertexAttribs3dvNV, 757, VertexAttribs3dvNV@12)
-       GL_STUB(VertexAttribs3fvNV, 758, VertexAttribs3fvNV@12)
-       GL_STUB(VertexAttribs3svNV, 759, VertexAttribs3svNV@12)
-       GL_STUB(VertexAttribs4dvNV, 760, VertexAttribs4dvNV@12)
-       GL_STUB(VertexAttribs4fvNV, 761, VertexAttribs4fvNV@12)
-       GL_STUB(VertexAttribs4svNV, 762, VertexAttribs4svNV@12)
-       GL_STUB(VertexAttribs4ubvNV, 763, VertexAttribs4ubvNV@12)
-       GL_STUB(GetTexBumpParameterfvATI, 764, GetTexBumpParameterfvATI@8)
-       GL_STUB(GetTexBumpParameterivATI, 765, GetTexBumpParameterivATI@8)
-       GL_STUB(TexBumpParameterfvATI, 766, TexBumpParameterfvATI@8)
-       GL_STUB(TexBumpParameterivATI, 767, TexBumpParameterivATI@8)
-       GL_STUB(AlphaFragmentOp1ATI, 768, AlphaFragmentOp1ATI@24)
-       GL_STUB(AlphaFragmentOp2ATI, 769, AlphaFragmentOp2ATI@36)
-       GL_STUB(AlphaFragmentOp3ATI, 770, AlphaFragmentOp3ATI@48)
-       GL_STUB(BeginFragmentShaderATI, 771, BeginFragmentShaderATI@0)
-       GL_STUB(BindFragmentShaderATI, 772, BindFragmentShaderATI@4)
-       GL_STUB(ColorFragmentOp1ATI, 773, ColorFragmentOp1ATI@28)
-       GL_STUB(ColorFragmentOp2ATI, 774, ColorFragmentOp2ATI@40)
-       GL_STUB(ColorFragmentOp3ATI, 775, ColorFragmentOp3ATI@52)
-       GL_STUB(DeleteFragmentShaderATI, 776, DeleteFragmentShaderATI@4)
-       GL_STUB(EndFragmentShaderATI, 777, EndFragmentShaderATI@0)
-       GL_STUB(GenFragmentShadersATI, 778, GenFragmentShadersATI@4)
-       GL_STUB(PassTexCoordATI, 779, PassTexCoordATI@12)
-       GL_STUB(SampleMapATI, 780, SampleMapATI@12)
-       GL_STUB(SetFragmentShaderConstantATI, 781, SetFragmentShaderConstantATI@8)
-       GL_STUB(PointParameteriNV, 782, PointParameteriNV@8)
-       GL_STUB(PointParameterivNV, 783, PointParameterivNV@8)
-       GL_STUB(_dispatch_stub_784, 784, _dispatch_stub_784@4)
-       HIDDEN(GL_PREFIX(_dispatch_stub_784, _dispatch_stub_784@4))
-       GL_STUB(_dispatch_stub_785, 785, _dispatch_stub_785@4)
-       HIDDEN(GL_PREFIX(_dispatch_stub_785, _dispatch_stub_785@4))
-       GL_STUB(_dispatch_stub_786, 786, _dispatch_stub_786@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_786, _dispatch_stub_786@8))
-       GL_STUB(_dispatch_stub_787, 787, _dispatch_stub_787@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_787, _dispatch_stub_787@8))
-       GL_STUB(_dispatch_stub_788, 788, _dispatch_stub_788@4)
-       HIDDEN(GL_PREFIX(_dispatch_stub_788, _dispatch_stub_788@4))
-       GL_STUB(GetProgramNamedParameterdvNV, 789, GetProgramNamedParameterdvNV@16)
-       GL_STUB(GetProgramNamedParameterfvNV, 790, GetProgramNamedParameterfvNV@16)
-       GL_STUB(ProgramNamedParameter4dNV, 791, ProgramNamedParameter4dNV@44)
-       GL_STUB(ProgramNamedParameter4dvNV, 792, ProgramNamedParameter4dvNV@16)
-       GL_STUB(ProgramNamedParameter4fNV, 793, ProgramNamedParameter4fNV@28)
-       GL_STUB(ProgramNamedParameter4fvNV, 794, ProgramNamedParameter4fvNV@16)
-       GL_STUB(PrimitiveRestartIndexNV, 795, PrimitiveRestartIndexNV@4)
-       GL_STUB(PrimitiveRestartNV, 796, PrimitiveRestartNV@0)
-       GL_STUB(_dispatch_stub_797, 797, _dispatch_stub_797@16)
-       HIDDEN(GL_PREFIX(_dispatch_stub_797, _dispatch_stub_797@16))
-       GL_STUB(_dispatch_stub_798, 798, _dispatch_stub_798@8)
-       HIDDEN(GL_PREFIX(_dispatch_stub_798, _dispatch_stub_798@8))
-       GL_STUB(BindFramebufferEXT, 799, BindFramebufferEXT@8)
-       GL_STUB(BindRenderbufferEXT, 800, BindRenderbufferEXT@8)
-       GL_STUB(CheckFramebufferStatusEXT, 801, CheckFramebufferStatusEXT@4)
-       GL_STUB(DeleteFramebuffersEXT, 802, DeleteFramebuffersEXT@8)
-       GL_STUB(DeleteRenderbuffersEXT, 803, DeleteRenderbuffersEXT@8)
-       GL_STUB(FramebufferRenderbufferEXT, 804, FramebufferRenderbufferEXT@16)
-       GL_STUB(FramebufferTexture1DEXT, 805, FramebufferTexture1DEXT@20)
-       GL_STUB(FramebufferTexture2DEXT, 806, FramebufferTexture2DEXT@20)
-       GL_STUB(FramebufferTexture3DEXT, 807, FramebufferTexture3DEXT@24)
-       GL_STUB(GenFramebuffersEXT, 808, GenFramebuffersEXT@8)
-       GL_STUB(GenRenderbuffersEXT, 809, GenRenderbuffersEXT@8)
-       GL_STUB(GenerateMipmapEXT, 810, GenerateMipmapEXT@4)
-       GL_STUB(GetFramebufferAttachmentParameterivEXT, 811, GetFramebufferAttachmentParameterivEXT@16)
-       GL_STUB(GetRenderbufferParameterivEXT, 812, GetRenderbufferParameterivEXT@12)
-       GL_STUB(IsFramebufferEXT, 813, IsFramebufferEXT@4)
-       GL_STUB(IsRenderbufferEXT, 814, IsRenderbufferEXT@4)
-       GL_STUB(RenderbufferStorageEXT, 815, RenderbufferStorageEXT@16)
-       GL_STUB(_dispatch_stub_816, 816, _dispatch_stub_816@40)
-       HIDDEN(GL_PREFIX(_dispatch_stub_816, _dispatch_stub_816@40))
-       GL_STUB(_dispatch_stub_817, 817, _dispatch_stub_817@12)
-       HIDDEN(GL_PREFIX(_dispatch_stub_817, _dispatch_stub_817@12))
-       GL_STUB(_dispatch_stub_818, 818, _dispatch_stub_818@12)
-       HIDDEN(GL_PREFIX(_dispatch_stub_818, _dispatch_stub_818@12))
-       GL_STUB(BindFragDataLocationEXT, 819, BindFragDataLocationEXT@12)
-       GL_STUB(GetFragDataLocationEXT, 820, GetFragDataLocationEXT@8)
-       GL_STUB(GetUniformuivEXT, 821, GetUniformuivEXT@12)
-       GL_STUB(GetVertexAttribIivEXT, 822, GetVertexAttribIivEXT@12)
-       GL_STUB(GetVertexAttribIuivEXT, 823, GetVertexAttribIuivEXT@12)
-       GL_STUB(Uniform1uiEXT, 824, Uniform1uiEXT@8)
-       GL_STUB(Uniform1uivEXT, 825, Uniform1uivEXT@12)
-       GL_STUB(Uniform2uiEXT, 826, Uniform2uiEXT@12)
-       GL_STUB(Uniform2uivEXT, 827, Uniform2uivEXT@12)
-       GL_STUB(Uniform3uiEXT, 828, Uniform3uiEXT@16)
-       GL_STUB(Uniform3uivEXT, 829, Uniform3uivEXT@12)
-       GL_STUB(Uniform4uiEXT, 830, Uniform4uiEXT@20)
-       GL_STUB(Uniform4uivEXT, 831, Uniform4uivEXT@12)
-       GL_STUB(VertexAttribI1iEXT, 832, VertexAttribI1iEXT@8)
-       GL_STUB(VertexAttribI1ivEXT, 833, VertexAttribI1ivEXT@8)
-       GL_STUB(VertexAttribI1uiEXT, 834, VertexAttribI1uiEXT@8)
-       GL_STUB(VertexAttribI1uivEXT, 835, VertexAttribI1uivEXT@8)
-       GL_STUB(VertexAttribI2iEXT, 836, VertexAttribI2iEXT@12)
-       GL_STUB(VertexAttribI2ivEXT, 837, VertexAttribI2ivEXT@8)
-       GL_STUB(VertexAttribI2uiEXT, 838, VertexAttribI2uiEXT@12)
-       GL_STUB(VertexAttribI2uivEXT, 839, VertexAttribI2uivEXT@8)
-       GL_STUB(VertexAttribI3iEXT, 840, VertexAttribI3iEXT@16)
-       GL_STUB(VertexAttribI3ivEXT, 841, VertexAttribI3ivEXT@8)
-       GL_STUB(VertexAttribI3uiEXT, 842, VertexAttribI3uiEXT@16)
-       GL_STUB(VertexAttribI3uivEXT, 843, VertexAttribI3uivEXT@8)
-       GL_STUB(VertexAttribI4bvEXT, 844, VertexAttribI4bvEXT@8)
-       GL_STUB(VertexAttribI4iEXT, 845, VertexAttribI4iEXT@20)
-       GL_STUB(VertexAttribI4ivEXT, 846, VertexAttribI4ivEXT@8)
-       GL_STUB(VertexAttribI4svEXT, 847, VertexAttribI4svEXT@8)
-       GL_STUB(VertexAttribI4ubvEXT, 848, VertexAttribI4ubvEXT@8)
-       GL_STUB(VertexAttribI4uiEXT, 849, VertexAttribI4uiEXT@20)
-       GL_STUB(VertexAttribI4uivEXT, 850, VertexAttribI4uivEXT@8)
-       GL_STUB(VertexAttribI4usvEXT, 851, VertexAttribI4usvEXT@8)
-       GL_STUB(VertexAttribIPointerEXT, 852, VertexAttribIPointerEXT@20)
-       GL_STUB(FramebufferTextureLayerEXT, 853, FramebufferTextureLayerEXT@20)
-       GL_STUB(ColorMaskIndexedEXT, 854, ColorMaskIndexedEXT@20)
-       GL_STUB(DisableIndexedEXT, 855, DisableIndexedEXT@8)
-       GL_STUB(EnableIndexedEXT, 856, EnableIndexedEXT@8)
-       GL_STUB(GetBooleanIndexedvEXT, 857, GetBooleanIndexedvEXT@12)
-       GL_STUB(GetIntegerIndexedvEXT, 858, GetIntegerIndexedvEXT@12)
-       GL_STUB(IsEnabledIndexedEXT, 859, IsEnabledIndexedEXT@8)
-       GL_STUB(ClearColorIiEXT, 860, ClearColorIiEXT@16)
-       GL_STUB(ClearColorIuiEXT, 861, ClearColorIuiEXT@16)
-       GL_STUB(GetTexParameterIivEXT, 862, GetTexParameterIivEXT@12)
-       GL_STUB(GetTexParameterIuivEXT, 863, GetTexParameterIuivEXT@12)
-       GL_STUB(TexParameterIivEXT, 864, TexParameterIivEXT@12)
-       GL_STUB(TexParameterIuivEXT, 865, TexParameterIuivEXT@12)
-       GL_STUB(BeginConditionalRenderNV, 866, BeginConditionalRenderNV@8)
-       GL_STUB(EndConditionalRenderNV, 867, EndConditionalRenderNV@0)
-       GL_STUB(BeginTransformFeedbackEXT, 868, BeginTransformFeedbackEXT@4)
-       GL_STUB(BindBufferBaseEXT, 869, BindBufferBaseEXT@12)
-       GL_STUB(BindBufferOffsetEXT, 870, BindBufferOffsetEXT@16)
-       GL_STUB(BindBufferRangeEXT, 871, BindBufferRangeEXT@20)
-       GL_STUB(EndTransformFeedbackEXT, 872, EndTransformFeedbackEXT@0)
-       GL_STUB(GetTransformFeedbackVaryingEXT, 873, GetTransformFeedbackVaryingEXT@28)
-       GL_STUB(TransformFeedbackVaryingsEXT, 874, TransformFeedbackVaryingsEXT@16)
-       GL_STUB(ProvokingVertexEXT, 875, ProvokingVertexEXT@4)
-       GL_STUB(_dispatch_stub_876, 876, _dispatch_stub_876@12)
-       HIDDEN(GL_PREFIX(_dispatch_stub_876, _dispatch_stub_876@12))
-       GL_STUB(_dispatch_stub_877, 877, _dispatch_stub_877@12)
-       HIDDEN(GL_PREFIX(_dispatch_stub_877, _dispatch_stub_877@12))
-       GL_STUB(GetObjectParameterivAPPLE, 878, GetObjectParameterivAPPLE@16)
-       GL_STUB(ObjectPurgeableAPPLE, 879, ObjectPurgeableAPPLE@12)
-       GL_STUB(ObjectUnpurgeableAPPLE, 880, ObjectUnpurgeableAPPLE@12)
-       GL_STUB(ActiveProgramEXT, 881, ActiveProgramEXT@4)
-       GL_STUB(CreateShaderProgramEXT, 882, CreateShaderProgramEXT@8)
-       GL_STUB(UseShaderProgramEXT, 883, UseShaderProgramEXT@8)
-       GL_STUB(TextureBarrierNV, 884, TextureBarrierNV@0)
-       GL_STUB(_dispatch_stub_885, 885, _dispatch_stub_885@16)
-       HIDDEN(GL_PREFIX(_dispatch_stub_885, _dispatch_stub_885@16))
-       GL_STUB(_dispatch_stub_886, 886, _dispatch_stub_886@16)
-       HIDDEN(GL_PREFIX(_dispatch_stub_886, _dispatch_stub_886@16))
-       GL_STUB(_dispatch_stub_887, 887, _dispatch_stub_887@16)
-       HIDDEN(GL_PREFIX(_dispatch_stub_887, _dispatch_stub_887@16))
-       GL_STUB(_dispatch_stub_888, 888, _dispatch_stub_888@12)
-       HIDDEN(GL_PREFIX(_dispatch_stub_888, _dispatch_stub_888@12))
-       GL_STUB(_dispatch_stub_889, 889, _dispatch_stub_889@12)
-       HIDDEN(GL_PREFIX(_dispatch_stub_889, _dispatch_stub_889@12))
-       GL_STUB(EGLImageTargetRenderbufferStorageOES, 890, EGLImageTargetRenderbufferStorageOES@8)
-       GL_STUB(EGLImageTargetTexture2DOES, 891, EGLImageTargetTexture2DOES@8)
+       GL_STUB(ClampColorARB, 572, ClampColorARB@8)
+       GL_STUB(DrawArraysInstancedARB, 573, DrawArraysInstancedARB@16)
+       GL_STUB(DrawElementsInstancedARB, 574, DrawElementsInstancedARB@20)
+       GL_STUB(RenderbufferStorageMultisample, 575, RenderbufferStorageMultisample@20)
+       GL_STUB(FramebufferTextureARB, 576, FramebufferTextureARB@16)
+       GL_STUB(FramebufferTextureFaceARB, 577, FramebufferTextureFaceARB@20)
+       GL_STUB(ProgramParameteriARB, 578, ProgramParameteriARB@12)
+       GL_STUB(VertexAttribDivisorARB, 579, VertexAttribDivisorARB@8)
+       GL_STUB(FlushMappedBufferRange, 580, FlushMappedBufferRange@12)
+       GL_STUB(MapBufferRange, 581, MapBufferRange@16)
+       GL_STUB(TexBufferARB, 582, TexBufferARB@12)
+       GL_STUB(BindVertexArray, 583, BindVertexArray@4)
+       GL_STUB(GenVertexArrays, 584, GenVertexArrays@8)
+       GL_STUB(CopyBufferSubData, 585, CopyBufferSubData@20)
+       GL_STUB(ClientWaitSync, 586, ClientWaitSync@12)
+       GL_STUB(DeleteSync, 587, DeleteSync@4)
+       GL_STUB(FenceSync, 588, FenceSync@8)
+       GL_STUB(GetInteger64v, 589, GetInteger64v@8)
+       GL_STUB(GetSynciv, 590, GetSynciv@20)
+       GL_STUB(IsSync, 591, IsSync@4)
+       GL_STUB(WaitSync, 592, WaitSync@12)
+       GL_STUB(DrawElementsBaseVertex, 593, DrawElementsBaseVertex@20)
+       GL_STUB(DrawRangeElementsBaseVertex, 594, DrawRangeElementsBaseVertex@28)
+       GL_STUB(MultiDrawElementsBaseVertex, 595, MultiDrawElementsBaseVertex@24)
+       GL_STUB(BlendEquationSeparateiARB, 596, BlendEquationSeparateiARB@12)
+       GL_STUB(BlendEquationiARB, 597, BlendEquationiARB@8)
+       GL_STUB(BlendFuncSeparateiARB, 598, BlendFuncSeparateiARB@20)
+       GL_STUB(BlendFunciARB, 599, BlendFunciARB@12)
+       GL_STUB(BindSampler, 600, BindSampler@8)
+       GL_STUB(DeleteSamplers, 601, DeleteSamplers@8)
+       GL_STUB(GenSamplers, 602, GenSamplers@8)
+       GL_STUB(GetSamplerParameterIiv, 603, GetSamplerParameterIiv@12)
+       GL_STUB(GetSamplerParameterIuiv, 604, GetSamplerParameterIuiv@12)
+       GL_STUB(GetSamplerParameterfv, 605, GetSamplerParameterfv@12)
+       GL_STUB(GetSamplerParameteriv, 606, GetSamplerParameteriv@12)
+       GL_STUB(IsSampler, 607, IsSampler@4)
+       GL_STUB(SamplerParameterIiv, 608, SamplerParameterIiv@12)
+       GL_STUB(SamplerParameterIuiv, 609, SamplerParameterIuiv@12)
+       GL_STUB(SamplerParameterf, 610, SamplerParameterf@12)
+       GL_STUB(SamplerParameterfv, 611, SamplerParameterfv@12)
+       GL_STUB(SamplerParameteri, 612, SamplerParameteri@12)
+       GL_STUB(SamplerParameteriv, 613, SamplerParameteriv@12)
+       GL_STUB(BindTransformFeedback, 614, BindTransformFeedback@8)
+       GL_STUB(DeleteTransformFeedbacks, 615, DeleteTransformFeedbacks@8)
+       GL_STUB(DrawTransformFeedback, 616, DrawTransformFeedback@8)
+       GL_STUB(GenTransformFeedbacks, 617, GenTransformFeedbacks@8)
+       GL_STUB(IsTransformFeedback, 618, IsTransformFeedback@4)
+       GL_STUB(PauseTransformFeedback, 619, PauseTransformFeedback@0)
+       GL_STUB(ResumeTransformFeedback, 620, ResumeTransformFeedback@0)
+       GL_STUB(ClearDepthf, 621, ClearDepthf@4)
+       GL_STUB(DepthRangef, 622, DepthRangef@8)
+       GL_STUB(GetShaderPrecisionFormat, 623, GetShaderPrecisionFormat@16)
+       GL_STUB(ReleaseShaderCompiler, 624, ReleaseShaderCompiler@0)
+       GL_STUB(ShaderBinary, 625, ShaderBinary@20)
+       GL_STUB(PolygonOffsetEXT, 626, PolygonOffsetEXT@8)
+       GL_STUB(_dispatch_stub_627, 627, _dispatch_stub_627@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_627, _dispatch_stub_627@8))
+       GL_STUB(_dispatch_stub_628, 628, _dispatch_stub_628@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_628, _dispatch_stub_628@8))
+       GL_STUB(_dispatch_stub_629, 629, _dispatch_stub_629@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_629, _dispatch_stub_629@8))
+       GL_STUB(_dispatch_stub_630, 630, _dispatch_stub_630@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_630, _dispatch_stub_630@8))
+       GL_STUB(_dispatch_stub_631, 631, _dispatch_stub_631@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_631, _dispatch_stub_631@8))
+       GL_STUB(_dispatch_stub_632, 632, _dispatch_stub_632@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_632, _dispatch_stub_632@8))
+       GL_STUB(_dispatch_stub_633, 633, _dispatch_stub_633@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_633, _dispatch_stub_633@8))
+       GL_STUB(_dispatch_stub_634, 634, _dispatch_stub_634@4)
+       HIDDEN(GL_PREFIX(_dispatch_stub_634, _dispatch_stub_634@4))
+       GL_STUB(ColorPointerEXT, 635, ColorPointerEXT@20)
+       GL_STUB(EdgeFlagPointerEXT, 636, EdgeFlagPointerEXT@12)
+       GL_STUB(IndexPointerEXT, 637, IndexPointerEXT@16)
+       GL_STUB(NormalPointerEXT, 638, NormalPointerEXT@16)
+       GL_STUB(TexCoordPointerEXT, 639, TexCoordPointerEXT@20)
+       GL_STUB(VertexPointerEXT, 640, VertexPointerEXT@20)
+       GL_STUB(PointParameterfEXT, 641, PointParameterfEXT@8)
+       GL_STUB(PointParameterfvEXT, 642, PointParameterfvEXT@8)
+       GL_STUB(LockArraysEXT, 643, LockArraysEXT@8)
+       GL_STUB(UnlockArraysEXT, 644, UnlockArraysEXT@0)
+       GL_STUB(SecondaryColor3bEXT, 645, SecondaryColor3bEXT@12)
+       GL_STUB(SecondaryColor3bvEXT, 646, SecondaryColor3bvEXT@4)
+       GL_STUB(SecondaryColor3dEXT, 647, SecondaryColor3dEXT@24)
+       GL_STUB(SecondaryColor3dvEXT, 648, SecondaryColor3dvEXT@4)
+       GL_STUB(SecondaryColor3fEXT, 649, SecondaryColor3fEXT@12)
+       GL_STUB(SecondaryColor3fvEXT, 650, SecondaryColor3fvEXT@4)
+       GL_STUB(SecondaryColor3iEXT, 651, SecondaryColor3iEXT@12)
+       GL_STUB(SecondaryColor3ivEXT, 652, SecondaryColor3ivEXT@4)
+       GL_STUB(SecondaryColor3sEXT, 653, SecondaryColor3sEXT@12)
+       GL_STUB(SecondaryColor3svEXT, 654, SecondaryColor3svEXT@4)
+       GL_STUB(SecondaryColor3ubEXT, 655, SecondaryColor3ubEXT@12)
+       GL_STUB(SecondaryColor3ubvEXT, 656, SecondaryColor3ubvEXT@4)
+       GL_STUB(SecondaryColor3uiEXT, 657, SecondaryColor3uiEXT@12)
+       GL_STUB(SecondaryColor3uivEXT, 658, SecondaryColor3uivEXT@4)
+       GL_STUB(SecondaryColor3usEXT, 659, SecondaryColor3usEXT@12)
+       GL_STUB(SecondaryColor3usvEXT, 660, SecondaryColor3usvEXT@4)
+       GL_STUB(SecondaryColorPointerEXT, 661, SecondaryColorPointerEXT@16)
+       GL_STUB(MultiDrawArraysEXT, 662, MultiDrawArraysEXT@16)
+       GL_STUB(MultiDrawElementsEXT, 663, MultiDrawElementsEXT@20)
+       GL_STUB(FogCoordPointerEXT, 664, FogCoordPointerEXT@12)
+       GL_STUB(FogCoorddEXT, 665, FogCoorddEXT@8)
+       GL_STUB(FogCoorddvEXT, 666, FogCoorddvEXT@4)
+       GL_STUB(FogCoordfEXT, 667, FogCoordfEXT@4)
+       GL_STUB(FogCoordfvEXT, 668, FogCoordfvEXT@4)
+       GL_STUB(_dispatch_stub_669, 669, _dispatch_stub_669@4)
+       HIDDEN(GL_PREFIX(_dispatch_stub_669, _dispatch_stub_669@4))
+       GL_STUB(BlendFuncSeparateEXT, 670, BlendFuncSeparateEXT@16)
+       GL_STUB(FlushVertexArrayRangeNV, 671, FlushVertexArrayRangeNV@0)
+       GL_STUB(VertexArrayRangeNV, 672, VertexArrayRangeNV@8)
+       GL_STUB(CombinerInputNV, 673, CombinerInputNV@24)
+       GL_STUB(CombinerOutputNV, 674, CombinerOutputNV@40)
+       GL_STUB(CombinerParameterfNV, 675, CombinerParameterfNV@8)
+       GL_STUB(CombinerParameterfvNV, 676, CombinerParameterfvNV@8)
+       GL_STUB(CombinerParameteriNV, 677, CombinerParameteriNV@8)
+       GL_STUB(CombinerParameterivNV, 678, CombinerParameterivNV@8)
+       GL_STUB(FinalCombinerInputNV, 679, FinalCombinerInputNV@16)
+       GL_STUB(GetCombinerInputParameterfvNV, 680, GetCombinerInputParameterfvNV@20)
+       GL_STUB(GetCombinerInputParameterivNV, 681, GetCombinerInputParameterivNV@20)
+       GL_STUB(GetCombinerOutputParameterfvNV, 682, GetCombinerOutputParameterfvNV@16)
+       GL_STUB(GetCombinerOutputParameterivNV, 683, GetCombinerOutputParameterivNV@16)
+       GL_STUB(GetFinalCombinerInputParameterfvNV, 684, GetFinalCombinerInputParameterfvNV@12)
+       GL_STUB(GetFinalCombinerInputParameterivNV, 685, GetFinalCombinerInputParameterivNV@12)
+       GL_STUB(ResizeBuffersMESA, 686, ResizeBuffersMESA@0)
+       GL_STUB(WindowPos2dMESA, 687, WindowPos2dMESA@16)
+       GL_STUB(WindowPos2dvMESA, 688, WindowPos2dvMESA@4)
+       GL_STUB(WindowPos2fMESA, 689, WindowPos2fMESA@8)
+       GL_STUB(WindowPos2fvMESA, 690, WindowPos2fvMESA@4)
+       GL_STUB(WindowPos2iMESA, 691, WindowPos2iMESA@8)
+       GL_STUB(WindowPos2ivMESA, 692, WindowPos2ivMESA@4)
+       GL_STUB(WindowPos2sMESA, 693, WindowPos2sMESA@8)
+       GL_STUB(WindowPos2svMESA, 694, WindowPos2svMESA@4)
+       GL_STUB(WindowPos3dMESA, 695, WindowPos3dMESA@24)
+       GL_STUB(WindowPos3dvMESA, 696, WindowPos3dvMESA@4)
+       GL_STUB(WindowPos3fMESA, 697, WindowPos3fMESA@12)
+       GL_STUB(WindowPos3fvMESA, 698, WindowPos3fvMESA@4)
+       GL_STUB(WindowPos3iMESA, 699, WindowPos3iMESA@12)
+       GL_STUB(WindowPos3ivMESA, 700, WindowPos3ivMESA@4)
+       GL_STUB(WindowPos3sMESA, 701, WindowPos3sMESA@12)
+       GL_STUB(WindowPos3svMESA, 702, WindowPos3svMESA@4)
+       GL_STUB(WindowPos4dMESA, 703, WindowPos4dMESA@32)
+       GL_STUB(WindowPos4dvMESA, 704, WindowPos4dvMESA@4)
+       GL_STUB(WindowPos4fMESA, 705, WindowPos4fMESA@16)
+       GL_STUB(WindowPos4fvMESA, 706, WindowPos4fvMESA@4)
+       GL_STUB(WindowPos4iMESA, 707, WindowPos4iMESA@16)
+       GL_STUB(WindowPos4ivMESA, 708, WindowPos4ivMESA@4)
+       GL_STUB(WindowPos4sMESA, 709, WindowPos4sMESA@16)
+       GL_STUB(WindowPos4svMESA, 710, WindowPos4svMESA@4)
+       GL_STUB(_dispatch_stub_711, 711, _dispatch_stub_711@20)
+       HIDDEN(GL_PREFIX(_dispatch_stub_711, _dispatch_stub_711@20))
+       GL_STUB(_dispatch_stub_712, 712, _dispatch_stub_712@24)
+       HIDDEN(GL_PREFIX(_dispatch_stub_712, _dispatch_stub_712@24))
+       GL_STUB(_dispatch_stub_713, 713, _dispatch_stub_713@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_713, _dispatch_stub_713@8))
+       GL_STUB(_dispatch_stub_714, 714, _dispatch_stub_714@4)
+       HIDDEN(GL_PREFIX(_dispatch_stub_714, _dispatch_stub_714@4))
+       GL_STUB(_dispatch_stub_715, 715, _dispatch_stub_715@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_715, _dispatch_stub_715@8))
+       GL_STUB(_dispatch_stub_716, 716, _dispatch_stub_716@12)
+       HIDDEN(GL_PREFIX(_dispatch_stub_716, _dispatch_stub_716@12))
+       GL_STUB(_dispatch_stub_717, 717, _dispatch_stub_717@4)
+       HIDDEN(GL_PREFIX(_dispatch_stub_717, _dispatch_stub_717@4))
+       GL_STUB(_dispatch_stub_718, 718, _dispatch_stub_718@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_718, _dispatch_stub_718@8))
+       GL_STUB(_dispatch_stub_719, 719, _dispatch_stub_719@4)
+       HIDDEN(GL_PREFIX(_dispatch_stub_719, _dispatch_stub_719@4))
+       GL_STUB(AreProgramsResidentNV, 720, AreProgramsResidentNV@12)
+       GL_STUB(BindProgramNV, 721, BindProgramNV@8)
+       GL_STUB(DeleteProgramsNV, 722, DeleteProgramsNV@8)
+       GL_STUB(ExecuteProgramNV, 723, ExecuteProgramNV@12)
+       GL_STUB(GenProgramsNV, 724, GenProgramsNV@8)
+       GL_STUB(GetProgramParameterdvNV, 725, GetProgramParameterdvNV@16)
+       GL_STUB(GetProgramParameterfvNV, 726, GetProgramParameterfvNV@16)
+       GL_STUB(GetProgramStringNV, 727, GetProgramStringNV@12)
+       GL_STUB(GetProgramivNV, 728, GetProgramivNV@12)
+       GL_STUB(GetTrackMatrixivNV, 729, GetTrackMatrixivNV@16)
+       GL_STUB(GetVertexAttribPointervNV, 730, GetVertexAttribPointervNV@12)
+       GL_STUB(GetVertexAttribdvNV, 731, GetVertexAttribdvNV@12)
+       GL_STUB(GetVertexAttribfvNV, 732, GetVertexAttribfvNV@12)
+       GL_STUB(GetVertexAttribivNV, 733, GetVertexAttribivNV@12)
+       GL_STUB(IsProgramNV, 734, IsProgramNV@4)
+       GL_STUB(LoadProgramNV, 735, LoadProgramNV@16)
+       GL_STUB(ProgramParameters4dvNV, 736, ProgramParameters4dvNV@16)
+       GL_STUB(ProgramParameters4fvNV, 737, ProgramParameters4fvNV@16)
+       GL_STUB(RequestResidentProgramsNV, 738, RequestResidentProgramsNV@8)
+       GL_STUB(TrackMatrixNV, 739, TrackMatrixNV@16)
+       GL_STUB(VertexAttrib1dNV, 740, VertexAttrib1dNV@12)
+       GL_STUB(VertexAttrib1dvNV, 741, VertexAttrib1dvNV@8)
+       GL_STUB(VertexAttrib1fNV, 742, VertexAttrib1fNV@8)
+       GL_STUB(VertexAttrib1fvNV, 743, VertexAttrib1fvNV@8)
+       GL_STUB(VertexAttrib1sNV, 744, VertexAttrib1sNV@8)
+       GL_STUB(VertexAttrib1svNV, 745, VertexAttrib1svNV@8)
+       GL_STUB(VertexAttrib2dNV, 746, VertexAttrib2dNV@20)
+       GL_STUB(VertexAttrib2dvNV, 747, VertexAttrib2dvNV@8)
+       GL_STUB(VertexAttrib2fNV, 748, VertexAttrib2fNV@12)
+       GL_STUB(VertexAttrib2fvNV, 749, VertexAttrib2fvNV@8)
+       GL_STUB(VertexAttrib2sNV, 750, VertexAttrib2sNV@12)
+       GL_STUB(VertexAttrib2svNV, 751, VertexAttrib2svNV@8)
+       GL_STUB(VertexAttrib3dNV, 752, VertexAttrib3dNV@28)
+       GL_STUB(VertexAttrib3dvNV, 753, VertexAttrib3dvNV@8)
+       GL_STUB(VertexAttrib3fNV, 754, VertexAttrib3fNV@16)
+       GL_STUB(VertexAttrib3fvNV, 755, VertexAttrib3fvNV@8)
+       GL_STUB(VertexAttrib3sNV, 756, VertexAttrib3sNV@16)
+       GL_STUB(VertexAttrib3svNV, 757, VertexAttrib3svNV@8)
+       GL_STUB(VertexAttrib4dNV, 758, VertexAttrib4dNV@36)
+       GL_STUB(VertexAttrib4dvNV, 759, VertexAttrib4dvNV@8)
+       GL_STUB(VertexAttrib4fNV, 760, VertexAttrib4fNV@20)
+       GL_STUB(VertexAttrib4fvNV, 761, VertexAttrib4fvNV@8)
+       GL_STUB(VertexAttrib4sNV, 762, VertexAttrib4sNV@20)
+       GL_STUB(VertexAttrib4svNV, 763, VertexAttrib4svNV@8)
+       GL_STUB(VertexAttrib4ubNV, 764, VertexAttrib4ubNV@20)
+       GL_STUB(VertexAttrib4ubvNV, 765, VertexAttrib4ubvNV@8)
+       GL_STUB(VertexAttribPointerNV, 766, VertexAttribPointerNV@20)
+       GL_STUB(VertexAttribs1dvNV, 767, VertexAttribs1dvNV@12)
+       GL_STUB(VertexAttribs1fvNV, 768, VertexAttribs1fvNV@12)
+       GL_STUB(VertexAttribs1svNV, 769, VertexAttribs1svNV@12)
+       GL_STUB(VertexAttribs2dvNV, 770, VertexAttribs2dvNV@12)
+       GL_STUB(VertexAttribs2fvNV, 771, VertexAttribs2fvNV@12)
+       GL_STUB(VertexAttribs2svNV, 772, VertexAttribs2svNV@12)
+       GL_STUB(VertexAttribs3dvNV, 773, VertexAttribs3dvNV@12)
+       GL_STUB(VertexAttribs3fvNV, 774, VertexAttribs3fvNV@12)
+       GL_STUB(VertexAttribs3svNV, 775, VertexAttribs3svNV@12)
+       GL_STUB(VertexAttribs4dvNV, 776, VertexAttribs4dvNV@12)
+       GL_STUB(VertexAttribs4fvNV, 777, VertexAttribs4fvNV@12)
+       GL_STUB(VertexAttribs4svNV, 778, VertexAttribs4svNV@12)
+       GL_STUB(VertexAttribs4ubvNV, 779, VertexAttribs4ubvNV@12)
+       GL_STUB(GetTexBumpParameterfvATI, 780, GetTexBumpParameterfvATI@8)
+       GL_STUB(GetTexBumpParameterivATI, 781, GetTexBumpParameterivATI@8)
+       GL_STUB(TexBumpParameterfvATI, 782, TexBumpParameterfvATI@8)
+       GL_STUB(TexBumpParameterivATI, 783, TexBumpParameterivATI@8)
+       GL_STUB(AlphaFragmentOp1ATI, 784, AlphaFragmentOp1ATI@24)
+       GL_STUB(AlphaFragmentOp2ATI, 785, AlphaFragmentOp2ATI@36)
+       GL_STUB(AlphaFragmentOp3ATI, 786, AlphaFragmentOp3ATI@48)
+       GL_STUB(BeginFragmentShaderATI, 787, BeginFragmentShaderATI@0)
+       GL_STUB(BindFragmentShaderATI, 788, BindFragmentShaderATI@4)
+       GL_STUB(ColorFragmentOp1ATI, 789, ColorFragmentOp1ATI@28)
+       GL_STUB(ColorFragmentOp2ATI, 790, ColorFragmentOp2ATI@40)
+       GL_STUB(ColorFragmentOp3ATI, 791, ColorFragmentOp3ATI@52)
+       GL_STUB(DeleteFragmentShaderATI, 792, DeleteFragmentShaderATI@4)
+       GL_STUB(EndFragmentShaderATI, 793, EndFragmentShaderATI@0)
+       GL_STUB(GenFragmentShadersATI, 794, GenFragmentShadersATI@4)
+       GL_STUB(PassTexCoordATI, 795, PassTexCoordATI@12)
+       GL_STUB(SampleMapATI, 796, SampleMapATI@12)
+       GL_STUB(SetFragmentShaderConstantATI, 797, SetFragmentShaderConstantATI@8)
+       GL_STUB(PointParameteriNV, 798, PointParameteriNV@8)
+       GL_STUB(PointParameterivNV, 799, PointParameterivNV@8)
+       GL_STUB(_dispatch_stub_800, 800, _dispatch_stub_800@4)
+       HIDDEN(GL_PREFIX(_dispatch_stub_800, _dispatch_stub_800@4))
+       GL_STUB(_dispatch_stub_801, 801, _dispatch_stub_801@4)
+       HIDDEN(GL_PREFIX(_dispatch_stub_801, _dispatch_stub_801@4))
+       GL_STUB(_dispatch_stub_802, 802, _dispatch_stub_802@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_802, _dispatch_stub_802@8))
+       GL_STUB(_dispatch_stub_803, 803, _dispatch_stub_803@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_803, _dispatch_stub_803@8))
+       GL_STUB(_dispatch_stub_804, 804, _dispatch_stub_804@4)
+       HIDDEN(GL_PREFIX(_dispatch_stub_804, _dispatch_stub_804@4))
+       GL_STUB(GetProgramNamedParameterdvNV, 805, GetProgramNamedParameterdvNV@16)
+       GL_STUB(GetProgramNamedParameterfvNV, 806, GetProgramNamedParameterfvNV@16)
+       GL_STUB(ProgramNamedParameter4dNV, 807, ProgramNamedParameter4dNV@44)
+       GL_STUB(ProgramNamedParameter4dvNV, 808, ProgramNamedParameter4dvNV@16)
+       GL_STUB(ProgramNamedParameter4fNV, 809, ProgramNamedParameter4fNV@28)
+       GL_STUB(ProgramNamedParameter4fvNV, 810, ProgramNamedParameter4fvNV@16)
+       GL_STUB(PrimitiveRestartIndexNV, 811, PrimitiveRestartIndexNV@4)
+       GL_STUB(PrimitiveRestartNV, 812, PrimitiveRestartNV@0)
+       GL_STUB(_dispatch_stub_813, 813, _dispatch_stub_813@16)
+       HIDDEN(GL_PREFIX(_dispatch_stub_813, _dispatch_stub_813@16))
+       GL_STUB(_dispatch_stub_814, 814, _dispatch_stub_814@8)
+       HIDDEN(GL_PREFIX(_dispatch_stub_814, _dispatch_stub_814@8))
+       GL_STUB(BindFramebufferEXT, 815, BindFramebufferEXT@8)
+       GL_STUB(BindRenderbufferEXT, 816, BindRenderbufferEXT@8)
+       GL_STUB(CheckFramebufferStatusEXT, 817, CheckFramebufferStatusEXT@4)
+       GL_STUB(DeleteFramebuffersEXT, 818, DeleteFramebuffersEXT@8)
+       GL_STUB(DeleteRenderbuffersEXT, 819, DeleteRenderbuffersEXT@8)
+       GL_STUB(FramebufferRenderbufferEXT, 820, FramebufferRenderbufferEXT@16)
+       GL_STUB(FramebufferTexture1DEXT, 821, FramebufferTexture1DEXT@20)
+       GL_STUB(FramebufferTexture2DEXT, 822, FramebufferTexture2DEXT@20)
+       GL_STUB(FramebufferTexture3DEXT, 823, FramebufferTexture3DEXT@24)
+       GL_STUB(GenFramebuffersEXT, 824, GenFramebuffersEXT@8)
+       GL_STUB(GenRenderbuffersEXT, 825, GenRenderbuffersEXT@8)
+       GL_STUB(GenerateMipmapEXT, 826, GenerateMipmapEXT@4)
+       GL_STUB(GetFramebufferAttachmentParameterivEXT, 827, GetFramebufferAttachmentParameterivEXT@16)
+       GL_STUB(GetRenderbufferParameterivEXT, 828, GetRenderbufferParameterivEXT@12)
+       GL_STUB(IsFramebufferEXT, 829, IsFramebufferEXT@4)
+       GL_STUB(IsRenderbufferEXT, 830, IsRenderbufferEXT@4)
+       GL_STUB(RenderbufferStorageEXT, 831, RenderbufferStorageEXT@16)
+       GL_STUB(_dispatch_stub_832, 832, _dispatch_stub_832@40)
+       HIDDEN(GL_PREFIX(_dispatch_stub_832, _dispatch_stub_832@40))
+       GL_STUB(_dispatch_stub_833, 833, _dispatch_stub_833@12)
+       HIDDEN(GL_PREFIX(_dispatch_stub_833, _dispatch_stub_833@12))
+       GL_STUB(_dispatch_stub_834, 834, _dispatch_stub_834@12)
+       HIDDEN(GL_PREFIX(_dispatch_stub_834, _dispatch_stub_834@12))
+       GL_STUB(BindFragDataLocationEXT, 835, BindFragDataLocationEXT@12)
+       GL_STUB(GetFragDataLocationEXT, 836, GetFragDataLocationEXT@8)
+       GL_STUB(GetUniformuivEXT, 837, GetUniformuivEXT@12)
+       GL_STUB(GetVertexAttribIivEXT, 838, GetVertexAttribIivEXT@12)
+       GL_STUB(GetVertexAttribIuivEXT, 839, GetVertexAttribIuivEXT@12)
+       GL_STUB(Uniform1uiEXT, 840, Uniform1uiEXT@8)
+       GL_STUB(Uniform1uivEXT, 841, Uniform1uivEXT@12)
+       GL_STUB(Uniform2uiEXT, 842, Uniform2uiEXT@12)
+       GL_STUB(Uniform2uivEXT, 843, Uniform2uivEXT@12)
+       GL_STUB(Uniform3uiEXT, 844, Uniform3uiEXT@16)
+       GL_STUB(Uniform3uivEXT, 845, Uniform3uivEXT@12)
+       GL_STUB(Uniform4uiEXT, 846, Uniform4uiEXT@20)
+       GL_STUB(Uniform4uivEXT, 847, Uniform4uivEXT@12)
+       GL_STUB(VertexAttribI1iEXT, 848, VertexAttribI1iEXT@8)
+       GL_STUB(VertexAttribI1ivEXT, 849, VertexAttribI1ivEXT@8)
+       GL_STUB(VertexAttribI1uiEXT, 850, VertexAttribI1uiEXT@8)
+       GL_STUB(VertexAttribI1uivEXT, 851, VertexAttribI1uivEXT@8)
+       GL_STUB(VertexAttribI2iEXT, 852, VertexAttribI2iEXT@12)
+       GL_STUB(VertexAttribI2ivEXT, 853, VertexAttribI2ivEXT@8)
+       GL_STUB(VertexAttribI2uiEXT, 854, VertexAttribI2uiEXT@12)
+       GL_STUB(VertexAttribI2uivEXT, 855, VertexAttribI2uivEXT@8)
+       GL_STUB(VertexAttribI3iEXT, 856, VertexAttribI3iEXT@16)
+       GL_STUB(VertexAttribI3ivEXT, 857, VertexAttribI3ivEXT@8)
+       GL_STUB(VertexAttribI3uiEXT, 858, VertexAttribI3uiEXT@16)
+       GL_STUB(VertexAttribI3uivEXT, 859, VertexAttribI3uivEXT@8)
+       GL_STUB(VertexAttribI4bvEXT, 860, VertexAttribI4bvEXT@8)
+       GL_STUB(VertexAttribI4iEXT, 861, VertexAttribI4iEXT@20)
+       GL_STUB(VertexAttribI4ivEXT, 862, VertexAttribI4ivEXT@8)
+       GL_STUB(VertexAttribI4svEXT, 863, VertexAttribI4svEXT@8)
+       GL_STUB(VertexAttribI4ubvEXT, 864, VertexAttribI4ubvEXT@8)
+       GL_STUB(VertexAttribI4uiEXT, 865, VertexAttribI4uiEXT@20)
+       GL_STUB(VertexAttribI4uivEXT, 866, VertexAttribI4uivEXT@8)
+       GL_STUB(VertexAttribI4usvEXT, 867, VertexAttribI4usvEXT@8)
+       GL_STUB(VertexAttribIPointerEXT, 868, VertexAttribIPointerEXT@20)
+       GL_STUB(FramebufferTextureLayerEXT, 869, FramebufferTextureLayerEXT@20)
+       GL_STUB(ColorMaskIndexedEXT, 870, ColorMaskIndexedEXT@20)
+       GL_STUB(DisableIndexedEXT, 871, DisableIndexedEXT@8)
+       GL_STUB(EnableIndexedEXT, 872, EnableIndexedEXT@8)
+       GL_STUB(GetBooleanIndexedvEXT, 873, GetBooleanIndexedvEXT@12)
+       GL_STUB(GetIntegerIndexedvEXT, 874, GetIntegerIndexedvEXT@12)
+       GL_STUB(IsEnabledIndexedEXT, 875, IsEnabledIndexedEXT@8)
+       GL_STUB(ClearColorIiEXT, 876, ClearColorIiEXT@16)
+       GL_STUB(ClearColorIuiEXT, 877, ClearColorIuiEXT@16)
+       GL_STUB(GetTexParameterIivEXT, 878, GetTexParameterIivEXT@12)
+       GL_STUB(GetTexParameterIuivEXT, 879, GetTexParameterIuivEXT@12)
+       GL_STUB(TexParameterIivEXT, 880, TexParameterIivEXT@12)
+       GL_STUB(TexParameterIuivEXT, 881, TexParameterIuivEXT@12)
+       GL_STUB(BeginConditionalRenderNV, 882, BeginConditionalRenderNV@8)
+       GL_STUB(EndConditionalRenderNV, 883, EndConditionalRenderNV@0)
+       GL_STUB(BeginTransformFeedbackEXT, 884, BeginTransformFeedbackEXT@4)
+       GL_STUB(BindBufferBaseEXT, 885, BindBufferBaseEXT@12)
+       GL_STUB(BindBufferOffsetEXT, 886, BindBufferOffsetEXT@16)
+       GL_STUB(BindBufferRangeEXT, 887, BindBufferRangeEXT@20)
+       GL_STUB(EndTransformFeedbackEXT, 888, EndTransformFeedbackEXT@0)
+       GL_STUB(GetTransformFeedbackVaryingEXT, 889, GetTransformFeedbackVaryingEXT@28)
+       GL_STUB(TransformFeedbackVaryingsEXT, 890, TransformFeedbackVaryingsEXT@16)
+       GL_STUB(ProvokingVertexEXT, 891, ProvokingVertexEXT@4)
+       GL_STUB(_dispatch_stub_892, 892, _dispatch_stub_892@12)
+       HIDDEN(GL_PREFIX(_dispatch_stub_892, _dispatch_stub_892@12))
+       GL_STUB(_dispatch_stub_893, 893, _dispatch_stub_893@12)
+       HIDDEN(GL_PREFIX(_dispatch_stub_893, _dispatch_stub_893@12))
+       GL_STUB(GetObjectParameterivAPPLE, 894, GetObjectParameterivAPPLE@16)
+       GL_STUB(ObjectPurgeableAPPLE, 895, ObjectPurgeableAPPLE@12)
+       GL_STUB(ObjectUnpurgeableAPPLE, 896, ObjectUnpurgeableAPPLE@12)
+       GL_STUB(ActiveProgramEXT, 897, ActiveProgramEXT@4)
+       GL_STUB(CreateShaderProgramEXT, 898, CreateShaderProgramEXT@8)
+       GL_STUB(UseShaderProgramEXT, 899, UseShaderProgramEXT@8)
+       GL_STUB(TextureBarrierNV, 900, TextureBarrierNV@0)
+       GL_STUB(_dispatch_stub_901, 901, _dispatch_stub_901@16)
+       HIDDEN(GL_PREFIX(_dispatch_stub_901, _dispatch_stub_901@16))
+       GL_STUB(_dispatch_stub_902, 902, _dispatch_stub_902@16)
+       HIDDEN(GL_PREFIX(_dispatch_stub_902, _dispatch_stub_902@16))
+       GL_STUB(_dispatch_stub_903, 903, _dispatch_stub_903@16)
+       HIDDEN(GL_PREFIX(_dispatch_stub_903, _dispatch_stub_903@16))
+       GL_STUB(_dispatch_stub_904, 904, _dispatch_stub_904@12)
+       HIDDEN(GL_PREFIX(_dispatch_stub_904, _dispatch_stub_904@12))
+       GL_STUB(_dispatch_stub_905, 905, _dispatch_stub_905@12)
+       HIDDEN(GL_PREFIX(_dispatch_stub_905, _dispatch_stub_905@12))
+       GL_STUB(EGLImageTargetRenderbufferStorageOES, 906, EGLImageTargetRenderbufferStorageOES@8)
+       GL_STUB(EGLImageTargetTexture2DOES, 907, EGLImageTargetTexture2DOES@8)
        GL_STUB_ALIAS(ArrayElementEXT, 306, ArrayElementEXT@4, ArrayElement, ArrayElement@4)
        GL_STUB_ALIAS(BindTextureEXT, 307, BindTextureEXT@8, BindTexture, BindTexture@8)
        GL_STUB_ALIAS(DrawArraysEXT, 310, DrawArraysEXT@12, DrawArrays, DrawArrays@12)
@@ -1261,156 +1277,156 @@ GLNAME(gl_dispatch_functions_start):
        GL_STUB_ALIAS(GetAttribLocation, 570, GetAttribLocation@8, GetAttribLocationARB, GetAttribLocationARB@8)
        GL_STUB_ALIAS(DrawBuffers, 571, DrawBuffers@8, DrawBuffersARB, DrawBuffersARB@8)
        GL_STUB_ALIAS(DrawBuffersATI, 571, DrawBuffersATI@8, DrawBuffersARB, DrawBuffersARB@8)
-       GL_STUB_ALIAS(DrawArraysInstancedEXT, 572, DrawArraysInstancedEXT@16, DrawArraysInstancedARB, DrawArraysInstancedARB@16)
-       GL_STUB_ALIAS(DrawArraysInstanced, 572, DrawArraysInstanced@16, DrawArraysInstancedARB, DrawArraysInstancedARB@16)
-       GL_STUB_ALIAS(DrawElementsInstancedEXT, 573, DrawElementsInstancedEXT@20, DrawElementsInstancedARB, DrawElementsInstancedARB@20)
-       GL_STUB_ALIAS(DrawElementsInstanced, 573, DrawElementsInstanced@20, DrawElementsInstancedARB, DrawElementsInstancedARB@20)
-       GL_STUB_ALIAS(RenderbufferStorageMultisampleEXT, 574, RenderbufferStorageMultisampleEXT@20, RenderbufferStorageMultisample, RenderbufferStorageMultisample@20)
-       GL_STUB_ALIAS(PointParameterf, 625, PointParameterf@8, PointParameterfEXT, PointParameterfEXT@8)
-       GL_STUB_ALIAS(PointParameterfARB, 625, PointParameterfARB@8, PointParameterfEXT, PointParameterfEXT@8)
-       GL_STUB_ALIAS(PointParameterfv, 626, PointParameterfv@8, PointParameterfvEXT, PointParameterfvEXT@8)
-       GL_STUB_ALIAS(PointParameterfvARB, 626, PointParameterfvARB@8, PointParameterfvEXT, PointParameterfvEXT@8)
-       GL_STUB_ALIAS(SecondaryColor3b, 629, SecondaryColor3b@12, SecondaryColor3bEXT, SecondaryColor3bEXT@12)
-       GL_STUB_ALIAS(SecondaryColor3bv, 630, SecondaryColor3bv@4, SecondaryColor3bvEXT, SecondaryColor3bvEXT@4)
-       GL_STUB_ALIAS(SecondaryColor3d, 631, SecondaryColor3d@24, SecondaryColor3dEXT, SecondaryColor3dEXT@24)
-       GL_STUB_ALIAS(SecondaryColor3dv, 632, SecondaryColor3dv@4, SecondaryColor3dvEXT, SecondaryColor3dvEXT@4)
-       GL_STUB_ALIAS(SecondaryColor3f, 633, SecondaryColor3f@12, SecondaryColor3fEXT, SecondaryColor3fEXT@12)
-       GL_STUB_ALIAS(SecondaryColor3fv, 634, SecondaryColor3fv@4, SecondaryColor3fvEXT, SecondaryColor3fvEXT@4)
-       GL_STUB_ALIAS(SecondaryColor3i, 635, SecondaryColor3i@12, SecondaryColor3iEXT, SecondaryColor3iEXT@12)
-       GL_STUB_ALIAS(SecondaryColor3iv, 636, SecondaryColor3iv@4, SecondaryColor3ivEXT, SecondaryColor3ivEXT@4)
-       GL_STUB_ALIAS(SecondaryColor3s, 637, SecondaryColor3s@12, SecondaryColor3sEXT, SecondaryColor3sEXT@12)
-       GL_STUB_ALIAS(SecondaryColor3sv, 638, SecondaryColor3sv@4, SecondaryColor3svEXT, SecondaryColor3svEXT@4)
-       GL_STUB_ALIAS(SecondaryColor3ub, 639, SecondaryColor3ub@12, SecondaryColor3ubEXT, SecondaryColor3ubEXT@12)
-       GL_STUB_ALIAS(SecondaryColor3ubv, 640, SecondaryColor3ubv@4, SecondaryColor3ubvEXT, SecondaryColor3ubvEXT@4)
-       GL_STUB_ALIAS(SecondaryColor3ui, 641, SecondaryColor3ui@12, SecondaryColor3uiEXT, SecondaryColor3uiEXT@12)
-       GL_STUB_ALIAS(SecondaryColor3uiv, 642, SecondaryColor3uiv@4, SecondaryColor3uivEXT, SecondaryColor3uivEXT@4)
-       GL_STUB_ALIAS(SecondaryColor3us, 643, SecondaryColor3us@12, SecondaryColor3usEXT, SecondaryColor3usEXT@12)
-       GL_STUB_ALIAS(SecondaryColor3usv, 644, SecondaryColor3usv@4, SecondaryColor3usvEXT, SecondaryColor3usvEXT@4)
-       GL_STUB_ALIAS(SecondaryColorPointer, 645, SecondaryColorPointer@16, SecondaryColorPointerEXT, SecondaryColorPointerEXT@16)
-       GL_STUB_ALIAS(MultiDrawArrays, 646, MultiDrawArrays@16, MultiDrawArraysEXT, MultiDrawArraysEXT@16)
-       GL_STUB_ALIAS(MultiDrawElements, 647, MultiDrawElements@20, MultiDrawElementsEXT, MultiDrawElementsEXT@20)
-       GL_STUB_ALIAS(FogCoordPointer, 648, FogCoordPointer@12, FogCoordPointerEXT, FogCoordPointerEXT@12)
-       GL_STUB_ALIAS(FogCoordd, 649, FogCoordd@8, FogCoorddEXT, FogCoorddEXT@8)
-       GL_STUB_ALIAS(FogCoorddv, 650, FogCoorddv@4, FogCoorddvEXT, FogCoorddvEXT@4)
-       GL_STUB_ALIAS(FogCoordf, 651, FogCoordf@4, FogCoordfEXT, FogCoordfEXT@4)
-       GL_STUB_ALIAS(FogCoordfv, 652, FogCoordfv@4, FogCoordfvEXT, FogCoordfvEXT@4)
-       GL_STUB_ALIAS(BlendFuncSeparate, 654, BlendFuncSeparate@16, BlendFuncSeparateEXT, BlendFuncSeparateEXT@16)
-       GL_STUB_ALIAS(WindowPos2d, 671, WindowPos2d@16, WindowPos2dMESA, WindowPos2dMESA@16)
-       GL_STUB_ALIAS(WindowPos2dARB, 671, WindowPos2dARB@16, WindowPos2dMESA, WindowPos2dMESA@16)
-       GL_STUB_ALIAS(WindowPos2dv, 672, WindowPos2dv@4, WindowPos2dvMESA, WindowPos2dvMESA@4)
-       GL_STUB_ALIAS(WindowPos2dvARB, 672, WindowPos2dvARB@4, WindowPos2dvMESA, WindowPos2dvMESA@4)
-       GL_STUB_ALIAS(WindowPos2f, 673, WindowPos2f@8, WindowPos2fMESA, WindowPos2fMESA@8)
-       GL_STUB_ALIAS(WindowPos2fARB, 673, WindowPos2fARB@8, WindowPos2fMESA, WindowPos2fMESA@8)
-       GL_STUB_ALIAS(WindowPos2fv, 674, WindowPos2fv@4, WindowPos2fvMESA, WindowPos2fvMESA@4)
-       GL_STUB_ALIAS(WindowPos2fvARB, 674, WindowPos2fvARB@4, WindowPos2fvMESA, WindowPos2fvMESA@4)
-       GL_STUB_ALIAS(WindowPos2i, 675, WindowPos2i@8, WindowPos2iMESA, WindowPos2iMESA@8)
-       GL_STUB_ALIAS(WindowPos2iARB, 675, WindowPos2iARB@8, WindowPos2iMESA, WindowPos2iMESA@8)
-       GL_STUB_ALIAS(WindowPos2iv, 676, WindowPos2iv@4, WindowPos2ivMESA, WindowPos2ivMESA@4)
-       GL_STUB_ALIAS(WindowPos2ivARB, 676, WindowPos2ivARB@4, WindowPos2ivMESA, WindowPos2ivMESA@4)
-       GL_STUB_ALIAS(WindowPos2s, 677, WindowPos2s@8, WindowPos2sMESA, WindowPos2sMESA@8)
-       GL_STUB_ALIAS(WindowPos2sARB, 677, WindowPos2sARB@8, WindowPos2sMESA, WindowPos2sMESA@8)
-       GL_STUB_ALIAS(WindowPos2sv, 678, WindowPos2sv@4, WindowPos2svMESA, WindowPos2svMESA@4)
-       GL_STUB_ALIAS(WindowPos2svARB, 678, WindowPos2svARB@4, WindowPos2svMESA, WindowPos2svMESA@4)
-       GL_STUB_ALIAS(WindowPos3d, 679, WindowPos3d@24, WindowPos3dMESA, WindowPos3dMESA@24)
-       GL_STUB_ALIAS(WindowPos3dARB, 679, WindowPos3dARB@24, WindowPos3dMESA, WindowPos3dMESA@24)
-       GL_STUB_ALIAS(WindowPos3dv, 680, WindowPos3dv@4, WindowPos3dvMESA, WindowPos3dvMESA@4)
-       GL_STUB_ALIAS(WindowPos3dvARB, 680, WindowPos3dvARB@4, WindowPos3dvMESA, WindowPos3dvMESA@4)
-       GL_STUB_ALIAS(WindowPos3f, 681, WindowPos3f@12, WindowPos3fMESA, WindowPos3fMESA@12)
-       GL_STUB_ALIAS(WindowPos3fARB, 681, WindowPos3fARB@12, WindowPos3fMESA, WindowPos3fMESA@12)
-       GL_STUB_ALIAS(WindowPos3fv, 682, WindowPos3fv@4, WindowPos3fvMESA, WindowPos3fvMESA@4)
-       GL_STUB_ALIAS(WindowPos3fvARB, 682, WindowPos3fvARB@4, WindowPos3fvMESA, WindowPos3fvMESA@4)
-       GL_STUB_ALIAS(WindowPos3i, 683, WindowPos3i@12, WindowPos3iMESA, WindowPos3iMESA@12)
-       GL_STUB_ALIAS(WindowPos3iARB, 683, WindowPos3iARB@12, WindowPos3iMESA, WindowPos3iMESA@12)
-       GL_STUB_ALIAS(WindowPos3iv, 684, WindowPos3iv@4, WindowPos3ivMESA, WindowPos3ivMESA@4)
-       GL_STUB_ALIAS(WindowPos3ivARB, 684, WindowPos3ivARB@4, WindowPos3ivMESA, WindowPos3ivMESA@4)
-       GL_STUB_ALIAS(WindowPos3s, 685, WindowPos3s@12, WindowPos3sMESA, WindowPos3sMESA@12)
-       GL_STUB_ALIAS(WindowPos3sARB, 685, WindowPos3sARB@12, WindowPos3sMESA, WindowPos3sMESA@12)
-       GL_STUB_ALIAS(WindowPos3sv, 686, WindowPos3sv@4, WindowPos3svMESA, WindowPos3svMESA@4)
-       GL_STUB_ALIAS(WindowPos3svARB, 686, WindowPos3svARB@4, WindowPos3svMESA, WindowPos3svMESA@4)
-       GL_STUB_ALIAS(BindProgramARB, 705, BindProgramARB@8, BindProgramNV, BindProgramNV@8)
-       GL_STUB_ALIAS(DeleteProgramsARB, 706, DeleteProgramsARB@8, DeleteProgramsNV, DeleteProgramsNV@8)
-       GL_STUB_ALIAS(GenProgramsARB, 708, GenProgramsARB@8, GenProgramsNV, GenProgramsNV@8)
-       GL_STUB_ALIAS(GetVertexAttribPointerv, 714, GetVertexAttribPointerv@12, GetVertexAttribPointervNV, GetVertexAttribPointervNV@12)
-       GL_STUB_ALIAS(GetVertexAttribPointervARB, 714, GetVertexAttribPointervARB@12, GetVertexAttribPointervNV, GetVertexAttribPointervNV@12)
-       GL_STUB_ALIAS(IsProgramARB, 718, IsProgramARB@4, IsProgramNV, IsProgramNV@4)
-       GL_STUB_ALIAS(PointParameteri, 782, PointParameteri@8, PointParameteriNV, PointParameteriNV@8)
-       GL_STUB_ALIAS(PointParameteriv, 783, PointParameteriv@8, PointParameterivNV, PointParameterivNV@8)
-       GL_STUB_ALIAS(DeleteVertexArrays, 786, DeleteVertexArrays@8, _dispatch_stub_786, _dispatch_stub_786@8)
-       GL_STUB_ALIAS(IsVertexArray, 788, IsVertexArray@4, _dispatch_stub_788, _dispatch_stub_788@4)
-       GL_STUB_ALIAS(PrimitiveRestartIndex, 795, PrimitiveRestartIndex@4, PrimitiveRestartIndexNV, PrimitiveRestartIndexNV@4)
-       GL_STUB_ALIAS(BlendEquationSeparate, 798, BlendEquationSeparate@8, _dispatch_stub_798, _dispatch_stub_798@8)
-       GL_STUB_ALIAS(BindFramebuffer, 799, BindFramebuffer@8, BindFramebufferEXT, BindFramebufferEXT@8)
-       GL_STUB_ALIAS(BindRenderbuffer, 800, BindRenderbuffer@8, BindRenderbufferEXT, BindRenderbufferEXT@8)
-       GL_STUB_ALIAS(CheckFramebufferStatus, 801, CheckFramebufferStatus@4, CheckFramebufferStatusEXT, CheckFramebufferStatusEXT@4)
-       GL_STUB_ALIAS(DeleteFramebuffers, 802, DeleteFramebuffers@8, DeleteFramebuffersEXT, DeleteFramebuffersEXT@8)
-       GL_STUB_ALIAS(DeleteRenderbuffers, 803, DeleteRenderbuffers@8, DeleteRenderbuffersEXT, DeleteRenderbuffersEXT@8)
-       GL_STUB_ALIAS(FramebufferRenderbuffer, 804, FramebufferRenderbuffer@16, FramebufferRenderbufferEXT, FramebufferRenderbufferEXT@16)
-       GL_STUB_ALIAS(FramebufferTexture1D, 805, FramebufferTexture1D@20, FramebufferTexture1DEXT, FramebufferTexture1DEXT@20)
-       GL_STUB_ALIAS(FramebufferTexture2D, 806, FramebufferTexture2D@20, FramebufferTexture2DEXT, FramebufferTexture2DEXT@20)
-       GL_STUB_ALIAS(FramebufferTexture3D, 807, FramebufferTexture3D@24, FramebufferTexture3DEXT, FramebufferTexture3DEXT@24)
-       GL_STUB_ALIAS(GenFramebuffers, 808, GenFramebuffers@8, GenFramebuffersEXT, GenFramebuffersEXT@8)
-       GL_STUB_ALIAS(GenRenderbuffers, 809, GenRenderbuffers@8, GenRenderbuffersEXT, GenRenderbuffersEXT@8)
-       GL_STUB_ALIAS(GenerateMipmap, 810, GenerateMipmap@4, GenerateMipmapEXT, GenerateMipmapEXT@4)
-       GL_STUB_ALIAS(GetFramebufferAttachmentParameteriv, 811, GetFramebufferAttachmentParameteriv@16, GetFramebufferAttachmentParameterivEXT, GetFramebufferAttachmentParameterivEXT@16)
-       GL_STUB_ALIAS(GetRenderbufferParameteriv, 812, GetRenderbufferParameteriv@12, GetRenderbufferParameterivEXT, GetRenderbufferParameterivEXT@12)
-       GL_STUB_ALIAS(IsFramebuffer, 813, IsFramebuffer@4, IsFramebufferEXT, IsFramebufferEXT@4)
-       GL_STUB_ALIAS(IsRenderbuffer, 814, IsRenderbuffer@4, IsRenderbufferEXT, IsRenderbufferEXT@4)
-       GL_STUB_ALIAS(RenderbufferStorage, 815, RenderbufferStorage@16, RenderbufferStorageEXT, RenderbufferStorageEXT@16)
-       GL_STUB_ALIAS(BlitFramebuffer, 816, BlitFramebuffer@40, _dispatch_stub_816, _dispatch_stub_816@40)
-       GL_STUB_ALIAS(BindFragDataLocation, 819, BindFragDataLocation@12, BindFragDataLocationEXT, BindFragDataLocationEXT@12)
-       GL_STUB_ALIAS(GetFragDataLocation, 820, GetFragDataLocation@8, GetFragDataLocationEXT, GetFragDataLocationEXT@8)
-       GL_STUB_ALIAS(GetUniformuiv, 821, GetUniformuiv@12, GetUniformuivEXT, GetUniformuivEXT@12)
-       GL_STUB_ALIAS(GetVertexAttribIiv, 822, GetVertexAttribIiv@12, GetVertexAttribIivEXT, GetVertexAttribIivEXT@12)
-       GL_STUB_ALIAS(GetVertexAttribIuiv, 823, GetVertexAttribIuiv@12, GetVertexAttribIuivEXT, GetVertexAttribIuivEXT@12)
-       GL_STUB_ALIAS(Uniform1ui, 824, Uniform1ui@8, Uniform1uiEXT, Uniform1uiEXT@8)
-       GL_STUB_ALIAS(Uniform1uiv, 825, Uniform1uiv@12, Uniform1uivEXT, Uniform1uivEXT@12)
-       GL_STUB_ALIAS(Uniform2ui, 826, Uniform2ui@12, Uniform2uiEXT, Uniform2uiEXT@12)
-       GL_STUB_ALIAS(Uniform2uiv, 827, Uniform2uiv@12, Uniform2uivEXT, Uniform2uivEXT@12)
-       GL_STUB_ALIAS(Uniform3ui, 828, Uniform3ui@16, Uniform3uiEXT, Uniform3uiEXT@16)
-       GL_STUB_ALIAS(Uniform3uiv, 829, Uniform3uiv@12, Uniform3uivEXT, Uniform3uivEXT@12)
-       GL_STUB_ALIAS(Uniform4ui, 830, Uniform4ui@20, Uniform4uiEXT, Uniform4uiEXT@20)
-       GL_STUB_ALIAS(Uniform4uiv, 831, Uniform4uiv@12, Uniform4uivEXT, Uniform4uivEXT@12)
-       GL_STUB_ALIAS(VertexAttribI1i, 832, VertexAttribI1i@8, VertexAttribI1iEXT, VertexAttribI1iEXT@8)
-       GL_STUB_ALIAS(VertexAttribI1iv, 833, VertexAttribI1iv@8, VertexAttribI1ivEXT, VertexAttribI1ivEXT@8)
-       GL_STUB_ALIAS(VertexAttribI1ui, 834, VertexAttribI1ui@8, VertexAttribI1uiEXT, VertexAttribI1uiEXT@8)
-       GL_STUB_ALIAS(VertexAttribI1uiv, 835, VertexAttribI1uiv@8, VertexAttribI1uivEXT, VertexAttribI1uivEXT@8)
-       GL_STUB_ALIAS(VertexAttribI2i, 836, VertexAttribI2i@12, VertexAttribI2iEXT, VertexAttribI2iEXT@12)
-       GL_STUB_ALIAS(VertexAttribI2iv, 837, VertexAttribI2iv@8, VertexAttribI2ivEXT, VertexAttribI2ivEXT@8)
-       GL_STUB_ALIAS(VertexAttribI2ui, 838, VertexAttribI2ui@12, VertexAttribI2uiEXT, VertexAttribI2uiEXT@12)
-       GL_STUB_ALIAS(VertexAttribI2uiv, 839, VertexAttribI2uiv@8, VertexAttribI2uivEXT, VertexAttribI2uivEXT@8)
-       GL_STUB_ALIAS(VertexAttribI3i, 840, VertexAttribI3i@16, VertexAttribI3iEXT, VertexAttribI3iEXT@16)
-       GL_STUB_ALIAS(VertexAttribI3iv, 841, VertexAttribI3iv@8, VertexAttribI3ivEXT, VertexAttribI3ivEXT@8)
-       GL_STUB_ALIAS(VertexAttribI3ui, 842, VertexAttribI3ui@16, VertexAttribI3uiEXT, VertexAttribI3uiEXT@16)
-       GL_STUB_ALIAS(VertexAttribI3uiv, 843, VertexAttribI3uiv@8, VertexAttribI3uivEXT, VertexAttribI3uivEXT@8)
-       GL_STUB_ALIAS(VertexAttribI4bv, 844, VertexAttribI4bv@8, VertexAttribI4bvEXT, VertexAttribI4bvEXT@8)
-       GL_STUB_ALIAS(VertexAttribI4i, 845, VertexAttribI4i@20, VertexAttribI4iEXT, VertexAttribI4iEXT@20)
-       GL_STUB_ALIAS(VertexAttribI4iv, 846, VertexAttribI4iv@8, VertexAttribI4ivEXT, VertexAttribI4ivEXT@8)
-       GL_STUB_ALIAS(VertexAttribI4sv, 847, VertexAttribI4sv@8, VertexAttribI4svEXT, VertexAttribI4svEXT@8)
-       GL_STUB_ALIAS(VertexAttribI4ubv, 848, VertexAttribI4ubv@8, VertexAttribI4ubvEXT, VertexAttribI4ubvEXT@8)
-       GL_STUB_ALIAS(VertexAttribI4ui, 849, VertexAttribI4ui@20, VertexAttribI4uiEXT, VertexAttribI4uiEXT@20)
-       GL_STUB_ALIAS(VertexAttribI4uiv, 850, VertexAttribI4uiv@8, VertexAttribI4uivEXT, VertexAttribI4uivEXT@8)
-       GL_STUB_ALIAS(VertexAttribI4usv, 851, VertexAttribI4usv@8, VertexAttribI4usvEXT, VertexAttribI4usvEXT@8)
-       GL_STUB_ALIAS(VertexAttribIPointer, 852, VertexAttribIPointer@20, VertexAttribIPointerEXT, VertexAttribIPointerEXT@20)
-       GL_STUB_ALIAS(FramebufferTextureLayer, 853, FramebufferTextureLayer@20, FramebufferTextureLayerEXT, FramebufferTextureLayerEXT@20)
-       GL_STUB_ALIAS(ColorMaski, 854, ColorMaski@20, ColorMaskIndexedEXT, ColorMaskIndexedEXT@20)
-       GL_STUB_ALIAS(Disablei, 855, Disablei@8, DisableIndexedEXT, DisableIndexedEXT@8)
-       GL_STUB_ALIAS(Enablei, 856, Enablei@8, EnableIndexedEXT, EnableIndexedEXT@8)
-       GL_STUB_ALIAS(GetBooleani_v, 857, GetBooleani_v@12, GetBooleanIndexedvEXT, GetBooleanIndexedvEXT@12)
-       GL_STUB_ALIAS(GetIntegeri_v, 858, GetIntegeri_v@12, GetIntegerIndexedvEXT, GetIntegerIndexedvEXT@12)
-       GL_STUB_ALIAS(IsEnabledi, 859, IsEnabledi@8, IsEnabledIndexedEXT, IsEnabledIndexedEXT@8)
-       GL_STUB_ALIAS(GetTexParameterIiv, 862, GetTexParameterIiv@12, GetTexParameterIivEXT, GetTexParameterIivEXT@12)
-       GL_STUB_ALIAS(GetTexParameterIuiv, 863, GetTexParameterIuiv@12, GetTexParameterIuivEXT, GetTexParameterIuivEXT@12)
-       GL_STUB_ALIAS(TexParameterIiv, 864, TexParameterIiv@12, TexParameterIivEXT, TexParameterIivEXT@12)
-       GL_STUB_ALIAS(TexParameterIuiv, 865, TexParameterIuiv@12, TexParameterIuivEXT, TexParameterIuivEXT@12)
-       GL_STUB_ALIAS(BeginConditionalRender, 866, BeginConditionalRender@8, BeginConditionalRenderNV, BeginConditionalRenderNV@8)
-       GL_STUB_ALIAS(EndConditionalRender, 867, EndConditionalRender@0, EndConditionalRenderNV, EndConditionalRenderNV@0)
-       GL_STUB_ALIAS(BeginTransformFeedback, 868, BeginTransformFeedback@4, BeginTransformFeedbackEXT, BeginTransformFeedbackEXT@4)
-       GL_STUB_ALIAS(BindBufferBase, 869, BindBufferBase@12, BindBufferBaseEXT, BindBufferBaseEXT@12)
-       GL_STUB_ALIAS(BindBufferRange, 871, BindBufferRange@20, BindBufferRangeEXT, BindBufferRangeEXT@20)
-       GL_STUB_ALIAS(EndTransformFeedback, 872, EndTransformFeedback@0, EndTransformFeedbackEXT, EndTransformFeedbackEXT@0)
-       GL_STUB_ALIAS(GetTransformFeedbackVarying, 873, GetTransformFeedbackVarying@28, GetTransformFeedbackVaryingEXT, GetTransformFeedbackVaryingEXT@28)
-       GL_STUB_ALIAS(TransformFeedbackVaryings, 874, TransformFeedbackVaryings@16, TransformFeedbackVaryingsEXT, TransformFeedbackVaryingsEXT@16)
-       GL_STUB_ALIAS(ProvokingVertex, 875, ProvokingVertex@4, ProvokingVertexEXT, ProvokingVertexEXT@4)
+       GL_STUB_ALIAS(DrawArraysInstancedEXT, 573, DrawArraysInstancedEXT@16, DrawArraysInstancedARB, DrawArraysInstancedARB@16)
+       GL_STUB_ALIAS(DrawArraysInstanced, 573, DrawArraysInstanced@16, DrawArraysInstancedARB, DrawArraysInstancedARB@16)
+       GL_STUB_ALIAS(DrawElementsInstancedEXT, 574, DrawElementsInstancedEXT@20, DrawElementsInstancedARB, DrawElementsInstancedARB@20)
+       GL_STUB_ALIAS(DrawElementsInstanced, 574, DrawElementsInstanced@20, DrawElementsInstancedARB, DrawElementsInstancedARB@20)
+       GL_STUB_ALIAS(RenderbufferStorageMultisampleEXT, 575, RenderbufferStorageMultisampleEXT@20, RenderbufferStorageMultisample, RenderbufferStorageMultisample@20)
+       GL_STUB_ALIAS(PointParameterf, 641, PointParameterf@8, PointParameterfEXT, PointParameterfEXT@8)
+       GL_STUB_ALIAS(PointParameterfARB, 641, PointParameterfARB@8, PointParameterfEXT, PointParameterfEXT@8)
+       GL_STUB_ALIAS(PointParameterfv, 642, PointParameterfv@8, PointParameterfvEXT, PointParameterfvEXT@8)
+       GL_STUB_ALIAS(PointParameterfvARB, 642, PointParameterfvARB@8, PointParameterfvEXT, PointParameterfvEXT@8)
+       GL_STUB_ALIAS(SecondaryColor3b, 645, SecondaryColor3b@12, SecondaryColor3bEXT, SecondaryColor3bEXT@12)
+       GL_STUB_ALIAS(SecondaryColor3bv, 646, SecondaryColor3bv@4, SecondaryColor3bvEXT, SecondaryColor3bvEXT@4)
+       GL_STUB_ALIAS(SecondaryColor3d, 647, SecondaryColor3d@24, SecondaryColor3dEXT, SecondaryColor3dEXT@24)
+       GL_STUB_ALIAS(SecondaryColor3dv, 648, SecondaryColor3dv@4, SecondaryColor3dvEXT, SecondaryColor3dvEXT@4)
+       GL_STUB_ALIAS(SecondaryColor3f, 649, SecondaryColor3f@12, SecondaryColor3fEXT, SecondaryColor3fEXT@12)
+       GL_STUB_ALIAS(SecondaryColor3fv, 650, SecondaryColor3fv@4, SecondaryColor3fvEXT, SecondaryColor3fvEXT@4)
+       GL_STUB_ALIAS(SecondaryColor3i, 651, SecondaryColor3i@12, SecondaryColor3iEXT, SecondaryColor3iEXT@12)
+       GL_STUB_ALIAS(SecondaryColor3iv, 652, SecondaryColor3iv@4, SecondaryColor3ivEXT, SecondaryColor3ivEXT@4)
+       GL_STUB_ALIAS(SecondaryColor3s, 653, SecondaryColor3s@12, SecondaryColor3sEXT, SecondaryColor3sEXT@12)
+       GL_STUB_ALIAS(SecondaryColor3sv, 654, SecondaryColor3sv@4, SecondaryColor3svEXT, SecondaryColor3svEXT@4)
+       GL_STUB_ALIAS(SecondaryColor3ub, 655, SecondaryColor3ub@12, SecondaryColor3ubEXT, SecondaryColor3ubEXT@12)
+       GL_STUB_ALIAS(SecondaryColor3ubv, 656, SecondaryColor3ubv@4, SecondaryColor3ubvEXT, SecondaryColor3ubvEXT@4)
+       GL_STUB_ALIAS(SecondaryColor3ui, 657, SecondaryColor3ui@12, SecondaryColor3uiEXT, SecondaryColor3uiEXT@12)
+       GL_STUB_ALIAS(SecondaryColor3uiv, 658, SecondaryColor3uiv@4, SecondaryColor3uivEXT, SecondaryColor3uivEXT@4)
+       GL_STUB_ALIAS(SecondaryColor3us, 659, SecondaryColor3us@12, SecondaryColor3usEXT, SecondaryColor3usEXT@12)
+       GL_STUB_ALIAS(SecondaryColor3usv, 660, SecondaryColor3usv@4, SecondaryColor3usvEXT, SecondaryColor3usvEXT@4)
+       GL_STUB_ALIAS(SecondaryColorPointer, 661, SecondaryColorPointer@16, SecondaryColorPointerEXT, SecondaryColorPointerEXT@16)
+       GL_STUB_ALIAS(MultiDrawArrays, 662, MultiDrawArrays@16, MultiDrawArraysEXT, MultiDrawArraysEXT@16)
+       GL_STUB_ALIAS(MultiDrawElements, 663, MultiDrawElements@20, MultiDrawElementsEXT, MultiDrawElementsEXT@20)
+       GL_STUB_ALIAS(FogCoordPointer, 664, FogCoordPointer@12, FogCoordPointerEXT, FogCoordPointerEXT@12)
+       GL_STUB_ALIAS(FogCoordd, 665, FogCoordd@8, FogCoorddEXT, FogCoorddEXT@8)
+       GL_STUB_ALIAS(FogCoorddv, 666, FogCoorddv@4, FogCoorddvEXT, FogCoorddvEXT@4)
+       GL_STUB_ALIAS(FogCoordf, 667, FogCoordf@4, FogCoordfEXT, FogCoordfEXT@4)
+       GL_STUB_ALIAS(FogCoordfv, 668, FogCoordfv@4, FogCoordfvEXT, FogCoordfvEXT@4)
+       GL_STUB_ALIAS(BlendFuncSeparate, 670, BlendFuncSeparate@16, BlendFuncSeparateEXT, BlendFuncSeparateEXT@16)
+       GL_STUB_ALIAS(WindowPos2d, 687, WindowPos2d@16, WindowPos2dMESA, WindowPos2dMESA@16)
+       GL_STUB_ALIAS(WindowPos2dARB, 687, WindowPos2dARB@16, WindowPos2dMESA, WindowPos2dMESA@16)
+       GL_STUB_ALIAS(WindowPos2dv, 688, WindowPos2dv@4, WindowPos2dvMESA, WindowPos2dvMESA@4)
+       GL_STUB_ALIAS(WindowPos2dvARB, 688, WindowPos2dvARB@4, WindowPos2dvMESA, WindowPos2dvMESA@4)
+       GL_STUB_ALIAS(WindowPos2f, 689, WindowPos2f@8, WindowPos2fMESA, WindowPos2fMESA@8)
+       GL_STUB_ALIAS(WindowPos2fARB, 689, WindowPos2fARB@8, WindowPos2fMESA, WindowPos2fMESA@8)
+       GL_STUB_ALIAS(WindowPos2fv, 690, WindowPos2fv@4, WindowPos2fvMESA, WindowPos2fvMESA@4)
+       GL_STUB_ALIAS(WindowPos2fvARB, 690, WindowPos2fvARB@4, WindowPos2fvMESA, WindowPos2fvMESA@4)
+       GL_STUB_ALIAS(WindowPos2i, 691, WindowPos2i@8, WindowPos2iMESA, WindowPos2iMESA@8)
+       GL_STUB_ALIAS(WindowPos2iARB, 691, WindowPos2iARB@8, WindowPos2iMESA, WindowPos2iMESA@8)
+       GL_STUB_ALIAS(WindowPos2iv, 692, WindowPos2iv@4, WindowPos2ivMESA, WindowPos2ivMESA@4)
+       GL_STUB_ALIAS(WindowPos2ivARB, 692, WindowPos2ivARB@4, WindowPos2ivMESA, WindowPos2ivMESA@4)
+       GL_STUB_ALIAS(WindowPos2s, 693, WindowPos2s@8, WindowPos2sMESA, WindowPos2sMESA@8)
+       GL_STUB_ALIAS(WindowPos2sARB, 693, WindowPos2sARB@8, WindowPos2sMESA, WindowPos2sMESA@8)
+       GL_STUB_ALIAS(WindowPos2sv, 694, WindowPos2sv@4, WindowPos2svMESA, WindowPos2svMESA@4)
+       GL_STUB_ALIAS(WindowPos2svARB, 694, WindowPos2svARB@4, WindowPos2svMESA, WindowPos2svMESA@4)
+       GL_STUB_ALIAS(WindowPos3d, 695, WindowPos3d@24, WindowPos3dMESA, WindowPos3dMESA@24)
+       GL_STUB_ALIAS(WindowPos3dARB, 695, WindowPos3dARB@24, WindowPos3dMESA, WindowPos3dMESA@24)
+       GL_STUB_ALIAS(WindowPos3dv, 696, WindowPos3dv@4, WindowPos3dvMESA, WindowPos3dvMESA@4)
+       GL_STUB_ALIAS(WindowPos3dvARB, 696, WindowPos3dvARB@4, WindowPos3dvMESA, WindowPos3dvMESA@4)
+       GL_STUB_ALIAS(WindowPos3f, 697, WindowPos3f@12, WindowPos3fMESA, WindowPos3fMESA@12)
+       GL_STUB_ALIAS(WindowPos3fARB, 697, WindowPos3fARB@12, WindowPos3fMESA, WindowPos3fMESA@12)
+       GL_STUB_ALIAS(WindowPos3fv, 698, WindowPos3fv@4, WindowPos3fvMESA, WindowPos3fvMESA@4)
+       GL_STUB_ALIAS(WindowPos3fvARB, 698, WindowPos3fvARB@4, WindowPos3fvMESA, WindowPos3fvMESA@4)
+       GL_STUB_ALIAS(WindowPos3i, 699, WindowPos3i@12, WindowPos3iMESA, WindowPos3iMESA@12)
+       GL_STUB_ALIAS(WindowPos3iARB, 699, WindowPos3iARB@12, WindowPos3iMESA, WindowPos3iMESA@12)
+       GL_STUB_ALIAS(WindowPos3iv, 700, WindowPos3iv@4, WindowPos3ivMESA, WindowPos3ivMESA@4)
+       GL_STUB_ALIAS(WindowPos3ivARB, 700, WindowPos3ivARB@4, WindowPos3ivMESA, WindowPos3ivMESA@4)
+       GL_STUB_ALIAS(WindowPos3s, 701, WindowPos3s@12, WindowPos3sMESA, WindowPos3sMESA@12)
+       GL_STUB_ALIAS(WindowPos3sARB, 701, WindowPos3sARB@12, WindowPos3sMESA, WindowPos3sMESA@12)
+       GL_STUB_ALIAS(WindowPos3sv, 702, WindowPos3sv@4, WindowPos3svMESA, WindowPos3svMESA@4)
+       GL_STUB_ALIAS(WindowPos3svARB, 702, WindowPos3svARB@4, WindowPos3svMESA, WindowPos3svMESA@4)
+       GL_STUB_ALIAS(BindProgramARB, 721, BindProgramARB@8, BindProgramNV, BindProgramNV@8)
+       GL_STUB_ALIAS(DeleteProgramsARB, 722, DeleteProgramsARB@8, DeleteProgramsNV, DeleteProgramsNV@8)
+       GL_STUB_ALIAS(GenProgramsARB, 724, GenProgramsARB@8, GenProgramsNV, GenProgramsNV@8)
+       GL_STUB_ALIAS(GetVertexAttribPointerv, 730, GetVertexAttribPointerv@12, GetVertexAttribPointervNV, GetVertexAttribPointervNV@12)
+       GL_STUB_ALIAS(GetVertexAttribPointervARB, 730, GetVertexAttribPointervARB@12, GetVertexAttribPointervNV, GetVertexAttribPointervNV@12)
+       GL_STUB_ALIAS(IsProgramARB, 734, IsProgramARB@4, IsProgramNV, IsProgramNV@4)
+       GL_STUB_ALIAS(PointParameteri, 798, PointParameteri@8, PointParameteriNV, PointParameteriNV@8)
+       GL_STUB_ALIAS(PointParameteriv, 799, PointParameteriv@8, PointParameterivNV, PointParameterivNV@8)
+       GL_STUB_ALIAS(DeleteVertexArrays, 802, DeleteVertexArrays@8, _dispatch_stub_802, _dispatch_stub_802@8)
+       GL_STUB_ALIAS(IsVertexArray, 804, IsVertexArray@4, _dispatch_stub_804, _dispatch_stub_804@4)
+       GL_STUB_ALIAS(PrimitiveRestartIndex, 811, PrimitiveRestartIndex@4, PrimitiveRestartIndexNV, PrimitiveRestartIndexNV@4)
+       GL_STUB_ALIAS(BlendEquationSeparate, 814, BlendEquationSeparate@8, _dispatch_stub_814, _dispatch_stub_814@8)
+       GL_STUB_ALIAS(BindFramebuffer, 815, BindFramebuffer@8, BindFramebufferEXT, BindFramebufferEXT@8)
+       GL_STUB_ALIAS(BindRenderbuffer, 816, BindRenderbuffer@8, BindRenderbufferEXT, BindRenderbufferEXT@8)
+       GL_STUB_ALIAS(CheckFramebufferStatus, 817, CheckFramebufferStatus@4, CheckFramebufferStatusEXT, CheckFramebufferStatusEXT@4)
+       GL_STUB_ALIAS(DeleteFramebuffers, 818, DeleteFramebuffers@8, DeleteFramebuffersEXT, DeleteFramebuffersEXT@8)
+       GL_STUB_ALIAS(DeleteRenderbuffers, 819, DeleteRenderbuffers@8, DeleteRenderbuffersEXT, DeleteRenderbuffersEXT@8)
+       GL_STUB_ALIAS(FramebufferRenderbuffer, 820, FramebufferRenderbuffer@16, FramebufferRenderbufferEXT, FramebufferRenderbufferEXT@16)
+       GL_STUB_ALIAS(FramebufferTexture1D, 821, FramebufferTexture1D@20, FramebufferTexture1DEXT, FramebufferTexture1DEXT@20)
+       GL_STUB_ALIAS(FramebufferTexture2D, 822, FramebufferTexture2D@20, FramebufferTexture2DEXT, FramebufferTexture2DEXT@20)
+       GL_STUB_ALIAS(FramebufferTexture3D, 823, FramebufferTexture3D@24, FramebufferTexture3DEXT, FramebufferTexture3DEXT@24)
+       GL_STUB_ALIAS(GenFramebuffers, 824, GenFramebuffers@8, GenFramebuffersEXT, GenFramebuffersEXT@8)
+       GL_STUB_ALIAS(GenRenderbuffers, 825, GenRenderbuffers@8, GenRenderbuffersEXT, GenRenderbuffersEXT@8)
+       GL_STUB_ALIAS(GenerateMipmap, 826, GenerateMipmap@4, GenerateMipmapEXT, GenerateMipmapEXT@4)
+       GL_STUB_ALIAS(GetFramebufferAttachmentParameteriv, 827, GetFramebufferAttachmentParameteriv@16, GetFramebufferAttachmentParameterivEXT, GetFramebufferAttachmentParameterivEXT@16)
+       GL_STUB_ALIAS(GetRenderbufferParameteriv, 828, GetRenderbufferParameteriv@12, GetRenderbufferParameterivEXT, GetRenderbufferParameterivEXT@12)
+       GL_STUB_ALIAS(IsFramebuffer, 829, IsFramebuffer@4, IsFramebufferEXT, IsFramebufferEXT@4)
+       GL_STUB_ALIAS(IsRenderbuffer, 830, IsRenderbuffer@4, IsRenderbufferEXT, IsRenderbufferEXT@4)
+       GL_STUB_ALIAS(RenderbufferStorage, 831, RenderbufferStorage@16, RenderbufferStorageEXT, RenderbufferStorageEXT@16)
+       GL_STUB_ALIAS(BlitFramebuffer, 832, BlitFramebuffer@40, _dispatch_stub_832, _dispatch_stub_832@40)
+       GL_STUB_ALIAS(BindFragDataLocation, 835, BindFragDataLocation@12, BindFragDataLocationEXT, BindFragDataLocationEXT@12)
+       GL_STUB_ALIAS(GetFragDataLocation, 836, GetFragDataLocation@8, GetFragDataLocationEXT, GetFragDataLocationEXT@8)
+       GL_STUB_ALIAS(GetUniformuiv, 837, GetUniformuiv@12, GetUniformuivEXT, GetUniformuivEXT@12)
+       GL_STUB_ALIAS(GetVertexAttribIiv, 838, GetVertexAttribIiv@12, GetVertexAttribIivEXT, GetVertexAttribIivEXT@12)
+       GL_STUB_ALIAS(GetVertexAttribIuiv, 839, GetVertexAttribIuiv@12, GetVertexAttribIuivEXT, GetVertexAttribIuivEXT@12)
+       GL_STUB_ALIAS(Uniform1ui, 840, Uniform1ui@8, Uniform1uiEXT, Uniform1uiEXT@8)
+       GL_STUB_ALIAS(Uniform1uiv, 841, Uniform1uiv@12, Uniform1uivEXT, Uniform1uivEXT@12)
+       GL_STUB_ALIAS(Uniform2ui, 842, Uniform2ui@12, Uniform2uiEXT, Uniform2uiEXT@12)
+       GL_STUB_ALIAS(Uniform2uiv, 843, Uniform2uiv@12, Uniform2uivEXT, Uniform2uivEXT@12)
+       GL_STUB_ALIAS(Uniform3ui, 844, Uniform3ui@16, Uniform3uiEXT, Uniform3uiEXT@16)
+       GL_STUB_ALIAS(Uniform3uiv, 845, Uniform3uiv@12, Uniform3uivEXT, Uniform3uivEXT@12)
+       GL_STUB_ALIAS(Uniform4ui, 846, Uniform4ui@20, Uniform4uiEXT, Uniform4uiEXT@20)
+       GL_STUB_ALIAS(Uniform4uiv, 847, Uniform4uiv@12, Uniform4uivEXT, Uniform4uivEXT@12)
+       GL_STUB_ALIAS(VertexAttribI1i, 848, VertexAttribI1i@8, VertexAttribI1iEXT, VertexAttribI1iEXT@8)
+       GL_STUB_ALIAS(VertexAttribI1iv, 849, VertexAttribI1iv@8, VertexAttribI1ivEXT, VertexAttribI1ivEXT@8)
+       GL_STUB_ALIAS(VertexAttribI1ui, 850, VertexAttribI1ui@8, VertexAttribI1uiEXT, VertexAttribI1uiEXT@8)
+       GL_STUB_ALIAS(VertexAttribI1uiv, 851, VertexAttribI1uiv@8, VertexAttribI1uivEXT, VertexAttribI1uivEXT@8)
+       GL_STUB_ALIAS(VertexAttribI2i, 852, VertexAttribI2i@12, VertexAttribI2iEXT, VertexAttribI2iEXT@12)
+       GL_STUB_ALIAS(VertexAttribI2iv, 853, VertexAttribI2iv@8, VertexAttribI2ivEXT, VertexAttribI2ivEXT@8)
+       GL_STUB_ALIAS(VertexAttribI2ui, 854, VertexAttribI2ui@12, VertexAttribI2uiEXT, VertexAttribI2uiEXT@12)
+       GL_STUB_ALIAS(VertexAttribI2uiv, 855, VertexAttribI2uiv@8, VertexAttribI2uivEXT, VertexAttribI2uivEXT@8)
+       GL_STUB_ALIAS(VertexAttribI3i, 856, VertexAttribI3i@16, VertexAttribI3iEXT, VertexAttribI3iEXT@16)
+       GL_STUB_ALIAS(VertexAttribI3iv, 857, VertexAttribI3iv@8, VertexAttribI3ivEXT, VertexAttribI3ivEXT@8)
+       GL_STUB_ALIAS(VertexAttribI3ui, 858, VertexAttribI3ui@16, VertexAttribI3uiEXT, VertexAttribI3uiEXT@16)
+       GL_STUB_ALIAS(VertexAttribI3uiv, 859, VertexAttribI3uiv@8, VertexAttribI3uivEXT, VertexAttribI3uivEXT@8)
+       GL_STUB_ALIAS(VertexAttribI4bv, 860, VertexAttribI4bv@8, VertexAttribI4bvEXT, VertexAttribI4bvEXT@8)
+       GL_STUB_ALIAS(VertexAttribI4i, 861, VertexAttribI4i@20, VertexAttribI4iEXT, VertexAttribI4iEXT@20)
+       GL_STUB_ALIAS(VertexAttribI4iv, 862, VertexAttribI4iv@8, VertexAttribI4ivEXT, VertexAttribI4ivEXT@8)
+       GL_STUB_ALIAS(VertexAttribI4sv, 863, VertexAttribI4sv@8, VertexAttribI4svEXT, VertexAttribI4svEXT@8)
+       GL_STUB_ALIAS(VertexAttribI4ubv, 864, VertexAttribI4ubv@8, VertexAttribI4ubvEXT, VertexAttribI4ubvEXT@8)
+       GL_STUB_ALIAS(VertexAttribI4ui, 865, VertexAttribI4ui@20, VertexAttribI4uiEXT, VertexAttribI4uiEXT@20)
+       GL_STUB_ALIAS(VertexAttribI4uiv, 866, VertexAttribI4uiv@8, VertexAttribI4uivEXT, VertexAttribI4uivEXT@8)
+       GL_STUB_ALIAS(VertexAttribI4usv, 867, VertexAttribI4usv@8, VertexAttribI4usvEXT, VertexAttribI4usvEXT@8)
+       GL_STUB_ALIAS(VertexAttribIPointer, 868, VertexAttribIPointer@20, VertexAttribIPointerEXT, VertexAttribIPointerEXT@20)
+       GL_STUB_ALIAS(FramebufferTextureLayer, 869, FramebufferTextureLayer@20, FramebufferTextureLayerEXT, FramebufferTextureLayerEXT@20)
+       GL_STUB_ALIAS(ColorMaski, 870, ColorMaski@20, ColorMaskIndexedEXT, ColorMaskIndexedEXT@20)
+       GL_STUB_ALIAS(Disablei, 871, Disablei@8, DisableIndexedEXT, DisableIndexedEXT@8)
+       GL_STUB_ALIAS(Enablei, 872, Enablei@8, EnableIndexedEXT, EnableIndexedEXT@8)
+       GL_STUB_ALIAS(GetBooleani_v, 873, GetBooleani_v@12, GetBooleanIndexedvEXT, GetBooleanIndexedvEXT@12)
+       GL_STUB_ALIAS(GetIntegeri_v, 874, GetIntegeri_v@12, GetIntegerIndexedvEXT, GetIntegerIndexedvEXT@12)
+       GL_STUB_ALIAS(IsEnabledi, 875, IsEnabledi@8, IsEnabledIndexedEXT, IsEnabledIndexedEXT@8)
+       GL_STUB_ALIAS(GetTexParameterIiv, 878, GetTexParameterIiv@12, GetTexParameterIivEXT, GetTexParameterIivEXT@12)
+       GL_STUB_ALIAS(GetTexParameterIuiv, 879, GetTexParameterIuiv@12, GetTexParameterIuivEXT, GetTexParameterIuivEXT@12)
+       GL_STUB_ALIAS(TexParameterIiv, 880, TexParameterIiv@12, TexParameterIivEXT, TexParameterIivEXT@12)
+       GL_STUB_ALIAS(TexParameterIuiv, 881, TexParameterIuiv@12, TexParameterIuivEXT, TexParameterIuivEXT@12)
+       GL_STUB_ALIAS(BeginConditionalRender, 882, BeginConditionalRender@8, BeginConditionalRenderNV, BeginConditionalRenderNV@8)
+       GL_STUB_ALIAS(EndConditionalRender, 883, EndConditionalRender@0, EndConditionalRenderNV, EndConditionalRenderNV@0)
+       GL_STUB_ALIAS(BeginTransformFeedback, 884, BeginTransformFeedback@4, BeginTransformFeedbackEXT, BeginTransformFeedbackEXT@4)
+       GL_STUB_ALIAS(BindBufferBase, 885, BindBufferBase@12, BindBufferBaseEXT, BindBufferBaseEXT@12)
+       GL_STUB_ALIAS(BindBufferRange, 887, BindBufferRange@20, BindBufferRangeEXT, BindBufferRangeEXT@20)
+       GL_STUB_ALIAS(EndTransformFeedback, 888, EndTransformFeedback@0, EndTransformFeedbackEXT, EndTransformFeedbackEXT@0)
+       GL_STUB_ALIAS(GetTransformFeedbackVarying, 889, GetTransformFeedbackVarying@28, GetTransformFeedbackVaryingEXT, GetTransformFeedbackVaryingEXT@28)
+       GL_STUB_ALIAS(TransformFeedbackVaryings, 890, TransformFeedbackVaryings@16, TransformFeedbackVaryingsEXT, TransformFeedbackVaryingsEXT@16)
+       GL_STUB_ALIAS(ProvokingVertex, 891, ProvokingVertex@4, ProvokingVertexEXT, ProvokingVertexEXT@4)
 
                GLOBL   GLNAME(gl_dispatch_functions_end)
                HIDDEN(GLNAME(gl_dispatch_functions_end))
index 1de71b97daf0b355458ea099324230e486fdfd64..5b7aeee6796ee0704e11effeb150834c871aba61 100644 (file)
@@ -471,7 +471,7 @@ struct _glapi_table
    void (GLAPIENTRYP UniformMatrix4x2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 428 */
    void (GLAPIENTRYP UniformMatrix4x3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); /* 429 */
    void (GLAPIENTRYP ClampColor)(GLenum target, GLenum clamp); /* 430 */
-   void (GLAPIENTRYP ClearBufferfi)(GLenum buffer, GLint drawbuffer, const GLfloat depth, const GLint stencil); /* 431 */
+   void (GLAPIENTRYP ClearBufferfi)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); /* 431 */
    void (GLAPIENTRYP ClearBufferfv)(GLenum buffer, GLint drawbuffer, const GLfloat * value); /* 432 */
    void (GLAPIENTRYP ClearBufferiv)(GLenum buffer, GLint drawbuffer, const GLint * value); /* 433 */
    void (GLAPIENTRYP ClearBufferuiv)(GLenum buffer, GLint drawbuffer, const GLuint * value); /* 434 */
@@ -612,326 +612,342 @@ struct _glapi_table
    void (GLAPIENTRYP GetActiveAttribARB)(GLhandleARB program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); /* 569 */
    GLint (GLAPIENTRYP GetAttribLocationARB)(GLhandleARB program, const GLcharARB * name); /* 570 */
    void (GLAPIENTRYP DrawBuffersARB)(GLsizei n, const GLenum * bufs); /* 571 */
-   void (GLAPIENTRYP DrawArraysInstancedARB)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); /* 572 */
-   void (GLAPIENTRYP DrawElementsInstancedARB)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount); /* 573 */
-   void (GLAPIENTRYP RenderbufferStorageMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); /* 574 */
-   void (GLAPIENTRYP FramebufferTextureARB)(GLenum target, GLenum attachment, GLuint texture, GLint level); /* 575 */
-   void (GLAPIENTRYP FramebufferTextureFaceARB)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); /* 576 */
-   void (GLAPIENTRYP ProgramParameteriARB)(GLuint program, GLenum pname, GLint value); /* 577 */
-   void (GLAPIENTRYP VertexAttribDivisorARB)(GLuint index, GLuint divisor); /* 578 */
-   void (GLAPIENTRYP FlushMappedBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length); /* 579 */
-   GLvoid * (GLAPIENTRYP MapBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); /* 580 */
-   void (GLAPIENTRYP BindVertexArray)(GLuint array); /* 581 */
-   void (GLAPIENTRYP GenVertexArrays)(GLsizei n, GLuint * arrays); /* 582 */
-   void (GLAPIENTRYP CopyBufferSubData)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); /* 583 */
-   GLenum (GLAPIENTRYP ClientWaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout); /* 584 */
-   void (GLAPIENTRYP DeleteSync)(GLsync sync); /* 585 */
-   GLsync (GLAPIENTRYP FenceSync)(GLenum condition, GLbitfield flags); /* 586 */
-   void (GLAPIENTRYP GetInteger64v)(GLenum pname, GLint64 * params); /* 587 */
-   void (GLAPIENTRYP GetSynciv)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); /* 588 */
-   GLboolean (GLAPIENTRYP IsSync)(GLsync sync); /* 589 */
-   void (GLAPIENTRYP WaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout); /* 590 */
-   void (GLAPIENTRYP DrawElementsBaseVertex)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex); /* 591 */
-   void (GLAPIENTRYP DrawRangeElementsBaseVertex)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex); /* 592 */
-   void (GLAPIENTRYP MultiDrawElementsBaseVertex)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount, const GLint * basevertex); /* 593 */
-   void (GLAPIENTRYP BlendEquationSeparateiARB)(GLuint buf, GLenum modeRGB, GLenum modeA); /* 594 */
-   void (GLAPIENTRYP BlendEquationiARB)(GLuint buf, GLenum mode); /* 595 */
-   void (GLAPIENTRYP BlendFuncSeparateiARB)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcA, GLenum dstA); /* 596 */
-   void (GLAPIENTRYP BlendFunciARB)(GLuint buf, GLenum src, GLenum dst); /* 597 */
-   void (GLAPIENTRYP BindTransformFeedback)(GLenum target, GLuint id); /* 598 */
-   void (GLAPIENTRYP DeleteTransformFeedbacks)(GLsizei n, const GLuint * ids); /* 599 */
-   void (GLAPIENTRYP DrawTransformFeedback)(GLenum mode, GLuint id); /* 600 */
-   void (GLAPIENTRYP GenTransformFeedbacks)(GLsizei n, GLuint * ids); /* 601 */
-   GLboolean (GLAPIENTRYP IsTransformFeedback)(GLuint id); /* 602 */
-   void (GLAPIENTRYP PauseTransformFeedback)(void); /* 603 */
-   void (GLAPIENTRYP ResumeTransformFeedback)(void); /* 604 */
-   void (GLAPIENTRYP ClearDepthf)(GLclampf depth); /* 605 */
-   void (GLAPIENTRYP DepthRangef)(GLclampf zNear, GLclampf zFar); /* 606 */
-   void (GLAPIENTRYP GetShaderPrecisionFormat)(GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision); /* 607 */
-   void (GLAPIENTRYP ReleaseShaderCompiler)(void); /* 608 */
-   void (GLAPIENTRYP ShaderBinary)(GLsizei n, const GLuint * shaders, GLenum binaryformat, const GLvoid * binary, GLsizei length); /* 609 */
-   void (GLAPIENTRYP PolygonOffsetEXT)(GLfloat factor, GLfloat bias); /* 610 */
-   void (GLAPIENTRYP GetPixelTexGenParameterfvSGIS)(GLenum pname, GLfloat * params); /* 611 */
-   void (GLAPIENTRYP GetPixelTexGenParameterivSGIS)(GLenum pname, GLint * params); /* 612 */
-   void (GLAPIENTRYP PixelTexGenParameterfSGIS)(GLenum pname, GLfloat param); /* 613 */
-   void (GLAPIENTRYP PixelTexGenParameterfvSGIS)(GLenum pname, const GLfloat * params); /* 614 */
-   void (GLAPIENTRYP PixelTexGenParameteriSGIS)(GLenum pname, GLint param); /* 615 */
-   void (GLAPIENTRYP PixelTexGenParameterivSGIS)(GLenum pname, const GLint * params); /* 616 */
-   void (GLAPIENTRYP SampleMaskSGIS)(GLclampf value, GLboolean invert); /* 617 */
-   void (GLAPIENTRYP SamplePatternSGIS)(GLenum pattern); /* 618 */
-   void (GLAPIENTRYP ColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 619 */
-   void (GLAPIENTRYP EdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean * pointer); /* 620 */
-   void (GLAPIENTRYP IndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 621 */
-   void (GLAPIENTRYP NormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 622 */
-   void (GLAPIENTRYP TexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 623 */
-   void (GLAPIENTRYP VertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 624 */
-   void (GLAPIENTRYP PointParameterfEXT)(GLenum pname, GLfloat param); /* 625 */
-   void (GLAPIENTRYP PointParameterfvEXT)(GLenum pname, const GLfloat * params); /* 626 */
-   void (GLAPIENTRYP LockArraysEXT)(GLint first, GLsizei count); /* 627 */
-   void (GLAPIENTRYP UnlockArraysEXT)(void); /* 628 */
-   void (GLAPIENTRYP SecondaryColor3bEXT)(GLbyte red, GLbyte green, GLbyte blue); /* 629 */
-   void (GLAPIENTRYP SecondaryColor3bvEXT)(const GLbyte * v); /* 630 */
-   void (GLAPIENTRYP SecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue); /* 631 */
-   void (GLAPIENTRYP SecondaryColor3dvEXT)(const GLdouble * v); /* 632 */
-   void (GLAPIENTRYP SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue); /* 633 */
-   void (GLAPIENTRYP SecondaryColor3fvEXT)(const GLfloat * v); /* 634 */
-   void (GLAPIENTRYP SecondaryColor3iEXT)(GLint red, GLint green, GLint blue); /* 635 */
-   void (GLAPIENTRYP SecondaryColor3ivEXT)(const GLint * v); /* 636 */
-   void (GLAPIENTRYP SecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue); /* 637 */
-   void (GLAPIENTRYP SecondaryColor3svEXT)(const GLshort * v); /* 638 */
-   void (GLAPIENTRYP SecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue); /* 639 */
-   void (GLAPIENTRYP SecondaryColor3ubvEXT)(const GLubyte * v); /* 640 */
-   void (GLAPIENTRYP SecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue); /* 641 */
-   void (GLAPIENTRYP SecondaryColor3uivEXT)(const GLuint * v); /* 642 */
-   void (GLAPIENTRYP SecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue); /* 643 */
-   void (GLAPIENTRYP SecondaryColor3usvEXT)(const GLushort * v); /* 644 */
-   void (GLAPIENTRYP SecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 645 */
-   void (GLAPIENTRYP MultiDrawArraysEXT)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); /* 646 */
-   void (GLAPIENTRYP MultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount); /* 647 */
-   void (GLAPIENTRYP FogCoordPointerEXT)(GLenum type, GLsizei stride, const GLvoid * pointer); /* 648 */
-   void (GLAPIENTRYP FogCoorddEXT)(GLdouble coord); /* 649 */
-   void (GLAPIENTRYP FogCoorddvEXT)(const GLdouble * coord); /* 650 */
-   void (GLAPIENTRYP FogCoordfEXT)(GLfloat coord); /* 651 */
-   void (GLAPIENTRYP FogCoordfvEXT)(const GLfloat * coord); /* 652 */
-   void (GLAPIENTRYP PixelTexGenSGIX)(GLenum mode); /* 653 */
-   void (GLAPIENTRYP BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); /* 654 */
-   void (GLAPIENTRYP FlushVertexArrayRangeNV)(void); /* 655 */
-   void (GLAPIENTRYP VertexArrayRangeNV)(GLsizei length, const GLvoid * pointer); /* 656 */
-   void (GLAPIENTRYP CombinerInputNV)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 657 */
-   void (GLAPIENTRYP CombinerOutputNV)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); /* 658 */
-   void (GLAPIENTRYP CombinerParameterfNV)(GLenum pname, GLfloat param); /* 659 */
-   void (GLAPIENTRYP CombinerParameterfvNV)(GLenum pname, const GLfloat * params); /* 660 */
-   void (GLAPIENTRYP CombinerParameteriNV)(GLenum pname, GLint param); /* 661 */
-   void (GLAPIENTRYP CombinerParameterivNV)(GLenum pname, const GLint * params); /* 662 */
-   void (GLAPIENTRYP FinalCombinerInputNV)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 663 */
-   void (GLAPIENTRYP GetCombinerInputParameterfvNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params); /* 664 */
-   void (GLAPIENTRYP GetCombinerInputParameterivNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params); /* 665 */
-   void (GLAPIENTRYP GetCombinerOutputParameterfvNV)(GLenum stage, GLenum portion, GLenum pname, GLfloat * params); /* 666 */
-   void (GLAPIENTRYP GetCombinerOutputParameterivNV)(GLenum stage, GLenum portion, GLenum pname, GLint * params); /* 667 */
-   void (GLAPIENTRYP GetFinalCombinerInputParameterfvNV)(GLenum variable, GLenum pname, GLfloat * params); /* 668 */
-   void (GLAPIENTRYP GetFinalCombinerInputParameterivNV)(GLenum variable, GLenum pname, GLint * params); /* 669 */
-   void (GLAPIENTRYP ResizeBuffersMESA)(void); /* 670 */
-   void (GLAPIENTRYP WindowPos2dMESA)(GLdouble x, GLdouble y); /* 671 */
-   void (GLAPIENTRYP WindowPos2dvMESA)(const GLdouble * v); /* 672 */
-   void (GLAPIENTRYP WindowPos2fMESA)(GLfloat x, GLfloat y); /* 673 */
-   void (GLAPIENTRYP WindowPos2fvMESA)(const GLfloat * v); /* 674 */
-   void (GLAPIENTRYP WindowPos2iMESA)(GLint x, GLint y); /* 675 */
-   void (GLAPIENTRYP WindowPos2ivMESA)(const GLint * v); /* 676 */
-   void (GLAPIENTRYP WindowPos2sMESA)(GLshort x, GLshort y); /* 677 */
-   void (GLAPIENTRYP WindowPos2svMESA)(const GLshort * v); /* 678 */
-   void (GLAPIENTRYP WindowPos3dMESA)(GLdouble x, GLdouble y, GLdouble z); /* 679 */
-   void (GLAPIENTRYP WindowPos3dvMESA)(const GLdouble * v); /* 680 */
-   void (GLAPIENTRYP WindowPos3fMESA)(GLfloat x, GLfloat y, GLfloat z); /* 681 */
-   void (GLAPIENTRYP WindowPos3fvMESA)(const GLfloat * v); /* 682 */
-   void (GLAPIENTRYP WindowPos3iMESA)(GLint x, GLint y, GLint z); /* 683 */
-   void (GLAPIENTRYP WindowPos3ivMESA)(const GLint * v); /* 684 */
-   void (GLAPIENTRYP WindowPos3sMESA)(GLshort x, GLshort y, GLshort z); /* 685 */
-   void (GLAPIENTRYP WindowPos3svMESA)(const GLshort * v); /* 686 */
-   void (GLAPIENTRYP WindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 687 */
-   void (GLAPIENTRYP WindowPos4dvMESA)(const GLdouble * v); /* 688 */
-   void (GLAPIENTRYP WindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 689 */
-   void (GLAPIENTRYP WindowPos4fvMESA)(const GLfloat * v); /* 690 */
-   void (GLAPIENTRYP WindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w); /* 691 */
-   void (GLAPIENTRYP WindowPos4ivMESA)(const GLint * v); /* 692 */
-   void (GLAPIENTRYP WindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w); /* 693 */
-   void (GLAPIENTRYP WindowPos4svMESA)(const GLshort * v); /* 694 */
-   void (GLAPIENTRYP MultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); /* 695 */
-   void (GLAPIENTRYP MultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride); /* 696 */
-   void (GLAPIENTRYP DeleteFencesNV)(GLsizei n, const GLuint * fences); /* 697 */
-   void (GLAPIENTRYP FinishFenceNV)(GLuint fence); /* 698 */
-   void (GLAPIENTRYP GenFencesNV)(GLsizei n, GLuint * fences); /* 699 */
-   void (GLAPIENTRYP GetFenceivNV)(GLuint fence, GLenum pname, GLint * params); /* 700 */
-   GLboolean (GLAPIENTRYP IsFenceNV)(GLuint fence); /* 701 */
-   void (GLAPIENTRYP SetFenceNV)(GLuint fence, GLenum condition); /* 702 */
-   GLboolean (GLAPIENTRYP TestFenceNV)(GLuint fence); /* 703 */
-   GLboolean (GLAPIENTRYP AreProgramsResidentNV)(GLsizei n, const GLuint * ids, GLboolean * residences); /* 704 */
-   void (GLAPIENTRYP BindProgramNV)(GLenum target, GLuint program); /* 705 */
-   void (GLAPIENTRYP DeleteProgramsNV)(GLsizei n, const GLuint * programs); /* 706 */
-   void (GLAPIENTRYP ExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params); /* 707 */
-   void (GLAPIENTRYP GenProgramsNV)(GLsizei n, GLuint * programs); /* 708 */
-   void (GLAPIENTRYP GetProgramParameterdvNV)(GLenum target, GLuint index, GLenum pname, GLdouble * params); /* 709 */
-   void (GLAPIENTRYP GetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * params); /* 710 */
-   void (GLAPIENTRYP GetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program); /* 711 */
-   void (GLAPIENTRYP GetProgramivNV)(GLuint id, GLenum pname, GLint * params); /* 712 */
-   void (GLAPIENTRYP GetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params); /* 713 */
-   void (GLAPIENTRYP GetVertexAttribPointervNV)(GLuint index, GLenum pname, GLvoid ** pointer); /* 714 */
-   void (GLAPIENTRYP GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params); /* 715 */
-   void (GLAPIENTRYP GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params); /* 716 */
-   void (GLAPIENTRYP GetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params); /* 717 */
-   GLboolean (GLAPIENTRYP IsProgramNV)(GLuint program); /* 718 */
-   void (GLAPIENTRYP LoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program); /* 719 */
-   void (GLAPIENTRYP ProgramParameters4dvNV)(GLenum target, GLuint index, GLsizei num, const GLdouble * params); /* 720 */
-   void (GLAPIENTRYP ProgramParameters4fvNV)(GLenum target, GLuint index, GLsizei num, const GLfloat * params); /* 721 */
-   void (GLAPIENTRYP RequestResidentProgramsNV)(GLsizei n, const GLuint * ids); /* 722 */
-   void (GLAPIENTRYP TrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform); /* 723 */
-   void (GLAPIENTRYP VertexAttrib1dNV)(GLuint index, GLdouble x); /* 724 */
-   void (GLAPIENTRYP VertexAttrib1dvNV)(GLuint index, const GLdouble * v); /* 725 */
-   void (GLAPIENTRYP VertexAttrib1fNV)(GLuint index, GLfloat x); /* 726 */
-   void (GLAPIENTRYP VertexAttrib1fvNV)(GLuint index, const GLfloat * v); /* 727 */
-   void (GLAPIENTRYP VertexAttrib1sNV)(GLuint index, GLshort x); /* 728 */
-   void (GLAPIENTRYP VertexAttrib1svNV)(GLuint index, const GLshort * v); /* 729 */
-   void (GLAPIENTRYP VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y); /* 730 */
-   void (GLAPIENTRYP VertexAttrib2dvNV)(GLuint index, const GLdouble * v); /* 731 */
-   void (GLAPIENTRYP VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y); /* 732 */
-   void (GLAPIENTRYP VertexAttrib2fvNV)(GLuint index, const GLfloat * v); /* 733 */
-   void (GLAPIENTRYP VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y); /* 734 */
-   void (GLAPIENTRYP VertexAttrib2svNV)(GLuint index, const GLshort * v); /* 735 */
-   void (GLAPIENTRYP VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z); /* 736 */
-   void (GLAPIENTRYP VertexAttrib3dvNV)(GLuint index, const GLdouble * v); /* 737 */
-   void (GLAPIENTRYP VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z); /* 738 */
-   void (GLAPIENTRYP VertexAttrib3fvNV)(GLuint index, const GLfloat * v); /* 739 */
-   void (GLAPIENTRYP VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z); /* 740 */
-   void (GLAPIENTRYP VertexAttrib3svNV)(GLuint index, const GLshort * v); /* 741 */
-   void (GLAPIENTRYP VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 742 */
-   void (GLAPIENTRYP VertexAttrib4dvNV)(GLuint index, const GLdouble * v); /* 743 */
-   void (GLAPIENTRYP VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 744 */
-   void (GLAPIENTRYP VertexAttrib4fvNV)(GLuint index, const GLfloat * v); /* 745 */
-   void (GLAPIENTRYP VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); /* 746 */
-   void (GLAPIENTRYP VertexAttrib4svNV)(GLuint index, const GLshort * v); /* 747 */
-   void (GLAPIENTRYP VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); /* 748 */
-   void (GLAPIENTRYP VertexAttrib4ubvNV)(GLuint index, const GLubyte * v); /* 749 */
-   void (GLAPIENTRYP VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 750 */
-   void (GLAPIENTRYP VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 751 */
-   void (GLAPIENTRYP VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 752 */
-   void (GLAPIENTRYP VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort * v); /* 753 */
-   void (GLAPIENTRYP VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 754 */
-   void (GLAPIENTRYP VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 755 */
-   void (GLAPIENTRYP VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort * v); /* 756 */
-   void (GLAPIENTRYP VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 757 */
-   void (GLAPIENTRYP VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 758 */
-   void (GLAPIENTRYP VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort * v); /* 759 */
-   void (GLAPIENTRYP VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 760 */
-   void (GLAPIENTRYP VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 761 */
-   void (GLAPIENTRYP VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v); /* 762 */
-   void (GLAPIENTRYP VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v); /* 763 */
-   void (GLAPIENTRYP GetTexBumpParameterfvATI)(GLenum pname, GLfloat * param); /* 764 */
-   void (GLAPIENTRYP GetTexBumpParameterivATI)(GLenum pname, GLint * param); /* 765 */
-   void (GLAPIENTRYP TexBumpParameterfvATI)(GLenum pname, const GLfloat * param); /* 766 */
-   void (GLAPIENTRYP TexBumpParameterivATI)(GLenum pname, const GLint * param); /* 767 */
-   void (GLAPIENTRYP AlphaFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 768 */
-   void (GLAPIENTRYP AlphaFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 769 */
-   void (GLAPIENTRYP AlphaFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 770 */
-   void (GLAPIENTRYP BeginFragmentShaderATI)(void); /* 771 */
-   void (GLAPIENTRYP BindFragmentShaderATI)(GLuint id); /* 772 */
-   void (GLAPIENTRYP ColorFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 773 */
-   void (GLAPIENTRYP ColorFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 774 */
-   void (GLAPIENTRYP ColorFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 775 */
-   void (GLAPIENTRYP DeleteFragmentShaderATI)(GLuint id); /* 776 */
-   void (GLAPIENTRYP EndFragmentShaderATI)(void); /* 777 */
-   GLuint (GLAPIENTRYP GenFragmentShadersATI)(GLuint range); /* 778 */
-   void (GLAPIENTRYP PassTexCoordATI)(GLuint dst, GLuint coord, GLenum swizzle); /* 779 */
-   void (GLAPIENTRYP SampleMapATI)(GLuint dst, GLuint interp, GLenum swizzle); /* 780 */
-   void (GLAPIENTRYP SetFragmentShaderConstantATI)(GLuint dst, const GLfloat * value); /* 781 */
-   void (GLAPIENTRYP PointParameteriNV)(GLenum pname, GLint param); /* 782 */
-   void (GLAPIENTRYP PointParameterivNV)(GLenum pname, const GLint * params); /* 783 */
-   void (GLAPIENTRYP ActiveStencilFaceEXT)(GLenum face); /* 784 */
-   void (GLAPIENTRYP BindVertexArrayAPPLE)(GLuint array); /* 785 */
-   void (GLAPIENTRYP DeleteVertexArraysAPPLE)(GLsizei n, const GLuint * arrays); /* 786 */
-   void (GLAPIENTRYP GenVertexArraysAPPLE)(GLsizei n, GLuint * arrays); /* 787 */
-   GLboolean (GLAPIENTRYP IsVertexArrayAPPLE)(GLuint array); /* 788 */
-   void (GLAPIENTRYP GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); /* 789 */
-   void (GLAPIENTRYP GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); /* 790 */
-   void (GLAPIENTRYP ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 791 */
-   void (GLAPIENTRYP ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); /* 792 */
-   void (GLAPIENTRYP ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 793 */
-   void (GLAPIENTRYP ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); /* 794 */
-   void (GLAPIENTRYP PrimitiveRestartIndexNV)(GLuint index); /* 795 */
-   void (GLAPIENTRYP PrimitiveRestartNV)(void); /* 796 */
-   void (GLAPIENTRYP DepthBoundsEXT)(GLclampd zmin, GLclampd zmax); /* 797 */
-   void (GLAPIENTRYP BlendEquationSeparateEXT)(GLenum modeRGB, GLenum modeA); /* 798 */
-   void (GLAPIENTRYP BindFramebufferEXT)(GLenum target, GLuint framebuffer); /* 799 */
-   void (GLAPIENTRYP BindRenderbufferEXT)(GLenum target, GLuint renderbuffer); /* 800 */
-   GLenum (GLAPIENTRYP CheckFramebufferStatusEXT)(GLenum target); /* 801 */
-   void (GLAPIENTRYP DeleteFramebuffersEXT)(GLsizei n, const GLuint * framebuffers); /* 802 */
-   void (GLAPIENTRYP DeleteRenderbuffersEXT)(GLsizei n, const GLuint * renderbuffers); /* 803 */
-   void (GLAPIENTRYP FramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); /* 804 */
-   void (GLAPIENTRYP FramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); /* 805 */
-   void (GLAPIENTRYP FramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); /* 806 */
-   void (GLAPIENTRYP FramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); /* 807 */
-   void (GLAPIENTRYP GenFramebuffersEXT)(GLsizei n, GLuint * framebuffers); /* 808 */
-   void (GLAPIENTRYP GenRenderbuffersEXT)(GLsizei n, GLuint * renderbuffers); /* 809 */
-   void (GLAPIENTRYP GenerateMipmapEXT)(GLenum target); /* 810 */
-   void (GLAPIENTRYP GetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint * params); /* 811 */
-   void (GLAPIENTRYP GetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 812 */
-   GLboolean (GLAPIENTRYP IsFramebufferEXT)(GLuint framebuffer); /* 813 */
-   GLboolean (GLAPIENTRYP IsRenderbufferEXT)(GLuint renderbuffer); /* 814 */
-   void (GLAPIENTRYP RenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); /* 815 */
-   void (GLAPIENTRYP BlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); /* 816 */
-   void (GLAPIENTRYP BufferParameteriAPPLE)(GLenum target, GLenum pname, GLint param); /* 817 */
-   void (GLAPIENTRYP FlushMappedBufferRangeAPPLE)(GLenum target, GLintptr offset, GLsizeiptr size); /* 818 */
-   void (GLAPIENTRYP BindFragDataLocationEXT)(GLuint program, GLuint colorNumber, const GLchar * name); /* 819 */
-   GLint (GLAPIENTRYP GetFragDataLocationEXT)(GLuint program, const GLchar * name); /* 820 */
-   void (GLAPIENTRYP GetUniformuivEXT)(GLuint program, GLint location, GLuint * params); /* 821 */
-   void (GLAPIENTRYP GetVertexAttribIivEXT)(GLuint index, GLenum pname, GLint * params); /* 822 */
-   void (GLAPIENTRYP GetVertexAttribIuivEXT)(GLuint index, GLenum pname, GLuint * params); /* 823 */
-   void (GLAPIENTRYP Uniform1uiEXT)(GLint location, GLuint x); /* 824 */
-   void (GLAPIENTRYP Uniform1uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 825 */
-   void (GLAPIENTRYP Uniform2uiEXT)(GLint location, GLuint x, GLuint y); /* 826 */
-   void (GLAPIENTRYP Uniform2uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 827 */
-   void (GLAPIENTRYP Uniform3uiEXT)(GLint location, GLuint x, GLuint y, GLuint z); /* 828 */
-   void (GLAPIENTRYP Uniform3uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 829 */
-   void (GLAPIENTRYP Uniform4uiEXT)(GLint location, GLuint x, GLuint y, GLuint z, GLuint w); /* 830 */
-   void (GLAPIENTRYP Uniform4uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 831 */
-   void (GLAPIENTRYP VertexAttribI1iEXT)(GLuint index, GLint x); /* 832 */
-   void (GLAPIENTRYP VertexAttribI1ivEXT)(GLuint index, const GLint * v); /* 833 */
-   void (GLAPIENTRYP VertexAttribI1uiEXT)(GLuint index, GLuint x); /* 834 */
-   void (GLAPIENTRYP VertexAttribI1uivEXT)(GLuint index, const GLuint * v); /* 835 */
-   void (GLAPIENTRYP VertexAttribI2iEXT)(GLuint index, GLint x, GLint y); /* 836 */
-   void (GLAPIENTRYP VertexAttribI2ivEXT)(GLuint index, const GLint * v); /* 837 */
-   void (GLAPIENTRYP VertexAttribI2uiEXT)(GLuint index, GLuint x, GLuint y); /* 838 */
-   void (GLAPIENTRYP VertexAttribI2uivEXT)(GLuint index, const GLuint * v); /* 839 */
-   void (GLAPIENTRYP VertexAttribI3iEXT)(GLuint index, GLint x, GLint y, GLint z); /* 840 */
-   void (GLAPIENTRYP VertexAttribI3ivEXT)(GLuint index, const GLint * v); /* 841 */
-   void (GLAPIENTRYP VertexAttribI3uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z); /* 842 */
-   void (GLAPIENTRYP VertexAttribI3uivEXT)(GLuint index, const GLuint * v); /* 843 */
-   void (GLAPIENTRYP VertexAttribI4bvEXT)(GLuint index, const GLbyte * v); /* 844 */
-   void (GLAPIENTRYP VertexAttribI4iEXT)(GLuint index, GLint x, GLint y, GLint z, GLint w); /* 845 */
-   void (GLAPIENTRYP VertexAttribI4ivEXT)(GLuint index, const GLint * v); /* 846 */
-   void (GLAPIENTRYP VertexAttribI4svEXT)(GLuint index, const GLshort * v); /* 847 */
-   void (GLAPIENTRYP VertexAttribI4ubvEXT)(GLuint index, const GLubyte * v); /* 848 */
-   void (GLAPIENTRYP VertexAttribI4uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); /* 849 */
-   void (GLAPIENTRYP VertexAttribI4uivEXT)(GLuint index, const GLuint * v); /* 850 */
-   void (GLAPIENTRYP VertexAttribI4usvEXT)(GLuint index, const GLushort * v); /* 851 */
-   void (GLAPIENTRYP VertexAttribIPointerEXT)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 852 */
-   void (GLAPIENTRYP FramebufferTextureLayerEXT)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); /* 853 */
-   void (GLAPIENTRYP ColorMaskIndexedEXT)(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a); /* 854 */
-   void (GLAPIENTRYP DisableIndexedEXT)(GLenum target, GLuint index); /* 855 */
-   void (GLAPIENTRYP EnableIndexedEXT)(GLenum target, GLuint index); /* 856 */
-   void (GLAPIENTRYP GetBooleanIndexedvEXT)(GLenum value, GLuint index, GLboolean * data); /* 857 */
-   void (GLAPIENTRYP GetIntegerIndexedvEXT)(GLenum value, GLuint index, GLint * data); /* 858 */
-   GLboolean (GLAPIENTRYP IsEnabledIndexedEXT)(GLenum target, GLuint index); /* 859 */
-   void (GLAPIENTRYP ClearColorIiEXT)(GLint r, GLint g, GLint b, GLint a); /* 860 */
-   void (GLAPIENTRYP ClearColorIuiEXT)(GLuint r, GLuint g, GLuint b, GLuint a); /* 861 */
-   void (GLAPIENTRYP GetTexParameterIivEXT)(GLenum target, GLenum pname, GLint * params); /* 862 */
-   void (GLAPIENTRYP GetTexParameterIuivEXT)(GLenum target, GLenum pname, GLuint * params); /* 863 */
-   void (GLAPIENTRYP TexParameterIivEXT)(GLenum target, GLenum pname, const GLint * params); /* 864 */
-   void (GLAPIENTRYP TexParameterIuivEXT)(GLenum target, GLenum pname, const GLuint * params); /* 865 */
-   void (GLAPIENTRYP BeginConditionalRenderNV)(GLuint query, GLenum mode); /* 866 */
-   void (GLAPIENTRYP EndConditionalRenderNV)(void); /* 867 */
-   void (GLAPIENTRYP BeginTransformFeedbackEXT)(GLenum mode); /* 868 */
-   void (GLAPIENTRYP BindBufferBaseEXT)(GLenum target, GLuint index, GLuint buffer); /* 869 */
-   void (GLAPIENTRYP BindBufferOffsetEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); /* 870 */
-   void (GLAPIENTRYP BindBufferRangeEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); /* 871 */
-   void (GLAPIENTRYP EndTransformFeedbackEXT)(void); /* 872 */
-   void (GLAPIENTRYP GetTransformFeedbackVaryingEXT)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); /* 873 */
-   void (GLAPIENTRYP TransformFeedbackVaryingsEXT)(GLuint program, GLsizei count, const char ** varyings, GLenum bufferMode); /* 874 */
-   void (GLAPIENTRYP ProvokingVertexEXT)(GLenum mode); /* 875 */
-   void (GLAPIENTRYP GetTexParameterPointervAPPLE)(GLenum target, GLenum pname, GLvoid ** params); /* 876 */
-   void (GLAPIENTRYP TextureRangeAPPLE)(GLenum target, GLsizei length, GLvoid * pointer); /* 877 */
-   void (GLAPIENTRYP GetObjectParameterivAPPLE)(GLenum objectType, GLuint name, GLenum pname, GLint * value); /* 878 */
-   GLenum (GLAPIENTRYP ObjectPurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); /* 879 */
-   GLenum (GLAPIENTRYP ObjectUnpurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); /* 880 */
-   void (GLAPIENTRYP ActiveProgramEXT)(GLuint program); /* 881 */
-   GLuint (GLAPIENTRYP CreateShaderProgramEXT)(GLenum type, const GLchar * string); /* 882 */
-   void (GLAPIENTRYP UseShaderProgramEXT)(GLenum type, GLuint program); /* 883 */
-   void (GLAPIENTRYP TextureBarrierNV)(void); /* 884 */
-   void (GLAPIENTRYP StencilFuncSeparateATI)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); /* 885 */
-   void (GLAPIENTRYP ProgramEnvParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 886 */
-   void (GLAPIENTRYP ProgramLocalParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 887 */
-   void (GLAPIENTRYP GetQueryObjecti64vEXT)(GLuint id, GLenum pname, GLint64EXT * params); /* 888 */
-   void (GLAPIENTRYP GetQueryObjectui64vEXT)(GLuint id, GLenum pname, GLuint64EXT * params); /* 889 */
-   void (GLAPIENTRYP EGLImageTargetRenderbufferStorageOES)(GLenum target, GLvoid * writeOffset); /* 890 */
-   void (GLAPIENTRYP EGLImageTargetTexture2DOES)(GLenum target, GLvoid * writeOffset); /* 891 */
+   void (GLAPIENTRYP ClampColorARB)(GLenum target, GLenum clamp); /* 572 */
+   void (GLAPIENTRYP DrawArraysInstancedARB)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); /* 573 */
+   void (GLAPIENTRYP DrawElementsInstancedARB)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount); /* 574 */
+   void (GLAPIENTRYP RenderbufferStorageMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); /* 575 */
+   void (GLAPIENTRYP FramebufferTextureARB)(GLenum target, GLenum attachment, GLuint texture, GLint level); /* 576 */
+   void (GLAPIENTRYP FramebufferTextureFaceARB)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); /* 577 */
+   void (GLAPIENTRYP ProgramParameteriARB)(GLuint program, GLenum pname, GLint value); /* 578 */
+   void (GLAPIENTRYP VertexAttribDivisorARB)(GLuint index, GLuint divisor); /* 579 */
+   void (GLAPIENTRYP FlushMappedBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length); /* 580 */
+   GLvoid * (GLAPIENTRYP MapBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); /* 581 */
+   void (GLAPIENTRYP TexBufferARB)(GLenum target, GLenum internalFormat, GLuint buffer); /* 582 */
+   void (GLAPIENTRYP BindVertexArray)(GLuint array); /* 583 */
+   void (GLAPIENTRYP GenVertexArrays)(GLsizei n, GLuint * arrays); /* 584 */
+   void (GLAPIENTRYP CopyBufferSubData)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); /* 585 */
+   GLenum (GLAPIENTRYP ClientWaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout); /* 586 */
+   void (GLAPIENTRYP DeleteSync)(GLsync sync); /* 587 */
+   GLsync (GLAPIENTRYP FenceSync)(GLenum condition, GLbitfield flags); /* 588 */
+   void (GLAPIENTRYP GetInteger64v)(GLenum pname, GLint64 * params); /* 589 */
+   void (GLAPIENTRYP GetSynciv)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); /* 590 */
+   GLboolean (GLAPIENTRYP IsSync)(GLsync sync); /* 591 */
+   void (GLAPIENTRYP WaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout); /* 592 */
+   void (GLAPIENTRYP DrawElementsBaseVertex)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex); /* 593 */
+   void (GLAPIENTRYP DrawRangeElementsBaseVertex)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex); /* 594 */
+   void (GLAPIENTRYP MultiDrawElementsBaseVertex)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount, const GLint * basevertex); /* 595 */
+   void (GLAPIENTRYP BlendEquationSeparateiARB)(GLuint buf, GLenum modeRGB, GLenum modeA); /* 596 */
+   void (GLAPIENTRYP BlendEquationiARB)(GLuint buf, GLenum mode); /* 597 */
+   void (GLAPIENTRYP BlendFuncSeparateiARB)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcA, GLenum dstA); /* 598 */
+   void (GLAPIENTRYP BlendFunciARB)(GLuint buf, GLenum src, GLenum dst); /* 599 */
+   void (GLAPIENTRYP BindSampler)(GLuint unit, GLuint sampler); /* 600 */
+   void (GLAPIENTRYP DeleteSamplers)(GLsizei count, const GLuint * samplers); /* 601 */
+   void (GLAPIENTRYP GenSamplers)(GLsizei count, GLuint * samplers); /* 602 */
+   void (GLAPIENTRYP GetSamplerParameterIiv)(GLuint sampler, GLenum pname, GLint * params); /* 603 */
+   void (GLAPIENTRYP GetSamplerParameterIuiv)(GLuint sampler, GLenum pname, GLuint * params); /* 604 */
+   void (GLAPIENTRYP GetSamplerParameterfv)(GLuint sampler, GLenum pname, GLfloat * params); /* 605 */
+   void (GLAPIENTRYP GetSamplerParameteriv)(GLuint sampler, GLenum pname, GLint * params); /* 606 */
+   GLboolean (GLAPIENTRYP IsSampler)(GLuint sampler); /* 607 */
+   void (GLAPIENTRYP SamplerParameterIiv)(GLuint sampler, GLenum pname, const GLint * params); /* 608 */
+   void (GLAPIENTRYP SamplerParameterIuiv)(GLuint sampler, GLenum pname, const GLuint * params); /* 609 */
+   void (GLAPIENTRYP SamplerParameterf)(GLuint sampler, GLenum pname, GLfloat param); /* 610 */
+   void (GLAPIENTRYP SamplerParameterfv)(GLuint sampler, GLenum pname, const GLfloat * params); /* 611 */
+   void (GLAPIENTRYP SamplerParameteri)(GLuint sampler, GLenum pname, GLint param); /* 612 */
+   void (GLAPIENTRYP SamplerParameteriv)(GLuint sampler, GLenum pname, const GLint * params); /* 613 */
+   void (GLAPIENTRYP BindTransformFeedback)(GLenum target, GLuint id); /* 614 */
+   void (GLAPIENTRYP DeleteTransformFeedbacks)(GLsizei n, const GLuint * ids); /* 615 */
+   void (GLAPIENTRYP DrawTransformFeedback)(GLenum mode, GLuint id); /* 616 */
+   void (GLAPIENTRYP GenTransformFeedbacks)(GLsizei n, GLuint * ids); /* 617 */
+   GLboolean (GLAPIENTRYP IsTransformFeedback)(GLuint id); /* 618 */
+   void (GLAPIENTRYP PauseTransformFeedback)(void); /* 619 */
+   void (GLAPIENTRYP ResumeTransformFeedback)(void); /* 620 */
+   void (GLAPIENTRYP ClearDepthf)(GLclampf depth); /* 621 */
+   void (GLAPIENTRYP DepthRangef)(GLclampf zNear, GLclampf zFar); /* 622 */
+   void (GLAPIENTRYP GetShaderPrecisionFormat)(GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision); /* 623 */
+   void (GLAPIENTRYP ReleaseShaderCompiler)(void); /* 624 */
+   void (GLAPIENTRYP ShaderBinary)(GLsizei n, const GLuint * shaders, GLenum binaryformat, const GLvoid * binary, GLsizei length); /* 625 */
+   void (GLAPIENTRYP PolygonOffsetEXT)(GLfloat factor, GLfloat bias); /* 626 */
+   void (GLAPIENTRYP GetPixelTexGenParameterfvSGIS)(GLenum pname, GLfloat * params); /* 627 */
+   void (GLAPIENTRYP GetPixelTexGenParameterivSGIS)(GLenum pname, GLint * params); /* 628 */
+   void (GLAPIENTRYP PixelTexGenParameterfSGIS)(GLenum pname, GLfloat param); /* 629 */
+   void (GLAPIENTRYP PixelTexGenParameterfvSGIS)(GLenum pname, const GLfloat * params); /* 630 */
+   void (GLAPIENTRYP PixelTexGenParameteriSGIS)(GLenum pname, GLint param); /* 631 */
+   void (GLAPIENTRYP PixelTexGenParameterivSGIS)(GLenum pname, const GLint * params); /* 632 */
+   void (GLAPIENTRYP SampleMaskSGIS)(GLclampf value, GLboolean invert); /* 633 */
+   void (GLAPIENTRYP SamplePatternSGIS)(GLenum pattern); /* 634 */
+   void (GLAPIENTRYP ColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 635 */
+   void (GLAPIENTRYP EdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean * pointer); /* 636 */
+   void (GLAPIENTRYP IndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 637 */
+   void (GLAPIENTRYP NormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 638 */
+   void (GLAPIENTRYP TexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 639 */
+   void (GLAPIENTRYP VertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 640 */
+   void (GLAPIENTRYP PointParameterfEXT)(GLenum pname, GLfloat param); /* 641 */
+   void (GLAPIENTRYP PointParameterfvEXT)(GLenum pname, const GLfloat * params); /* 642 */
+   void (GLAPIENTRYP LockArraysEXT)(GLint first, GLsizei count); /* 643 */
+   void (GLAPIENTRYP UnlockArraysEXT)(void); /* 644 */
+   void (GLAPIENTRYP SecondaryColor3bEXT)(GLbyte red, GLbyte green, GLbyte blue); /* 645 */
+   void (GLAPIENTRYP SecondaryColor3bvEXT)(const GLbyte * v); /* 646 */
+   void (GLAPIENTRYP SecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue); /* 647 */
+   void (GLAPIENTRYP SecondaryColor3dvEXT)(const GLdouble * v); /* 648 */
+   void (GLAPIENTRYP SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue); /* 649 */
+   void (GLAPIENTRYP SecondaryColor3fvEXT)(const GLfloat * v); /* 650 */
+   void (GLAPIENTRYP SecondaryColor3iEXT)(GLint red, GLint green, GLint blue); /* 651 */
+   void (GLAPIENTRYP SecondaryColor3ivEXT)(const GLint * v); /* 652 */
+   void (GLAPIENTRYP SecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue); /* 653 */
+   void (GLAPIENTRYP SecondaryColor3svEXT)(const GLshort * v); /* 654 */
+   void (GLAPIENTRYP SecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue); /* 655 */
+   void (GLAPIENTRYP SecondaryColor3ubvEXT)(const GLubyte * v); /* 656 */
+   void (GLAPIENTRYP SecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue); /* 657 */
+   void (GLAPIENTRYP SecondaryColor3uivEXT)(const GLuint * v); /* 658 */
+   void (GLAPIENTRYP SecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue); /* 659 */
+   void (GLAPIENTRYP SecondaryColor3usvEXT)(const GLushort * v); /* 660 */
+   void (GLAPIENTRYP SecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 661 */
+   void (GLAPIENTRYP MultiDrawArraysEXT)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); /* 662 */
+   void (GLAPIENTRYP MultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount); /* 663 */
+   void (GLAPIENTRYP FogCoordPointerEXT)(GLenum type, GLsizei stride, const GLvoid * pointer); /* 664 */
+   void (GLAPIENTRYP FogCoorddEXT)(GLdouble coord); /* 665 */
+   void (GLAPIENTRYP FogCoorddvEXT)(const GLdouble * coord); /* 666 */
+   void (GLAPIENTRYP FogCoordfEXT)(GLfloat coord); /* 667 */
+   void (GLAPIENTRYP FogCoordfvEXT)(const GLfloat * coord); /* 668 */
+   void (GLAPIENTRYP PixelTexGenSGIX)(GLenum mode); /* 669 */
+   void (GLAPIENTRYP BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); /* 670 */
+   void (GLAPIENTRYP FlushVertexArrayRangeNV)(void); /* 671 */
+   void (GLAPIENTRYP VertexArrayRangeNV)(GLsizei length, const GLvoid * pointer); /* 672 */
+   void (GLAPIENTRYP CombinerInputNV)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 673 */
+   void (GLAPIENTRYP CombinerOutputNV)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); /* 674 */
+   void (GLAPIENTRYP CombinerParameterfNV)(GLenum pname, GLfloat param); /* 675 */
+   void (GLAPIENTRYP CombinerParameterfvNV)(GLenum pname, const GLfloat * params); /* 676 */
+   void (GLAPIENTRYP CombinerParameteriNV)(GLenum pname, GLint param); /* 677 */
+   void (GLAPIENTRYP CombinerParameterivNV)(GLenum pname, const GLint * params); /* 678 */
+   void (GLAPIENTRYP FinalCombinerInputNV)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 679 */
+   void (GLAPIENTRYP GetCombinerInputParameterfvNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params); /* 680 */
+   void (GLAPIENTRYP GetCombinerInputParameterivNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params); /* 681 */
+   void (GLAPIENTRYP GetCombinerOutputParameterfvNV)(GLenum stage, GLenum portion, GLenum pname, GLfloat * params); /* 682 */
+   void (GLAPIENTRYP GetCombinerOutputParameterivNV)(GLenum stage, GLenum portion, GLenum pname, GLint * params); /* 683 */
+   void (GLAPIENTRYP GetFinalCombinerInputParameterfvNV)(GLenum variable, GLenum pname, GLfloat * params); /* 684 */
+   void (GLAPIENTRYP GetFinalCombinerInputParameterivNV)(GLenum variable, GLenum pname, GLint * params); /* 685 */
+   void (GLAPIENTRYP ResizeBuffersMESA)(void); /* 686 */
+   void (GLAPIENTRYP WindowPos2dMESA)(GLdouble x, GLdouble y); /* 687 */
+   void (GLAPIENTRYP WindowPos2dvMESA)(const GLdouble * v); /* 688 */
+   void (GLAPIENTRYP WindowPos2fMESA)(GLfloat x, GLfloat y); /* 689 */
+   void (GLAPIENTRYP WindowPos2fvMESA)(const GLfloat * v); /* 690 */
+   void (GLAPIENTRYP WindowPos2iMESA)(GLint x, GLint y); /* 691 */
+   void (GLAPIENTRYP WindowPos2ivMESA)(const GLint * v); /* 692 */
+   void (GLAPIENTRYP WindowPos2sMESA)(GLshort x, GLshort y); /* 693 */
+   void (GLAPIENTRYP WindowPos2svMESA)(const GLshort * v); /* 694 */
+   void (GLAPIENTRYP WindowPos3dMESA)(GLdouble x, GLdouble y, GLdouble z); /* 695 */
+   void (GLAPIENTRYP WindowPos3dvMESA)(const GLdouble * v); /* 696 */
+   void (GLAPIENTRYP WindowPos3fMESA)(GLfloat x, GLfloat y, GLfloat z); /* 697 */
+   void (GLAPIENTRYP WindowPos3fvMESA)(const GLfloat * v); /* 698 */
+   void (GLAPIENTRYP WindowPos3iMESA)(GLint x, GLint y, GLint z); /* 699 */
+   void (GLAPIENTRYP WindowPos3ivMESA)(const GLint * v); /* 700 */
+   void (GLAPIENTRYP WindowPos3sMESA)(GLshort x, GLshort y, GLshort z); /* 701 */
+   void (GLAPIENTRYP WindowPos3svMESA)(const GLshort * v); /* 702 */
+   void (GLAPIENTRYP WindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 703 */
+   void (GLAPIENTRYP WindowPos4dvMESA)(const GLdouble * v); /* 704 */
+   void (GLAPIENTRYP WindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 705 */
+   void (GLAPIENTRYP WindowPos4fvMESA)(const GLfloat * v); /* 706 */
+   void (GLAPIENTRYP WindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w); /* 707 */
+   void (GLAPIENTRYP WindowPos4ivMESA)(const GLint * v); /* 708 */
+   void (GLAPIENTRYP WindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w); /* 709 */
+   void (GLAPIENTRYP WindowPos4svMESA)(const GLshort * v); /* 710 */
+   void (GLAPIENTRYP MultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); /* 711 */
+   void (GLAPIENTRYP MultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride); /* 712 */
+   void (GLAPIENTRYP DeleteFencesNV)(GLsizei n, const GLuint * fences); /* 713 */
+   void (GLAPIENTRYP FinishFenceNV)(GLuint fence); /* 714 */
+   void (GLAPIENTRYP GenFencesNV)(GLsizei n, GLuint * fences); /* 715 */
+   void (GLAPIENTRYP GetFenceivNV)(GLuint fence, GLenum pname, GLint * params); /* 716 */
+   GLboolean (GLAPIENTRYP IsFenceNV)(GLuint fence); /* 717 */
+   void (GLAPIENTRYP SetFenceNV)(GLuint fence, GLenum condition); /* 718 */
+   GLboolean (GLAPIENTRYP TestFenceNV)(GLuint fence); /* 719 */
+   GLboolean (GLAPIENTRYP AreProgramsResidentNV)(GLsizei n, const GLuint * ids, GLboolean * residences); /* 720 */
+   void (GLAPIENTRYP BindProgramNV)(GLenum target, GLuint program); /* 721 */
+   void (GLAPIENTRYP DeleteProgramsNV)(GLsizei n, const GLuint * programs); /* 722 */
+   void (GLAPIENTRYP ExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params); /* 723 */
+   void (GLAPIENTRYP GenProgramsNV)(GLsizei n, GLuint * programs); /* 724 */
+   void (GLAPIENTRYP GetProgramParameterdvNV)(GLenum target, GLuint index, GLenum pname, GLdouble * params); /* 725 */
+   void (GLAPIENTRYP GetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * params); /* 726 */
+   void (GLAPIENTRYP GetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program); /* 727 */
+   void (GLAPIENTRYP GetProgramivNV)(GLuint id, GLenum pname, GLint * params); /* 728 */
+   void (GLAPIENTRYP GetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params); /* 729 */
+   void (GLAPIENTRYP GetVertexAttribPointervNV)(GLuint index, GLenum pname, GLvoid ** pointer); /* 730 */
+   void (GLAPIENTRYP GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params); /* 731 */
+   void (GLAPIENTRYP GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params); /* 732 */
+   void (GLAPIENTRYP GetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params); /* 733 */
+   GLboolean (GLAPIENTRYP IsProgramNV)(GLuint program); /* 734 */
+   void (GLAPIENTRYP LoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program); /* 735 */
+   void (GLAPIENTRYP ProgramParameters4dvNV)(GLenum target, GLuint index, GLsizei num, const GLdouble * params); /* 736 */
+   void (GLAPIENTRYP ProgramParameters4fvNV)(GLenum target, GLuint index, GLsizei num, const GLfloat * params); /* 737 */
+   void (GLAPIENTRYP RequestResidentProgramsNV)(GLsizei n, const GLuint * ids); /* 738 */
+   void (GLAPIENTRYP TrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform); /* 739 */
+   void (GLAPIENTRYP VertexAttrib1dNV)(GLuint index, GLdouble x); /* 740 */
+   void (GLAPIENTRYP VertexAttrib1dvNV)(GLuint index, const GLdouble * v); /* 741 */
+   void (GLAPIENTRYP VertexAttrib1fNV)(GLuint index, GLfloat x); /* 742 */
+   void (GLAPIENTRYP VertexAttrib1fvNV)(GLuint index, const GLfloat * v); /* 743 */
+   void (GLAPIENTRYP VertexAttrib1sNV)(GLuint index, GLshort x); /* 744 */
+   void (GLAPIENTRYP VertexAttrib1svNV)(GLuint index, const GLshort * v); /* 745 */
+   void (GLAPIENTRYP VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y); /* 746 */
+   void (GLAPIENTRYP VertexAttrib2dvNV)(GLuint index, const GLdouble * v); /* 747 */
+   void (GLAPIENTRYP VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y); /* 748 */
+   void (GLAPIENTRYP VertexAttrib2fvNV)(GLuint index, const GLfloat * v); /* 749 */
+   void (GLAPIENTRYP VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y); /* 750 */
+   void (GLAPIENTRYP VertexAttrib2svNV)(GLuint index, const GLshort * v); /* 751 */
+   void (GLAPIENTRYP VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z); /* 752 */
+   void (GLAPIENTRYP VertexAttrib3dvNV)(GLuint index, const GLdouble * v); /* 753 */
+   void (GLAPIENTRYP VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z); /* 754 */
+   void (GLAPIENTRYP VertexAttrib3fvNV)(GLuint index, const GLfloat * v); /* 755 */
+   void (GLAPIENTRYP VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z); /* 756 */
+   void (GLAPIENTRYP VertexAttrib3svNV)(GLuint index, const GLshort * v); /* 757 */
+   void (GLAPIENTRYP VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 758 */
+   void (GLAPIENTRYP VertexAttrib4dvNV)(GLuint index, const GLdouble * v); /* 759 */
+   void (GLAPIENTRYP VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 760 */
+   void (GLAPIENTRYP VertexAttrib4fvNV)(GLuint index, const GLfloat * v); /* 761 */
+   void (GLAPIENTRYP VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); /* 762 */
+   void (GLAPIENTRYP VertexAttrib4svNV)(GLuint index, const GLshort * v); /* 763 */
+   void (GLAPIENTRYP VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); /* 764 */
+   void (GLAPIENTRYP VertexAttrib4ubvNV)(GLuint index, const GLubyte * v); /* 765 */
+   void (GLAPIENTRYP VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 766 */
+   void (GLAPIENTRYP VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 767 */
+   void (GLAPIENTRYP VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 768 */
+   void (GLAPIENTRYP VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort * v); /* 769 */
+   void (GLAPIENTRYP VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 770 */
+   void (GLAPIENTRYP VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 771 */
+   void (GLAPIENTRYP VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort * v); /* 772 */
+   void (GLAPIENTRYP VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 773 */
+   void (GLAPIENTRYP VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 774 */
+   void (GLAPIENTRYP VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort * v); /* 775 */
+   void (GLAPIENTRYP VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 776 */
+   void (GLAPIENTRYP VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 777 */
+   void (GLAPIENTRYP VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v); /* 778 */
+   void (GLAPIENTRYP VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v); /* 779 */
+   void (GLAPIENTRYP GetTexBumpParameterfvATI)(GLenum pname, GLfloat * param); /* 780 */
+   void (GLAPIENTRYP GetTexBumpParameterivATI)(GLenum pname, GLint * param); /* 781 */
+   void (GLAPIENTRYP TexBumpParameterfvATI)(GLenum pname, const GLfloat * param); /* 782 */
+   void (GLAPIENTRYP TexBumpParameterivATI)(GLenum pname, const GLint * param); /* 783 */
+   void (GLAPIENTRYP AlphaFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 784 */
+   void (GLAPIENTRYP AlphaFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 785 */
+   void (GLAPIENTRYP AlphaFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 786 */
+   void (GLAPIENTRYP BeginFragmentShaderATI)(void); /* 787 */
+   void (GLAPIENTRYP BindFragmentShaderATI)(GLuint id); /* 788 */
+   void (GLAPIENTRYP ColorFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); /* 789 */
+   void (GLAPIENTRYP ColorFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); /* 790 */
+   void (GLAPIENTRYP ColorFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); /* 791 */
+   void (GLAPIENTRYP DeleteFragmentShaderATI)(GLuint id); /* 792 */
+   void (GLAPIENTRYP EndFragmentShaderATI)(void); /* 793 */
+   GLuint (GLAPIENTRYP GenFragmentShadersATI)(GLuint range); /* 794 */
+   void (GLAPIENTRYP PassTexCoordATI)(GLuint dst, GLuint coord, GLenum swizzle); /* 795 */
+   void (GLAPIENTRYP SampleMapATI)(GLuint dst, GLuint interp, GLenum swizzle); /* 796 */
+   void (GLAPIENTRYP SetFragmentShaderConstantATI)(GLuint dst, const GLfloat * value); /* 797 */
+   void (GLAPIENTRYP PointParameteriNV)(GLenum pname, GLint param); /* 798 */
+   void (GLAPIENTRYP PointParameterivNV)(GLenum pname, const GLint * params); /* 799 */
+   void (GLAPIENTRYP ActiveStencilFaceEXT)(GLenum face); /* 800 */
+   void (GLAPIENTRYP BindVertexArrayAPPLE)(GLuint array); /* 801 */
+   void (GLAPIENTRYP DeleteVertexArraysAPPLE)(GLsizei n, const GLuint * arrays); /* 802 */
+   void (GLAPIENTRYP GenVertexArraysAPPLE)(GLsizei n, GLuint * arrays); /* 803 */
+   GLboolean (GLAPIENTRYP IsVertexArrayAPPLE)(GLuint array); /* 804 */
+   void (GLAPIENTRYP GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); /* 805 */
+   void (GLAPIENTRYP GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); /* 806 */
+   void (GLAPIENTRYP ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 807 */
+   void (GLAPIENTRYP ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); /* 808 */
+   void (GLAPIENTRYP ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 809 */
+   void (GLAPIENTRYP ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); /* 810 */
+   void (GLAPIENTRYP PrimitiveRestartIndexNV)(GLuint index); /* 811 */
+   void (GLAPIENTRYP PrimitiveRestartNV)(void); /* 812 */
+   void (GLAPIENTRYP DepthBoundsEXT)(GLclampd zmin, GLclampd zmax); /* 813 */
+   void (GLAPIENTRYP BlendEquationSeparateEXT)(GLenum modeRGB, GLenum modeA); /* 814 */
+   void (GLAPIENTRYP BindFramebufferEXT)(GLenum target, GLuint framebuffer); /* 815 */
+   void (GLAPIENTRYP BindRenderbufferEXT)(GLenum target, GLuint renderbuffer); /* 816 */
+   GLenum (GLAPIENTRYP CheckFramebufferStatusEXT)(GLenum target); /* 817 */
+   void (GLAPIENTRYP DeleteFramebuffersEXT)(GLsizei n, const GLuint * framebuffers); /* 818 */
+   void (GLAPIENTRYP DeleteRenderbuffersEXT)(GLsizei n, const GLuint * renderbuffers); /* 819 */
+   void (GLAPIENTRYP FramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); /* 820 */
+   void (GLAPIENTRYP FramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); /* 821 */
+   void (GLAPIENTRYP FramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); /* 822 */
+   void (GLAPIENTRYP FramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); /* 823 */
+   void (GLAPIENTRYP GenFramebuffersEXT)(GLsizei n, GLuint * framebuffers); /* 824 */
+   void (GLAPIENTRYP GenRenderbuffersEXT)(GLsizei n, GLuint * renderbuffers); /* 825 */
+   void (GLAPIENTRYP GenerateMipmapEXT)(GLenum target); /* 826 */
+   void (GLAPIENTRYP GetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint * params); /* 827 */
+   void (GLAPIENTRYP GetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 828 */
+   GLboolean (GLAPIENTRYP IsFramebufferEXT)(GLuint framebuffer); /* 829 */
+   GLboolean (GLAPIENTRYP IsRenderbufferEXT)(GLuint renderbuffer); /* 830 */
+   void (GLAPIENTRYP RenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); /* 831 */
+   void (GLAPIENTRYP BlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); /* 832 */
+   void (GLAPIENTRYP BufferParameteriAPPLE)(GLenum target, GLenum pname, GLint param); /* 833 */
+   void (GLAPIENTRYP FlushMappedBufferRangeAPPLE)(GLenum target, GLintptr offset, GLsizeiptr size); /* 834 */
+   void (GLAPIENTRYP BindFragDataLocationEXT)(GLuint program, GLuint colorNumber, const GLchar * name); /* 835 */
+   GLint (GLAPIENTRYP GetFragDataLocationEXT)(GLuint program, const GLchar * name); /* 836 */
+   void (GLAPIENTRYP GetUniformuivEXT)(GLuint program, GLint location, GLuint * params); /* 837 */
+   void (GLAPIENTRYP GetVertexAttribIivEXT)(GLuint index, GLenum pname, GLint * params); /* 838 */
+   void (GLAPIENTRYP GetVertexAttribIuivEXT)(GLuint index, GLenum pname, GLuint * params); /* 839 */
+   void (GLAPIENTRYP Uniform1uiEXT)(GLint location, GLuint x); /* 840 */
+   void (GLAPIENTRYP Uniform1uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 841 */
+   void (GLAPIENTRYP Uniform2uiEXT)(GLint location, GLuint x, GLuint y); /* 842 */
+   void (GLAPIENTRYP Uniform2uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 843 */
+   void (GLAPIENTRYP Uniform3uiEXT)(GLint location, GLuint x, GLuint y, GLuint z); /* 844 */
+   void (GLAPIENTRYP Uniform3uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 845 */
+   void (GLAPIENTRYP Uniform4uiEXT)(GLint location, GLuint x, GLuint y, GLuint z, GLuint w); /* 846 */
+   void (GLAPIENTRYP Uniform4uivEXT)(GLint location, GLsizei count, const GLuint * value); /* 847 */
+   void (GLAPIENTRYP VertexAttribI1iEXT)(GLuint index, GLint x); /* 848 */
+   void (GLAPIENTRYP VertexAttribI1ivEXT)(GLuint index, const GLint * v); /* 849 */
+   void (GLAPIENTRYP VertexAttribI1uiEXT)(GLuint index, GLuint x); /* 850 */
+   void (GLAPIENTRYP VertexAttribI1uivEXT)(GLuint index, const GLuint * v); /* 851 */
+   void (GLAPIENTRYP VertexAttribI2iEXT)(GLuint index, GLint x, GLint y); /* 852 */
+   void (GLAPIENTRYP VertexAttribI2ivEXT)(GLuint index, const GLint * v); /* 853 */
+   void (GLAPIENTRYP VertexAttribI2uiEXT)(GLuint index, GLuint x, GLuint y); /* 854 */
+   void (GLAPIENTRYP VertexAttribI2uivEXT)(GLuint index, const GLuint * v); /* 855 */
+   void (GLAPIENTRYP VertexAttribI3iEXT)(GLuint index, GLint x, GLint y, GLint z); /* 856 */
+   void (GLAPIENTRYP VertexAttribI3ivEXT)(GLuint index, const GLint * v); /* 857 */
+   void (GLAPIENTRYP VertexAttribI3uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z); /* 858 */
+   void (GLAPIENTRYP VertexAttribI3uivEXT)(GLuint index, const GLuint * v); /* 859 */
+   void (GLAPIENTRYP VertexAttribI4bvEXT)(GLuint index, const GLbyte * v); /* 860 */
+   void (GLAPIENTRYP VertexAttribI4iEXT)(GLuint index, GLint x, GLint y, GLint z, GLint w); /* 861 */
+   void (GLAPIENTRYP VertexAttribI4ivEXT)(GLuint index, const GLint * v); /* 862 */
+   void (GLAPIENTRYP VertexAttribI4svEXT)(GLuint index, const GLshort * v); /* 863 */
+   void (GLAPIENTRYP VertexAttribI4ubvEXT)(GLuint index, const GLubyte * v); /* 864 */
+   void (GLAPIENTRYP VertexAttribI4uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); /* 865 */
+   void (GLAPIENTRYP VertexAttribI4uivEXT)(GLuint index, const GLuint * v); /* 866 */
+   void (GLAPIENTRYP VertexAttribI4usvEXT)(GLuint index, const GLushort * v); /* 867 */
+   void (GLAPIENTRYP VertexAttribIPointerEXT)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 868 */
+   void (GLAPIENTRYP FramebufferTextureLayerEXT)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); /* 869 */
+   void (GLAPIENTRYP ColorMaskIndexedEXT)(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a); /* 870 */
+   void (GLAPIENTRYP DisableIndexedEXT)(GLenum target, GLuint index); /* 871 */
+   void (GLAPIENTRYP EnableIndexedEXT)(GLenum target, GLuint index); /* 872 */
+   void (GLAPIENTRYP GetBooleanIndexedvEXT)(GLenum value, GLuint index, GLboolean * data); /* 873 */
+   void (GLAPIENTRYP GetIntegerIndexedvEXT)(GLenum value, GLuint index, GLint * data); /* 874 */
+   GLboolean (GLAPIENTRYP IsEnabledIndexedEXT)(GLenum target, GLuint index); /* 875 */
+   void (GLAPIENTRYP ClearColorIiEXT)(GLint r, GLint g, GLint b, GLint a); /* 876 */
+   void (GLAPIENTRYP ClearColorIuiEXT)(GLuint r, GLuint g, GLuint b, GLuint a); /* 877 */
+   void (GLAPIENTRYP GetTexParameterIivEXT)(GLenum target, GLenum pname, GLint * params); /* 878 */
+   void (GLAPIENTRYP GetTexParameterIuivEXT)(GLenum target, GLenum pname, GLuint * params); /* 879 */
+   void (GLAPIENTRYP TexParameterIivEXT)(GLenum target, GLenum pname, const GLint * params); /* 880 */
+   void (GLAPIENTRYP TexParameterIuivEXT)(GLenum target, GLenum pname, const GLuint * params); /* 881 */
+   void (GLAPIENTRYP BeginConditionalRenderNV)(GLuint query, GLenum mode); /* 882 */
+   void (GLAPIENTRYP EndConditionalRenderNV)(void); /* 883 */
+   void (GLAPIENTRYP BeginTransformFeedbackEXT)(GLenum mode); /* 884 */
+   void (GLAPIENTRYP BindBufferBaseEXT)(GLenum target, GLuint index, GLuint buffer); /* 885 */
+   void (GLAPIENTRYP BindBufferOffsetEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); /* 886 */
+   void (GLAPIENTRYP BindBufferRangeEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); /* 887 */
+   void (GLAPIENTRYP EndTransformFeedbackEXT)(void); /* 888 */
+   void (GLAPIENTRYP GetTransformFeedbackVaryingEXT)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); /* 889 */
+   void (GLAPIENTRYP TransformFeedbackVaryingsEXT)(GLuint program, GLsizei count, const char ** varyings, GLenum bufferMode); /* 890 */
+   void (GLAPIENTRYP ProvokingVertexEXT)(GLenum mode); /* 891 */
+   void (GLAPIENTRYP GetTexParameterPointervAPPLE)(GLenum target, GLenum pname, GLvoid ** params); /* 892 */
+   void (GLAPIENTRYP TextureRangeAPPLE)(GLenum target, GLsizei length, GLvoid * pointer); /* 893 */
+   void (GLAPIENTRYP GetObjectParameterivAPPLE)(GLenum objectType, GLuint name, GLenum pname, GLint * value); /* 894 */
+   GLenum (GLAPIENTRYP ObjectPurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); /* 895 */
+   GLenum (GLAPIENTRYP ObjectUnpurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); /* 896 */
+   void (GLAPIENTRYP ActiveProgramEXT)(GLuint program); /* 897 */
+   GLuint (GLAPIENTRYP CreateShaderProgramEXT)(GLenum type, const GLchar * string); /* 898 */
+   void (GLAPIENTRYP UseShaderProgramEXT)(GLenum type, GLuint program); /* 899 */
+   void (GLAPIENTRYP TextureBarrierNV)(void); /* 900 */
+   void (GLAPIENTRYP StencilFuncSeparateATI)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); /* 901 */
+   void (GLAPIENTRYP ProgramEnvParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 902 */
+   void (GLAPIENTRYP ProgramLocalParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); /* 903 */
+   void (GLAPIENTRYP GetQueryObjecti64vEXT)(GLuint id, GLenum pname, GLint64EXT * params); /* 904 */
+   void (GLAPIENTRYP GetQueryObjectui64vEXT)(GLuint id, GLenum pname, GLuint64EXT * params); /* 905 */
+   void (GLAPIENTRYP EGLImageTargetRenderbufferStorageOES)(GLenum target, GLvoid * writeOffset); /* 906 */
+   void (GLAPIENTRYP EGLImageTargetTexture2DOES)(GLenum target, GLvoid * writeOffset); /* 907 */
 };
 
 #endif /* !defined( _GLAPI_TABLE_H_ ) */
index 941532046e0cb0fa4d7d0110d965e2f84d5fea7b..0f49b334aa88a384a69b8fabc253f0e9f2f77aaa 100644 (file)
@@ -27,7 +27,7 @@
  */
 
 
-#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) && defined(__ELF__)
+#  if (defined(__GNUC__) && !defined(__CYGWIN__) && !defined(__MINGW32__)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) && defined(__ELF__))
 #    define HIDDEN  __attribute__((visibility("hidden")))
 #  else
 #    define HIDDEN
@@ -2637,7 +2637,7 @@ KEYWORD1 void KEYWORD2 NAME(ClampColor)(GLenum target, GLenum clamp)
    DISPATCH(ClampColor, (target, clamp), (F, "glClampColor(0x%x, 0x%x);\n", target, clamp));
 }
 
-KEYWORD1 void KEYWORD2 NAME(ClearBufferfi)(GLenum buffer, GLint drawbuffer, const GLfloat depth, const GLint stencil)
+KEYWORD1 void KEYWORD2 NAME(ClearBufferfi)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
 {
    DISPATCH(ClearBufferfi, (buffer, drawbuffer, depth, stencil), (F, "glClearBufferfi(0x%x, %d, %f, %d);\n", buffer, drawbuffer, depth, stencil));
 }
@@ -3897,6 +3897,11 @@ KEYWORD1 void KEYWORD2 NAME(DrawBuffersATI)(GLsizei n, const GLenum * bufs)
    DISPATCH(DrawBuffersARB, (n, bufs), (F, "glDrawBuffersATI(%d, %p);\n", n, (const void *) bufs));
 }
 
+KEYWORD1 void KEYWORD2 NAME(ClampColorARB)(GLenum target, GLenum clamp)
+{
+   DISPATCH(ClampColorARB, (target, clamp), (F, "glClampColorARB(0x%x, 0x%x);\n", target, clamp));
+}
+
 KEYWORD1 void KEYWORD2 NAME(DrawArraysInstancedARB)(GLenum mode, GLint first, GLsizei count, GLsizei primcount)
 {
    DISPATCH(DrawArraysInstancedARB, (mode, first, count, primcount), (F, "glDrawArraysInstancedARB(0x%x, %d, %d, %d);\n", mode, first, count, primcount));
@@ -3967,6 +3972,11 @@ KEYWORD1 GLvoid * KEYWORD2 NAME(MapBufferRange)(GLenum target, GLintptr offset,
    RETURN_DISPATCH(MapBufferRange, (target, offset, length, access), (F, "glMapBufferRange(0x%x, %d, %d, %d);\n", target, offset, length, access));
 }
 
+KEYWORD1 void KEYWORD2 NAME(TexBufferARB)(GLenum target, GLenum internalFormat, GLuint buffer)
+{
+   DISPATCH(TexBufferARB, (target, internalFormat, buffer), (F, "glTexBufferARB(0x%x, 0x%x, %d);\n", target, internalFormat, buffer));
+}
+
 KEYWORD1 void KEYWORD2 NAME(BindVertexArray)(GLuint array)
 {
    DISPATCH(BindVertexArray, (array), (F, "glBindVertexArray(%d);\n", array));
@@ -4052,6 +4062,76 @@ KEYWORD1 void KEYWORD2 NAME(BlendFunciARB)(GLuint buf, GLenum src, GLenum dst)
    DISPATCH(BlendFunciARB, (buf, src, dst), (F, "glBlendFunciARB(%d, 0x%x, 0x%x);\n", buf, src, dst));
 }
 
+KEYWORD1 void KEYWORD2 NAME(BindSampler)(GLuint unit, GLuint sampler)
+{
+   DISPATCH(BindSampler, (unit, sampler), (F, "glBindSampler(%d, %d);\n", unit, sampler));
+}
+
+KEYWORD1 void KEYWORD2 NAME(DeleteSamplers)(GLsizei count, const GLuint * samplers)
+{
+   DISPATCH(DeleteSamplers, (count, samplers), (F, "glDeleteSamplers(%d, %p);\n", count, (const void *) samplers));
+}
+
+KEYWORD1 void KEYWORD2 NAME(GenSamplers)(GLsizei count, GLuint * samplers)
+{
+   DISPATCH(GenSamplers, (count, samplers), (F, "glGenSamplers(%d, %p);\n", count, (const void *) samplers));
+}
+
+KEYWORD1 void KEYWORD2 NAME(GetSamplerParameterIiv)(GLuint sampler, GLenum pname, GLint * params)
+{
+   DISPATCH(GetSamplerParameterIiv, (sampler, pname, params), (F, "glGetSamplerParameterIiv(%d, 0x%x, %p);\n", sampler, pname, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(GetSamplerParameterIuiv)(GLuint sampler, GLenum pname, GLuint * params)
+{
+   DISPATCH(GetSamplerParameterIuiv, (sampler, pname, params), (F, "glGetSamplerParameterIuiv(%d, 0x%x, %p);\n", sampler, pname, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(GetSamplerParameterfv)(GLuint sampler, GLenum pname, GLfloat * params)
+{
+   DISPATCH(GetSamplerParameterfv, (sampler, pname, params), (F, "glGetSamplerParameterfv(%d, 0x%x, %p);\n", sampler, pname, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(GetSamplerParameteriv)(GLuint sampler, GLenum pname, GLint * params)
+{
+   DISPATCH(GetSamplerParameteriv, (sampler, pname, params), (F, "glGetSamplerParameteriv(%d, 0x%x, %p);\n", sampler, pname, (const void *) params));
+}
+
+KEYWORD1 GLboolean KEYWORD2 NAME(IsSampler)(GLuint sampler)
+{
+   RETURN_DISPATCH(IsSampler, (sampler), (F, "glIsSampler(%d);\n", sampler));
+}
+
+KEYWORD1 void KEYWORD2 NAME(SamplerParameterIiv)(GLuint sampler, GLenum pname, const GLint * params)
+{
+   DISPATCH(SamplerParameterIiv, (sampler, pname, params), (F, "glSamplerParameterIiv(%d, 0x%x, %p);\n", sampler, pname, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(SamplerParameterIuiv)(GLuint sampler, GLenum pname, const GLuint * params)
+{
+   DISPATCH(SamplerParameterIuiv, (sampler, pname, params), (F, "glSamplerParameterIuiv(%d, 0x%x, %p);\n", sampler, pname, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(SamplerParameterf)(GLuint sampler, GLenum pname, GLfloat param)
+{
+   DISPATCH(SamplerParameterf, (sampler, pname, param), (F, "glSamplerParameterf(%d, 0x%x, %f);\n", sampler, pname, param));
+}
+
+KEYWORD1 void KEYWORD2 NAME(SamplerParameterfv)(GLuint sampler, GLenum pname, const GLfloat * params)
+{
+   DISPATCH(SamplerParameterfv, (sampler, pname, params), (F, "glSamplerParameterfv(%d, 0x%x, %p);\n", sampler, pname, (const void *) params));
+}
+
+KEYWORD1 void KEYWORD2 NAME(SamplerParameteri)(GLuint sampler, GLenum pname, GLint param)
+{
+   DISPATCH(SamplerParameteri, (sampler, pname, param), (F, "glSamplerParameteri(%d, 0x%x, %d);\n", sampler, pname, param));
+}
+
+KEYWORD1 void KEYWORD2 NAME(SamplerParameteriv)(GLuint sampler, GLenum pname, const GLint * params)
+{
+   DISPATCH(SamplerParameteriv, (sampler, pname, params), (F, "glSamplerParameteriv(%d, 0x%x, %p);\n", sampler, pname, (const void *) params));
+}
+
 KEYWORD1 void KEYWORD2 NAME(BindTransformFeedback)(GLenum target, GLuint id)
 {
    DISPATCH(BindTransformFeedback, (target, id), (F, "glBindTransformFeedback(0x%x, %d);\n", target, id));
@@ -4117,58 +4197,58 @@ KEYWORD1 void KEYWORD2 NAME(PolygonOffsetEXT)(GLfloat factor, GLfloat bias)
    DISPATCH(PolygonOffsetEXT, (factor, bias), (F, "glPolygonOffsetEXT(%f, %f);\n", factor, bias));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_611)(GLenum pname, GLfloat * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_627)(GLenum pname, GLfloat * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_611)(GLenum pname, GLfloat * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_627)(GLenum pname, GLfloat * params)
 {
    DISPATCH(GetPixelTexGenParameterfvSGIS, (pname, params), (F, "glGetPixelTexGenParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_612)(GLenum pname, GLint * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_628)(GLenum pname, GLint * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_612)(GLenum pname, GLint * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_628)(GLenum pname, GLint * params)
 {
    DISPATCH(GetPixelTexGenParameterivSGIS, (pname, params), (F, "glGetPixelTexGenParameterivSGIS(0x%x, %p);\n", pname, (const void *) params));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_613)(GLenum pname, GLfloat param);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_629)(GLenum pname, GLfloat param);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_613)(GLenum pname, GLfloat param)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_629)(GLenum pname, GLfloat param)
 {
    DISPATCH(PixelTexGenParameterfSGIS, (pname, param), (F, "glPixelTexGenParameterfSGIS(0x%x, %f);\n", pname, param));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_614)(GLenum pname, const GLfloat * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_630)(GLenum pname, const GLfloat * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_614)(GLenum pname, const GLfloat * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_630)(GLenum pname, const GLfloat * params)
 {
    DISPATCH(PixelTexGenParameterfvSGIS, (pname, params), (F, "glPixelTexGenParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_615)(GLenum pname, GLint param);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_631)(GLenum pname, GLint param);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_615)(GLenum pname, GLint param)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_631)(GLenum pname, GLint param)
 {
    DISPATCH(PixelTexGenParameteriSGIS, (pname, param), (F, "glPixelTexGenParameteriSGIS(0x%x, %d);\n", pname, param));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_616)(GLenum pname, const GLint * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_632)(GLenum pname, const GLint * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_616)(GLenum pname, const GLint * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_632)(GLenum pname, const GLint * params)
 {
    DISPATCH(PixelTexGenParameterivSGIS, (pname, params), (F, "glPixelTexGenParameterivSGIS(0x%x, %p);\n", pname, (const void *) params));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_617)(GLclampf value, GLboolean invert);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_633)(GLclampf value, GLboolean invert);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_617)(GLclampf value, GLboolean invert)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_633)(GLclampf value, GLboolean invert)
 {
    DISPATCH(SampleMaskSGIS, (value, invert), (F, "glSampleMaskSGIS(%f, %d);\n", value, invert));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_618)(GLenum pattern);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_634)(GLenum pattern);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_618)(GLenum pattern)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_634)(GLenum pattern)
 {
    DISPATCH(SamplePatternSGIS, (pattern), (F, "glSamplePatternSGIS(0x%x);\n", pattern));
 }
@@ -4218,9 +4298,9 @@ KEYWORD1 void KEYWORD2 NAME(PointParameterfEXT)(GLenum pname, GLfloat param)
    DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfEXT(0x%x, %f);\n", pname, param));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_625)(GLenum pname, GLfloat param);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_641)(GLenum pname, GLfloat param);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_625)(GLenum pname, GLfloat param)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_641)(GLenum pname, GLfloat param)
 {
    DISPATCH(PointParameterfEXT, (pname, param), (F, "glPointParameterfSGIS(0x%x, %f);\n", pname, param));
 }
@@ -4240,9 +4320,9 @@ KEYWORD1 void KEYWORD2 NAME(PointParameterfvEXT)(GLenum pname, const GLfloat * p
    DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvEXT(0x%x, %p);\n", pname, (const void *) params));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_626)(GLenum pname, const GLfloat * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_642)(GLenum pname, const GLfloat * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_626)(GLenum pname, const GLfloat * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_642)(GLenum pname, const GLfloat * params)
 {
    DISPATCH(PointParameterfvEXT, (pname, params), (F, "glPointParameterfvSGIS(0x%x, %p);\n", pname, (const void *) params));
 }
@@ -4497,9 +4577,9 @@ KEYWORD1 void KEYWORD2 NAME(FogCoordfvEXT)(const GLfloat * coord)
    DISPATCH(FogCoordfvEXT, (coord), (F, "glFogCoordfvEXT(%p);\n", (const void *) coord));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_653)(GLenum mode);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_669)(GLenum mode);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_653)(GLenum mode)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_669)(GLenum mode)
 {
    DISPATCH(PixelTexGenSGIX, (mode), (F, "glPixelTexGenSGIX(0x%x);\n", mode));
 }
@@ -4514,9 +4594,9 @@ KEYWORD1 void KEYWORD2 NAME(BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfac
    DISPATCH(BlendFuncSeparateEXT, (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha), (F, "glBlendFuncSeparateEXT(0x%x, 0x%x, 0x%x, 0x%x);\n", sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_654)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_670)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_654)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_670)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
 {
    DISPATCH(BlendFuncSeparateEXT, (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha), (F, "glBlendFuncSeparateINGR(0x%x, 0x%x, 0x%x, 0x%x);\n", sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha));
 }
@@ -4881,65 +4961,65 @@ KEYWORD1 void KEYWORD2 NAME(WindowPos4svMESA)(const GLshort * v)
    DISPATCH(WindowPos4svMESA, (v), (F, "glWindowPos4svMESA(%p);\n", (const void *) v));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_695)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_711)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_695)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_711)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride)
 {
    DISPATCH(MultiModeDrawArraysIBM, (mode, first, count, primcount, modestride), (F, "glMultiModeDrawArraysIBM(%p, %p, %p, %d, %d);\n", (const void *) mode, (const void *) first, (const void *) count, primcount, modestride));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_696)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_712)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_696)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_712)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride)
 {
    DISPATCH(MultiModeDrawElementsIBM, (mode, count, type, indices, primcount, modestride), (F, "glMultiModeDrawElementsIBM(%p, %p, 0x%x, %p, %d, %d);\n", (const void *) mode, (const void *) count, type, (const void *) indices, primcount, modestride));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_697)(GLsizei n, const GLuint * fences);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_713)(GLsizei n, const GLuint * fences);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_697)(GLsizei n, const GLuint * fences)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_713)(GLsizei n, const GLuint * fences)
 {
    DISPATCH(DeleteFencesNV, (n, fences), (F, "glDeleteFencesNV(%d, %p);\n", n, (const void *) fences));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_698)(GLuint fence);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_714)(GLuint fence);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_698)(GLuint fence)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_714)(GLuint fence)
 {
    DISPATCH(FinishFenceNV, (fence), (F, "glFinishFenceNV(%d);\n", fence));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_699)(GLsizei n, GLuint * fences);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_715)(GLsizei n, GLuint * fences);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_699)(GLsizei n, GLuint * fences)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_715)(GLsizei n, GLuint * fences)
 {
    DISPATCH(GenFencesNV, (n, fences), (F, "glGenFencesNV(%d, %p);\n", n, (const void *) fences));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_700)(GLuint fence, GLenum pname, GLint * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_716)(GLuint fence, GLenum pname, GLint * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_700)(GLuint fence, GLenum pname, GLint * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_716)(GLuint fence, GLenum pname, GLint * params)
 {
    DISPATCH(GetFenceivNV, (fence, pname, params), (F, "glGetFenceivNV(%d, 0x%x, %p);\n", fence, pname, (const void *) params));
 }
 
-KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_701)(GLuint fence);
+KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_717)(GLuint fence);
 
-KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_701)(GLuint fence)
+KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_717)(GLuint fence)
 {
    RETURN_DISPATCH(IsFenceNV, (fence), (F, "glIsFenceNV(%d);\n", fence));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_702)(GLuint fence, GLenum condition);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_718)(GLuint fence, GLenum condition);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_702)(GLuint fence, GLenum condition)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_718)(GLuint fence, GLenum condition)
 {
    DISPATCH(SetFenceNV, (fence, condition), (F, "glSetFenceNV(%d, 0x%x);\n", fence, condition));
 }
 
-KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_703)(GLuint fence);
+KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_719)(GLuint fence);
 
-KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_703)(GLuint fence)
+KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_719)(GLuint fence)
 {
    RETURN_DISPATCH(TestFenceNV, (fence), (F, "glTestFenceNV(%d);\n", fence));
 }
@@ -5384,16 +5464,16 @@ KEYWORD1 void KEYWORD2 NAME(PointParameterivNV)(GLenum pname, const GLint * para
    DISPATCH(PointParameterivNV, (pname, params), (F, "glPointParameterivNV(0x%x, %p);\n", pname, (const void *) params));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_784)(GLenum face);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_800)(GLenum face);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_784)(GLenum face)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_800)(GLenum face)
 {
    DISPATCH(ActiveStencilFaceEXT, (face), (F, "glActiveStencilFaceEXT(0x%x);\n", face));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_785)(GLuint array);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_801)(GLuint array);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_785)(GLuint array)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_801)(GLuint array)
 {
    DISPATCH(BindVertexArrayAPPLE, (array), (F, "glBindVertexArrayAPPLE(%d);\n", array));
 }
@@ -5403,16 +5483,16 @@ KEYWORD1 void KEYWORD2 NAME(DeleteVertexArrays)(GLsizei n, const GLuint * arrays
    DISPATCH(DeleteVertexArraysAPPLE, (n, arrays), (F, "glDeleteVertexArrays(%d, %p);\n", n, (const void *) arrays));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_786)(GLsizei n, const GLuint * arrays);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_802)(GLsizei n, const GLuint * arrays);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_786)(GLsizei n, const GLuint * arrays)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_802)(GLsizei n, const GLuint * arrays)
 {
    DISPATCH(DeleteVertexArraysAPPLE, (n, arrays), (F, "glDeleteVertexArraysAPPLE(%d, %p);\n", n, (const void *) arrays));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_787)(GLsizei n, GLuint * arrays);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_803)(GLsizei n, GLuint * arrays);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_787)(GLsizei n, GLuint * arrays)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_803)(GLsizei n, GLuint * arrays)
 {
    DISPATCH(GenVertexArraysAPPLE, (n, arrays), (F, "glGenVertexArraysAPPLE(%d, %p);\n", n, (const void *) arrays));
 }
@@ -5422,9 +5502,9 @@ KEYWORD1 GLboolean KEYWORD2 NAME(IsVertexArray)(GLuint array)
    RETURN_DISPATCH(IsVertexArrayAPPLE, (array), (F, "glIsVertexArray(%d);\n", array));
 }
 
-KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_788)(GLuint array);
+KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_804)(GLuint array);
 
-KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_788)(GLuint array)
+KEYWORD1_ALT GLboolean KEYWORD2 NAME(_dispatch_stub_804)(GLuint array)
 {
    RETURN_DISPATCH(IsVertexArrayAPPLE, (array), (F, "glIsVertexArrayAPPLE(%d);\n", array));
 }
@@ -5474,9 +5554,9 @@ KEYWORD1 void KEYWORD2 NAME(PrimitiveRestartNV)(void)
    DISPATCH(PrimitiveRestartNV, (), (F, "glPrimitiveRestartNV();\n"));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_797)(GLclampd zmin, GLclampd zmax);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_813)(GLclampd zmin, GLclampd zmax);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_797)(GLclampd zmin, GLclampd zmax)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_813)(GLclampd zmin, GLclampd zmax)
 {
    DISPATCH(DepthBoundsEXT, (zmin, zmax), (F, "glDepthBoundsEXT(%f, %f);\n", zmin, zmax));
 }
@@ -5486,9 +5566,9 @@ KEYWORD1 void KEYWORD2 NAME(BlendEquationSeparate)(GLenum modeRGB, GLenum modeA)
    DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparate(0x%x, 0x%x);\n", modeRGB, modeA));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_798)(GLenum modeRGB, GLenum modeA);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_814)(GLenum modeRGB, GLenum modeA);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_798)(GLenum modeRGB, GLenum modeA)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_814)(GLenum modeRGB, GLenum modeA)
 {
    DISPATCH(BlendEquationSeparateEXT, (modeRGB, modeA), (F, "glBlendEquationSeparateEXT(0x%x, 0x%x);\n", modeRGB, modeA));
 }
@@ -5668,23 +5748,23 @@ KEYWORD1 void KEYWORD2 NAME(BlitFramebuffer)(GLint srcX0, GLint srcY0, GLint src
    DISPATCH(BlitFramebufferEXT, (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter), (F, "glBlitFramebuffer(%d, %d, %d, %d, %d, %d, %d, %d, %d, 0x%x);\n", srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_816)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_832)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_816)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_832)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
 {
    DISPATCH(BlitFramebufferEXT, (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter), (F, "glBlitFramebufferEXT(%d, %d, %d, %d, %d, %d, %d, %d, %d, 0x%x);\n", srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_817)(GLenum target, GLenum pname, GLint param);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_833)(GLenum target, GLenum pname, GLint param);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_817)(GLenum target, GLenum pname, GLint param)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_833)(GLenum target, GLenum pname, GLint param)
 {
    DISPATCH(BufferParameteriAPPLE, (target, pname, param), (F, "glBufferParameteriAPPLE(0x%x, 0x%x, %d);\n", target, pname, param));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_818)(GLenum target, GLintptr offset, GLsizeiptr size);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_834)(GLenum target, GLintptr offset, GLsizeiptr size);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_818)(GLenum target, GLintptr offset, GLsizeiptr size)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_834)(GLenum target, GLintptr offset, GLsizeiptr size)
 {
    DISPATCH(FlushMappedBufferRangeAPPLE, (target, offset, size), (F, "glFlushMappedBufferRangeAPPLE(0x%x, %d, %d);\n", target, offset, size));
 }
@@ -6244,16 +6324,16 @@ KEYWORD1 void KEYWORD2 NAME(ProvokingVertex)(GLenum mode)
    DISPATCH(ProvokingVertexEXT, (mode), (F, "glProvokingVertex(0x%x);\n", mode));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_876)(GLenum target, GLenum pname, GLvoid ** params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_892)(GLenum target, GLenum pname, GLvoid ** params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_876)(GLenum target, GLenum pname, GLvoid ** params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_892)(GLenum target, GLenum pname, GLvoid ** params)
 {
    DISPATCH(GetTexParameterPointervAPPLE, (target, pname, params), (F, "glGetTexParameterPointervAPPLE(0x%x, 0x%x, %p);\n", target, pname, (const void *) params));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_877)(GLenum target, GLsizei length, GLvoid * pointer);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_893)(GLenum target, GLsizei length, GLvoid * pointer);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_877)(GLenum target, GLsizei length, GLvoid * pointer)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_893)(GLenum target, GLsizei length, GLvoid * pointer)
 {
    DISPATCH(TextureRangeAPPLE, (target, length, pointer), (F, "glTextureRangeAPPLE(0x%x, %d, %p);\n", target, length, (const void *) pointer));
 }
@@ -6293,37 +6373,37 @@ KEYWORD1 void KEYWORD2 NAME(TextureBarrierNV)(void)
    DISPATCH(TextureBarrierNV, (), (F, "glTextureBarrierNV();\n"));
 }
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_885)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_901)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_885)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_901)(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_886)(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_902)(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_886)(GLenum target, GLuint index, GLsizei count, const GLfloat * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_902)(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_887)(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_903)(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_887)(GLenum target, GLuint index, GLsizei count, const GLfloat * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_903)(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_888)(GLuint id, GLenum pname, GLint64EXT * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_904)(GLuint id, GLenum pname, GLint64EXT * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_888)(GLuint id, GLenum pname, GLint64EXT * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_904)(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_889)(GLuint id, GLenum pname, GLuint64EXT * params);
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_905)(GLuint id, GLenum pname, GLuint64EXT * params);
 
-KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_889)(GLuint id, GLenum pname, GLuint64EXT * params)
+KEYWORD1_ALT void KEYWORD2 NAME(_dispatch_stub_905)(GLuint id, GLenum pname, GLuint64EXT * params)
 {
    DISPATCH(GetQueryObjectui64vEXT, (id, pname, params), (F, "glGetQueryObjectui64vEXT(%d, 0x%x, %p);\n", id, pname, (const void *) params));
 }
@@ -7063,6 +7143,7 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(GetActiveAttribARB),
    TABLE_ENTRY(GetAttribLocationARB),
    TABLE_ENTRY(DrawBuffersARB),
+   TABLE_ENTRY(ClampColorARB),
    TABLE_ENTRY(DrawArraysInstancedARB),
    TABLE_ENTRY(DrawElementsInstancedARB),
    TABLE_ENTRY(RenderbufferStorageMultisample),
@@ -7072,6 +7153,7 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(VertexAttribDivisorARB),
    TABLE_ENTRY(FlushMappedBufferRange),
    TABLE_ENTRY(MapBufferRange),
+   TABLE_ENTRY(TexBufferARB),
    TABLE_ENTRY(BindVertexArray),
    TABLE_ENTRY(GenVertexArrays),
    TABLE_ENTRY(CopyBufferSubData),
@@ -7089,6 +7171,20 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(BlendEquationiARB),
    TABLE_ENTRY(BlendFuncSeparateiARB),
    TABLE_ENTRY(BlendFunciARB),
+   TABLE_ENTRY(BindSampler),
+   TABLE_ENTRY(DeleteSamplers),
+   TABLE_ENTRY(GenSamplers),
+   TABLE_ENTRY(GetSamplerParameterIiv),
+   TABLE_ENTRY(GetSamplerParameterIuiv),
+   TABLE_ENTRY(GetSamplerParameterfv),
+   TABLE_ENTRY(GetSamplerParameteriv),
+   TABLE_ENTRY(IsSampler),
+   TABLE_ENTRY(SamplerParameterIiv),
+   TABLE_ENTRY(SamplerParameterIuiv),
+   TABLE_ENTRY(SamplerParameterf),
+   TABLE_ENTRY(SamplerParameterfv),
+   TABLE_ENTRY(SamplerParameteri),
+   TABLE_ENTRY(SamplerParameteriv),
    TABLE_ENTRY(BindTransformFeedback),
    TABLE_ENTRY(DeleteTransformFeedbacks),
    TABLE_ENTRY(DrawTransformFeedback),
@@ -7102,14 +7198,14 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(ReleaseShaderCompiler),
    TABLE_ENTRY(ShaderBinary),
    TABLE_ENTRY(PolygonOffsetEXT),
-   TABLE_ENTRY(_dispatch_stub_611),
-   TABLE_ENTRY(_dispatch_stub_612),
-   TABLE_ENTRY(_dispatch_stub_613),
-   TABLE_ENTRY(_dispatch_stub_614),
-   TABLE_ENTRY(_dispatch_stub_615),
-   TABLE_ENTRY(_dispatch_stub_616),
-   TABLE_ENTRY(_dispatch_stub_617),
-   TABLE_ENTRY(_dispatch_stub_618),
+   TABLE_ENTRY(_dispatch_stub_627),
+   TABLE_ENTRY(_dispatch_stub_628),
+   TABLE_ENTRY(_dispatch_stub_629),
+   TABLE_ENTRY(_dispatch_stub_630),
+   TABLE_ENTRY(_dispatch_stub_631),
+   TABLE_ENTRY(_dispatch_stub_632),
+   TABLE_ENTRY(_dispatch_stub_633),
+   TABLE_ENTRY(_dispatch_stub_634),
    TABLE_ENTRY(ColorPointerEXT),
    TABLE_ENTRY(EdgeFlagPointerEXT),
    TABLE_ENTRY(IndexPointerEXT),
@@ -7144,7 +7240,7 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(FogCoorddvEXT),
    TABLE_ENTRY(FogCoordfEXT),
    TABLE_ENTRY(FogCoordfvEXT),
-   TABLE_ENTRY(_dispatch_stub_653),
+   TABLE_ENTRY(_dispatch_stub_669),
    TABLE_ENTRY(BlendFuncSeparateEXT),
    TABLE_ENTRY(FlushVertexArrayRangeNV),
    TABLE_ENTRY(VertexArrayRangeNV),
@@ -7186,15 +7282,15 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(WindowPos4ivMESA),
    TABLE_ENTRY(WindowPos4sMESA),
    TABLE_ENTRY(WindowPos4svMESA),
-   TABLE_ENTRY(_dispatch_stub_695),
-   TABLE_ENTRY(_dispatch_stub_696),
-   TABLE_ENTRY(_dispatch_stub_697),
-   TABLE_ENTRY(_dispatch_stub_698),
-   TABLE_ENTRY(_dispatch_stub_699),
-   TABLE_ENTRY(_dispatch_stub_700),
-   TABLE_ENTRY(_dispatch_stub_701),
-   TABLE_ENTRY(_dispatch_stub_702),
-   TABLE_ENTRY(_dispatch_stub_703),
+   TABLE_ENTRY(_dispatch_stub_711),
+   TABLE_ENTRY(_dispatch_stub_712),
+   TABLE_ENTRY(_dispatch_stub_713),
+   TABLE_ENTRY(_dispatch_stub_714),
+   TABLE_ENTRY(_dispatch_stub_715),
+   TABLE_ENTRY(_dispatch_stub_716),
+   TABLE_ENTRY(_dispatch_stub_717),
+   TABLE_ENTRY(_dispatch_stub_718),
+   TABLE_ENTRY(_dispatch_stub_719),
    TABLE_ENTRY(AreProgramsResidentNV),
    TABLE_ENTRY(BindProgramNV),
    TABLE_ENTRY(DeleteProgramsNV),
@@ -7275,11 +7371,11 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(SetFragmentShaderConstantATI),
    TABLE_ENTRY(PointParameteriNV),
    TABLE_ENTRY(PointParameterivNV),
-   TABLE_ENTRY(_dispatch_stub_784),
-   TABLE_ENTRY(_dispatch_stub_785),
-   TABLE_ENTRY(_dispatch_stub_786),
-   TABLE_ENTRY(_dispatch_stub_787),
-   TABLE_ENTRY(_dispatch_stub_788),
+   TABLE_ENTRY(_dispatch_stub_800),
+   TABLE_ENTRY(_dispatch_stub_801),
+   TABLE_ENTRY(_dispatch_stub_802),
+   TABLE_ENTRY(_dispatch_stub_803),
+   TABLE_ENTRY(_dispatch_stub_804),
    TABLE_ENTRY(GetProgramNamedParameterdvNV),
    TABLE_ENTRY(GetProgramNamedParameterfvNV),
    TABLE_ENTRY(ProgramNamedParameter4dNV),
@@ -7288,8 +7384,8 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(ProgramNamedParameter4fvNV),
    TABLE_ENTRY(PrimitiveRestartIndexNV),
    TABLE_ENTRY(PrimitiveRestartNV),
-   TABLE_ENTRY(_dispatch_stub_797),
-   TABLE_ENTRY(_dispatch_stub_798),
+   TABLE_ENTRY(_dispatch_stub_813),
+   TABLE_ENTRY(_dispatch_stub_814),
    TABLE_ENTRY(BindFramebufferEXT),
    TABLE_ENTRY(BindRenderbufferEXT),
    TABLE_ENTRY(CheckFramebufferStatusEXT),
@@ -7307,9 +7403,9 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(IsFramebufferEXT),
    TABLE_ENTRY(IsRenderbufferEXT),
    TABLE_ENTRY(RenderbufferStorageEXT),
-   TABLE_ENTRY(_dispatch_stub_816),
-   TABLE_ENTRY(_dispatch_stub_817),
-   TABLE_ENTRY(_dispatch_stub_818),
+   TABLE_ENTRY(_dispatch_stub_832),
+   TABLE_ENTRY(_dispatch_stub_833),
+   TABLE_ENTRY(_dispatch_stub_834),
    TABLE_ENTRY(BindFragDataLocationEXT),
    TABLE_ENTRY(GetFragDataLocationEXT),
    TABLE_ENTRY(GetUniformuivEXT),
@@ -7367,8 +7463,8 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(GetTransformFeedbackVaryingEXT),
    TABLE_ENTRY(TransformFeedbackVaryingsEXT),
    TABLE_ENTRY(ProvokingVertexEXT),
-   TABLE_ENTRY(_dispatch_stub_876),
-   TABLE_ENTRY(_dispatch_stub_877),
+   TABLE_ENTRY(_dispatch_stub_892),
+   TABLE_ENTRY(_dispatch_stub_893),
    TABLE_ENTRY(GetObjectParameterivAPPLE),
    TABLE_ENTRY(ObjectPurgeableAPPLE),
    TABLE_ENTRY(ObjectUnpurgeableAPPLE),
@@ -7376,11 +7472,11 @@ _glapi_proc DISPATCH_TABLE_NAME[] = {
    TABLE_ENTRY(CreateShaderProgramEXT),
    TABLE_ENTRY(UseShaderProgramEXT),
    TABLE_ENTRY(TextureBarrierNV),
-   TABLE_ENTRY(_dispatch_stub_885),
-   TABLE_ENTRY(_dispatch_stub_886),
-   TABLE_ENTRY(_dispatch_stub_887),
-   TABLE_ENTRY(_dispatch_stub_888),
-   TABLE_ENTRY(_dispatch_stub_889),
+   TABLE_ENTRY(_dispatch_stub_901),
+   TABLE_ENTRY(_dispatch_stub_902),
+   TABLE_ENTRY(_dispatch_stub_903),
+   TABLE_ENTRY(_dispatch_stub_904),
+   TABLE_ENTRY(_dispatch_stub_905),
    TABLE_ENTRY(EGLImageTargetRenderbufferStorageOES),
    TABLE_ENTRY(EGLImageTargetTexture2DOES),
    /* A whole bunch of no-op functions.  These might be called
@@ -7687,10 +7783,10 @@ _glapi_proc UNUSED_TABLE_NAME[] = {
    TABLE_ENTRY(RenderbufferStorageMultisampleEXT),
    TABLE_ENTRY(PointParameterf),
    TABLE_ENTRY(PointParameterfARB),
-   TABLE_ENTRY(_dispatch_stub_625),
+   TABLE_ENTRY(_dispatch_stub_641),
    TABLE_ENTRY(PointParameterfv),
    TABLE_ENTRY(PointParameterfvARB),
-   TABLE_ENTRY(_dispatch_stub_626),
+   TABLE_ENTRY(_dispatch_stub_642),
    TABLE_ENTRY(SecondaryColor3b),
    TABLE_ENTRY(SecondaryColor3bv),
    TABLE_ENTRY(SecondaryColor3d),
@@ -7716,7 +7812,7 @@ _glapi_proc UNUSED_TABLE_NAME[] = {
    TABLE_ENTRY(FogCoordf),
    TABLE_ENTRY(FogCoordfv),
    TABLE_ENTRY(BlendFuncSeparate),
-   TABLE_ENTRY(_dispatch_stub_654),
+   TABLE_ENTRY(_dispatch_stub_670),
    TABLE_ENTRY(WindowPos2d),
    TABLE_ENTRY(WindowPos2dARB),
    TABLE_ENTRY(WindowPos2dv),
index b66ae381218612867ae7a5a9f567ee4a51ff163c..b11bca21cc5fc09d2a7b913cb70aba09980258f7 100644 (file)
@@ -624,6 +624,7 @@ static const char gl_string_table[] =
     "glGetActiveAttribARB\0"
     "glGetAttribLocationARB\0"
     "glDrawBuffersARB\0"
+    "glClampColorARB\0"
     "glDrawArraysInstancedARB\0"
     "glDrawElementsInstancedARB\0"
     "glRenderbufferStorageMultisample\0"
@@ -633,6 +634,7 @@ static const char gl_string_table[] =
     "glVertexAttribDivisorARB\0"
     "glFlushMappedBufferRange\0"
     "glMapBufferRange\0"
+    "glTexBufferARB\0"
     "glBindVertexArray\0"
     "glGenVertexArrays\0"
     "glCopyBufferSubData\0"
@@ -650,6 +652,20 @@ static const char gl_string_table[] =
     "glBlendEquationiARB\0"
     "glBlendFuncSeparateiARB\0"
     "glBlendFunciARB\0"
+    "glBindSampler\0"
+    "glDeleteSamplers\0"
+    "glGenSamplers\0"
+    "glGetSamplerParameterIiv\0"
+    "glGetSamplerParameterIuiv\0"
+    "glGetSamplerParameterfv\0"
+    "glGetSamplerParameteriv\0"
+    "glIsSampler\0"
+    "glSamplerParameterIiv\0"
+    "glSamplerParameterIuiv\0"
+    "glSamplerParameterf\0"
+    "glSamplerParameterfv\0"
+    "glSamplerParameteri\0"
+    "glSamplerParameteriv\0"
     "glBindTransformFeedback\0"
     "glDeleteTransformFeedbacks\0"
     "glDrawTransformFeedback\0"
@@ -1320,41 +1336,41 @@ static const char gl_string_table[] =
 #define gl_dispatch_stub_364 mgl_dispatch_stub_364
 #define gl_dispatch_stub_365 mgl_dispatch_stub_365
 #define gl_dispatch_stub_366 mgl_dispatch_stub_366
-#define gl_dispatch_stub_611 mgl_dispatch_stub_611
-#define gl_dispatch_stub_612 mgl_dispatch_stub_612
-#define gl_dispatch_stub_613 mgl_dispatch_stub_613
-#define gl_dispatch_stub_614 mgl_dispatch_stub_614
-#define gl_dispatch_stub_615 mgl_dispatch_stub_615
-#define gl_dispatch_stub_616 mgl_dispatch_stub_616
-#define gl_dispatch_stub_617 mgl_dispatch_stub_617
-#define gl_dispatch_stub_618 mgl_dispatch_stub_618
-#define gl_dispatch_stub_653 mgl_dispatch_stub_653
-#define gl_dispatch_stub_695 mgl_dispatch_stub_695
-#define gl_dispatch_stub_696 mgl_dispatch_stub_696
-#define gl_dispatch_stub_697 mgl_dispatch_stub_697
-#define gl_dispatch_stub_698 mgl_dispatch_stub_698
-#define gl_dispatch_stub_699 mgl_dispatch_stub_699
-#define gl_dispatch_stub_700 mgl_dispatch_stub_700
-#define gl_dispatch_stub_701 mgl_dispatch_stub_701
-#define gl_dispatch_stub_702 mgl_dispatch_stub_702
-#define gl_dispatch_stub_703 mgl_dispatch_stub_703
-#define gl_dispatch_stub_784 mgl_dispatch_stub_784
-#define gl_dispatch_stub_785 mgl_dispatch_stub_785
-#define gl_dispatch_stub_786 mgl_dispatch_stub_786
-#define gl_dispatch_stub_787 mgl_dispatch_stub_787
-#define gl_dispatch_stub_788 mgl_dispatch_stub_788
-#define gl_dispatch_stub_797 mgl_dispatch_stub_797
-#define gl_dispatch_stub_798 mgl_dispatch_stub_798
-#define gl_dispatch_stub_816 mgl_dispatch_stub_816
-#define gl_dispatch_stub_817 mgl_dispatch_stub_817
-#define gl_dispatch_stub_818 mgl_dispatch_stub_818
-#define gl_dispatch_stub_876 mgl_dispatch_stub_876
-#define gl_dispatch_stub_877 mgl_dispatch_stub_877
-#define gl_dispatch_stub_885 mgl_dispatch_stub_885
-#define gl_dispatch_stub_886 mgl_dispatch_stub_886
-#define gl_dispatch_stub_887 mgl_dispatch_stub_887
-#define gl_dispatch_stub_888 mgl_dispatch_stub_888
-#define gl_dispatch_stub_889 mgl_dispatch_stub_889
+#define gl_dispatch_stub_627 mgl_dispatch_stub_627
+#define gl_dispatch_stub_628 mgl_dispatch_stub_628
+#define gl_dispatch_stub_629 mgl_dispatch_stub_629
+#define gl_dispatch_stub_630 mgl_dispatch_stub_630
+#define gl_dispatch_stub_631 mgl_dispatch_stub_631
+#define gl_dispatch_stub_632 mgl_dispatch_stub_632
+#define gl_dispatch_stub_633 mgl_dispatch_stub_633
+#define gl_dispatch_stub_634 mgl_dispatch_stub_634
+#define gl_dispatch_stub_669 mgl_dispatch_stub_669
+#define gl_dispatch_stub_711 mgl_dispatch_stub_711
+#define gl_dispatch_stub_712 mgl_dispatch_stub_712
+#define gl_dispatch_stub_713 mgl_dispatch_stub_713
+#define gl_dispatch_stub_714 mgl_dispatch_stub_714
+#define gl_dispatch_stub_715 mgl_dispatch_stub_715
+#define gl_dispatch_stub_716 mgl_dispatch_stub_716
+#define gl_dispatch_stub_717 mgl_dispatch_stub_717
+#define gl_dispatch_stub_718 mgl_dispatch_stub_718
+#define gl_dispatch_stub_719 mgl_dispatch_stub_719
+#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_813 mgl_dispatch_stub_813
+#define gl_dispatch_stub_814 mgl_dispatch_stub_814
+#define gl_dispatch_stub_832 mgl_dispatch_stub_832
+#define gl_dispatch_stub_833 mgl_dispatch_stub_833
+#define gl_dispatch_stub_834 mgl_dispatch_stub_834
+#define gl_dispatch_stub_892 mgl_dispatch_stub_892
+#define gl_dispatch_stub_893 mgl_dispatch_stub_893
+#define gl_dispatch_stub_901 mgl_dispatch_stub_901
+#define gl_dispatch_stub_902 mgl_dispatch_stub_902
+#define gl_dispatch_stub_903 mgl_dispatch_stub_903
+#define gl_dispatch_stub_904 mgl_dispatch_stub_904
+#define gl_dispatch_stub_905 mgl_dispatch_stub_905
 #endif /* USE_MGL_NAMESPACE */
 
 
@@ -1372,41 +1388,41 @@ void GLAPIENTRY gl_dispatch_stub_363(GLenum target, GLenum pname, GLint * params
 void GLAPIENTRY gl_dispatch_stub_364(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values);
 void GLAPIENTRY gl_dispatch_stub_365(GLenum target, GLenum pname, GLfloat * params);
 void GLAPIENTRY gl_dispatch_stub_366(GLenum target, GLenum pname, GLint * params);
-void GLAPIENTRY gl_dispatch_stub_611(GLenum pname, GLfloat * params);
-void GLAPIENTRY gl_dispatch_stub_612(GLenum pname, GLint * params);
-void GLAPIENTRY gl_dispatch_stub_613(GLenum pname, GLfloat param);
-void GLAPIENTRY gl_dispatch_stub_614(GLenum pname, const GLfloat * params);
-void GLAPIENTRY gl_dispatch_stub_615(GLenum pname, GLint param);
-void GLAPIENTRY gl_dispatch_stub_616(GLenum pname, const GLint * params);
-void GLAPIENTRY gl_dispatch_stub_617(GLclampf value, GLboolean invert);
-void GLAPIENTRY gl_dispatch_stub_618(GLenum pattern);
-void GLAPIENTRY gl_dispatch_stub_653(GLenum mode);
-void GLAPIENTRY gl_dispatch_stub_695(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride);
-void GLAPIENTRY gl_dispatch_stub_696(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride);
-void GLAPIENTRY gl_dispatch_stub_697(GLsizei n, const GLuint * fences);
-void GLAPIENTRY gl_dispatch_stub_698(GLuint fence);
-void GLAPIENTRY gl_dispatch_stub_699(GLsizei n, GLuint * fences);
-void GLAPIENTRY gl_dispatch_stub_700(GLuint fence, GLenum pname, GLint * params);
-GLboolean GLAPIENTRY gl_dispatch_stub_701(GLuint fence);
-void GLAPIENTRY gl_dispatch_stub_702(GLuint fence, GLenum condition);
-GLboolean GLAPIENTRY gl_dispatch_stub_703(GLuint fence);
-void GLAPIENTRY gl_dispatch_stub_784(GLenum face);
-void GLAPIENTRY gl_dispatch_stub_785(GLuint array);
-void GLAPIENTRY gl_dispatch_stub_786(GLsizei n, const GLuint * arrays);
-void GLAPIENTRY gl_dispatch_stub_787(GLsizei n, GLuint * arrays);
-GLboolean GLAPIENTRY gl_dispatch_stub_788(GLuint array);
-void GLAPIENTRY gl_dispatch_stub_797(GLclampd zmin, GLclampd zmax);
-void GLAPIENTRY gl_dispatch_stub_798(GLenum modeRGB, GLenum modeA);
-void GLAPIENTRY gl_dispatch_stub_816(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
-void GLAPIENTRY gl_dispatch_stub_817(GLenum target, GLenum pname, GLint param);
-void GLAPIENTRY gl_dispatch_stub_818(GLenum target, GLintptr offset, GLsizeiptr size);
-void GLAPIENTRY gl_dispatch_stub_876(GLenum target, GLenum pname, GLvoid ** params);
-void GLAPIENTRY gl_dispatch_stub_877(GLenum target, GLsizei length, GLvoid * pointer);
-void GLAPIENTRY gl_dispatch_stub_885(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
-void GLAPIENTRY gl_dispatch_stub_886(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
-void GLAPIENTRY gl_dispatch_stub_887(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
-void GLAPIENTRY gl_dispatch_stub_888(GLuint id, GLenum pname, GLint64EXT * params);
-void GLAPIENTRY gl_dispatch_stub_889(GLuint id, GLenum pname, GLuint64EXT * params);
+void GLAPIENTRY gl_dispatch_stub_627(GLenum pname, GLfloat * params);
+void GLAPIENTRY gl_dispatch_stub_628(GLenum pname, GLint * params);
+void GLAPIENTRY gl_dispatch_stub_629(GLenum pname, GLfloat param);
+void GLAPIENTRY gl_dispatch_stub_630(GLenum pname, const GLfloat * params);
+void GLAPIENTRY gl_dispatch_stub_631(GLenum pname, GLint param);
+void GLAPIENTRY gl_dispatch_stub_632(GLenum pname, const GLint * params);
+void GLAPIENTRY gl_dispatch_stub_633(GLclampf value, GLboolean invert);
+void GLAPIENTRY gl_dispatch_stub_634(GLenum pattern);
+void GLAPIENTRY gl_dispatch_stub_669(GLenum mode);
+void GLAPIENTRY gl_dispatch_stub_711(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride);
+void GLAPIENTRY gl_dispatch_stub_712(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride);
+void GLAPIENTRY gl_dispatch_stub_713(GLsizei n, const GLuint * fences);
+void GLAPIENTRY gl_dispatch_stub_714(GLuint fence);
+void GLAPIENTRY gl_dispatch_stub_715(GLsizei n, GLuint * fences);
+void GLAPIENTRY gl_dispatch_stub_716(GLuint fence, GLenum pname, GLint * params);
+GLboolean GLAPIENTRY gl_dispatch_stub_717(GLuint fence);
+void GLAPIENTRY gl_dispatch_stub_718(GLuint fence, GLenum condition);
+GLboolean GLAPIENTRY gl_dispatch_stub_719(GLuint fence);
+void GLAPIENTRY gl_dispatch_stub_800(GLenum face);
+void GLAPIENTRY gl_dispatch_stub_801(GLuint array);
+void GLAPIENTRY gl_dispatch_stub_802(GLsizei n, const GLuint * arrays);
+void GLAPIENTRY gl_dispatch_stub_803(GLsizei n, GLuint * arrays);
+GLboolean GLAPIENTRY gl_dispatch_stub_804(GLuint array);
+void GLAPIENTRY gl_dispatch_stub_813(GLclampd zmin, GLclampd zmax);
+void GLAPIENTRY gl_dispatch_stub_814(GLenum modeRGB, GLenum modeA);
+void GLAPIENTRY gl_dispatch_stub_832(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+void GLAPIENTRY gl_dispatch_stub_833(GLenum target, GLenum pname, GLint param);
+void GLAPIENTRY gl_dispatch_stub_834(GLenum target, GLintptr offset, GLsizeiptr size);
+void GLAPIENTRY gl_dispatch_stub_892(GLenum target, GLenum pname, GLvoid ** params);
+void GLAPIENTRY gl_dispatch_stub_893(GLenum target, GLsizei length, GLvoid * pointer);
+void GLAPIENTRY gl_dispatch_stub_901(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+void GLAPIENTRY gl_dispatch_stub_902(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
+void GLAPIENTRY gl_dispatch_stub_903(GLenum target, GLuint index, GLsizei count, const GLfloat * params);
+void GLAPIENTRY gl_dispatch_stub_904(GLuint id, GLenum pname, GLint64EXT * params);
+void GLAPIENTRY gl_dispatch_stub_905(GLuint id, GLenum pname, GLuint64EXT * params);
 #endif /* defined(NEED_FUNCTION_POINTER) || defined(GLX_INDIRECT_RENDERING) */
 
 static const glprocs_table_t static_functions[] = {
@@ -1982,685 +1998,701 @@ static const glprocs_table_t static_functions[] = {
     NAME_FUNC_OFFSET( 9079, glGetActiveAttribARB, glGetActiveAttribARB, NULL, 569),
     NAME_FUNC_OFFSET( 9100, glGetAttribLocationARB, glGetAttribLocationARB, NULL, 570),
     NAME_FUNC_OFFSET( 9123, glDrawBuffersARB, glDrawBuffersARB, NULL, 571),
-    NAME_FUNC_OFFSET( 9140, glDrawArraysInstancedARB, glDrawArraysInstancedARB, NULL, 572),
-    NAME_FUNC_OFFSET( 9165, glDrawElementsInstancedARB, glDrawElementsInstancedARB, NULL, 573),
-    NAME_FUNC_OFFSET( 9192, glRenderbufferStorageMultisample, glRenderbufferStorageMultisample, NULL, 574),
-    NAME_FUNC_OFFSET( 9225, glFramebufferTextureARB, glFramebufferTextureARB, NULL, 575),
-    NAME_FUNC_OFFSET( 9249, glFramebufferTextureFaceARB, glFramebufferTextureFaceARB, NULL, 576),
-    NAME_FUNC_OFFSET( 9277, glProgramParameteriARB, glProgramParameteriARB, NULL, 577),
-    NAME_FUNC_OFFSET( 9300, glVertexAttribDivisorARB, glVertexAttribDivisorARB, NULL, 578),
-    NAME_FUNC_OFFSET( 9325, glFlushMappedBufferRange, glFlushMappedBufferRange, NULL, 579),
-    NAME_FUNC_OFFSET( 9350, glMapBufferRange, glMapBufferRange, NULL, 580),
-    NAME_FUNC_OFFSET( 9367, glBindVertexArray, glBindVertexArray, NULL, 581),
-    NAME_FUNC_OFFSET( 9385, glGenVertexArrays, glGenVertexArrays, NULL, 582),
-    NAME_FUNC_OFFSET( 9403, glCopyBufferSubData, glCopyBufferSubData, NULL, 583),
-    NAME_FUNC_OFFSET( 9423, glClientWaitSync, glClientWaitSync, NULL, 584),
-    NAME_FUNC_OFFSET( 9440, glDeleteSync, glDeleteSync, NULL, 585),
-    NAME_FUNC_OFFSET( 9453, glFenceSync, glFenceSync, NULL, 586),
-    NAME_FUNC_OFFSET( 9465, glGetInteger64v, glGetInteger64v, NULL, 587),
-    NAME_FUNC_OFFSET( 9481, glGetSynciv, glGetSynciv, NULL, 588),
-    NAME_FUNC_OFFSET( 9493, glIsSync, glIsSync, NULL, 589),
-    NAME_FUNC_OFFSET( 9502, glWaitSync, glWaitSync, NULL, 590),
-    NAME_FUNC_OFFSET( 9513, glDrawElementsBaseVertex, glDrawElementsBaseVertex, NULL, 591),
-    NAME_FUNC_OFFSET( 9538, glDrawRangeElementsBaseVertex, glDrawRangeElementsBaseVertex, NULL, 592),
-    NAME_FUNC_OFFSET( 9568, glMultiDrawElementsBaseVertex, glMultiDrawElementsBaseVertex, NULL, 593),
-    NAME_FUNC_OFFSET( 9598, glBlendEquationSeparateiARB, glBlendEquationSeparateiARB, NULL, 594),
-    NAME_FUNC_OFFSET( 9626, glBlendEquationiARB, glBlendEquationiARB, NULL, 595),
-    NAME_FUNC_OFFSET( 9646, glBlendFuncSeparateiARB, glBlendFuncSeparateiARB, NULL, 596),
-    NAME_FUNC_OFFSET( 9670, glBlendFunciARB, glBlendFunciARB, NULL, 597),
-    NAME_FUNC_OFFSET( 9686, glBindTransformFeedback, glBindTransformFeedback, NULL, 598),
-    NAME_FUNC_OFFSET( 9710, glDeleteTransformFeedbacks, glDeleteTransformFeedbacks, NULL, 599),
-    NAME_FUNC_OFFSET( 9737, glDrawTransformFeedback, glDrawTransformFeedback, NULL, 600),
-    NAME_FUNC_OFFSET( 9761, glGenTransformFeedbacks, glGenTransformFeedbacks, NULL, 601),
-    NAME_FUNC_OFFSET( 9785, glIsTransformFeedback, glIsTransformFeedback, NULL, 602),
-    NAME_FUNC_OFFSET( 9807, glPauseTransformFeedback, glPauseTransformFeedback, NULL, 603),
-    NAME_FUNC_OFFSET( 9832, glResumeTransformFeedback, glResumeTransformFeedback, NULL, 604),
-    NAME_FUNC_OFFSET( 9858, glClearDepthf, glClearDepthf, NULL, 605),
-    NAME_FUNC_OFFSET( 9872, glDepthRangef, glDepthRangef, NULL, 606),
-    NAME_FUNC_OFFSET( 9886, glGetShaderPrecisionFormat, glGetShaderPrecisionFormat, NULL, 607),
-    NAME_FUNC_OFFSET( 9913, glReleaseShaderCompiler, glReleaseShaderCompiler, NULL, 608),
-    NAME_FUNC_OFFSET( 9937, glShaderBinary, glShaderBinary, NULL, 609),
-    NAME_FUNC_OFFSET( 9952, glPolygonOffsetEXT, glPolygonOffsetEXT, NULL, 610),
-    NAME_FUNC_OFFSET( 9971, gl_dispatch_stub_611, gl_dispatch_stub_611, NULL, 611),
-    NAME_FUNC_OFFSET(10003, gl_dispatch_stub_612, gl_dispatch_stub_612, NULL, 612),
-    NAME_FUNC_OFFSET(10035, gl_dispatch_stub_613, gl_dispatch_stub_613, NULL, 613),
-    NAME_FUNC_OFFSET(10063, gl_dispatch_stub_614, gl_dispatch_stub_614, NULL, 614),
-    NAME_FUNC_OFFSET(10092, gl_dispatch_stub_615, gl_dispatch_stub_615, NULL, 615),
-    NAME_FUNC_OFFSET(10120, gl_dispatch_stub_616, gl_dispatch_stub_616, NULL, 616),
-    NAME_FUNC_OFFSET(10149, gl_dispatch_stub_617, gl_dispatch_stub_617, NULL, 617),
-    NAME_FUNC_OFFSET(10166, gl_dispatch_stub_618, gl_dispatch_stub_618, NULL, 618),
-    NAME_FUNC_OFFSET(10186, glColorPointerEXT, glColorPointerEXT, NULL, 619),
-    NAME_FUNC_OFFSET(10204, glEdgeFlagPointerEXT, glEdgeFlagPointerEXT, NULL, 620),
-    NAME_FUNC_OFFSET(10225, glIndexPointerEXT, glIndexPointerEXT, NULL, 621),
-    NAME_FUNC_OFFSET(10243, glNormalPointerEXT, glNormalPointerEXT, NULL, 622),
-    NAME_FUNC_OFFSET(10262, glTexCoordPointerEXT, glTexCoordPointerEXT, NULL, 623),
-    NAME_FUNC_OFFSET(10283, glVertexPointerEXT, glVertexPointerEXT, NULL, 624),
-    NAME_FUNC_OFFSET(10302, glPointParameterfEXT, glPointParameterfEXT, NULL, 625),
-    NAME_FUNC_OFFSET(10323, glPointParameterfvEXT, glPointParameterfvEXT, NULL, 626),
-    NAME_FUNC_OFFSET(10345, glLockArraysEXT, glLockArraysEXT, NULL, 627),
-    NAME_FUNC_OFFSET(10361, glUnlockArraysEXT, glUnlockArraysEXT, NULL, 628),
-    NAME_FUNC_OFFSET(10379, glSecondaryColor3bEXT, glSecondaryColor3bEXT, NULL, 629),
-    NAME_FUNC_OFFSET(10401, glSecondaryColor3bvEXT, glSecondaryColor3bvEXT, NULL, 630),
-    NAME_FUNC_OFFSET(10424, glSecondaryColor3dEXT, glSecondaryColor3dEXT, NULL, 631),
-    NAME_FUNC_OFFSET(10446, glSecondaryColor3dvEXT, glSecondaryColor3dvEXT, NULL, 632),
-    NAME_FUNC_OFFSET(10469, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, 633),
-    NAME_FUNC_OFFSET(10491, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, 634),
-    NAME_FUNC_OFFSET(10514, glSecondaryColor3iEXT, glSecondaryColor3iEXT, NULL, 635),
-    NAME_FUNC_OFFSET(10536, glSecondaryColor3ivEXT, glSecondaryColor3ivEXT, NULL, 636),
-    NAME_FUNC_OFFSET(10559, glSecondaryColor3sEXT, glSecondaryColor3sEXT, NULL, 637),
-    NAME_FUNC_OFFSET(10581, glSecondaryColor3svEXT, glSecondaryColor3svEXT, NULL, 638),
-    NAME_FUNC_OFFSET(10604, glSecondaryColor3ubEXT, glSecondaryColor3ubEXT, NULL, 639),
-    NAME_FUNC_OFFSET(10627, glSecondaryColor3ubvEXT, glSecondaryColor3ubvEXT, NULL, 640),
-    NAME_FUNC_OFFSET(10651, glSecondaryColor3uiEXT, glSecondaryColor3uiEXT, NULL, 641),
-    NAME_FUNC_OFFSET(10674, glSecondaryColor3uivEXT, glSecondaryColor3uivEXT, NULL, 642),
-    NAME_FUNC_OFFSET(10698, glSecondaryColor3usEXT, glSecondaryColor3usEXT, NULL, 643),
-    NAME_FUNC_OFFSET(10721, glSecondaryColor3usvEXT, glSecondaryColor3usvEXT, NULL, 644),
-    NAME_FUNC_OFFSET(10745, glSecondaryColorPointerEXT, glSecondaryColorPointerEXT, NULL, 645),
-    NAME_FUNC_OFFSET(10772, glMultiDrawArraysEXT, glMultiDrawArraysEXT, NULL, 646),
-    NAME_FUNC_OFFSET(10793, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, 647),
-    NAME_FUNC_OFFSET(10816, glFogCoordPointerEXT, glFogCoordPointerEXT, NULL, 648),
-    NAME_FUNC_OFFSET(10837, glFogCoorddEXT, glFogCoorddEXT, NULL, 649),
-    NAME_FUNC_OFFSET(10852, glFogCoorddvEXT, glFogCoorddvEXT, NULL, 650),
-    NAME_FUNC_OFFSET(10868, glFogCoordfEXT, glFogCoordfEXT, NULL, 651),
-    NAME_FUNC_OFFSET(10883, glFogCoordfvEXT, glFogCoordfvEXT, NULL, 652),
-    NAME_FUNC_OFFSET(10899, gl_dispatch_stub_653, gl_dispatch_stub_653, NULL, 653),
-    NAME_FUNC_OFFSET(10917, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, 654),
-    NAME_FUNC_OFFSET(10940, glFlushVertexArrayRangeNV, glFlushVertexArrayRangeNV, NULL, 655),
-    NAME_FUNC_OFFSET(10966, glVertexArrayRangeNV, glVertexArrayRangeNV, NULL, 656),
-    NAME_FUNC_OFFSET(10987, glCombinerInputNV, glCombinerInputNV, NULL, 657),
-    NAME_FUNC_OFFSET(11005, glCombinerOutputNV, glCombinerOutputNV, NULL, 658),
-    NAME_FUNC_OFFSET(11024, glCombinerParameterfNV, glCombinerParameterfNV, NULL, 659),
-    NAME_FUNC_OFFSET(11047, glCombinerParameterfvNV, glCombinerParameterfvNV, NULL, 660),
-    NAME_FUNC_OFFSET(11071, glCombinerParameteriNV, glCombinerParameteriNV, NULL, 661),
-    NAME_FUNC_OFFSET(11094, glCombinerParameterivNV, glCombinerParameterivNV, NULL, 662),
-    NAME_FUNC_OFFSET(11118, glFinalCombinerInputNV, glFinalCombinerInputNV, NULL, 663),
-    NAME_FUNC_OFFSET(11141, glGetCombinerInputParameterfvNV, glGetCombinerInputParameterfvNV, NULL, 664),
-    NAME_FUNC_OFFSET(11173, glGetCombinerInputParameterivNV, glGetCombinerInputParameterivNV, NULL, 665),
-    NAME_FUNC_OFFSET(11205, glGetCombinerOutputParameterfvNV, glGetCombinerOutputParameterfvNV, NULL, 666),
-    NAME_FUNC_OFFSET(11238, glGetCombinerOutputParameterivNV, glGetCombinerOutputParameterivNV, NULL, 667),
-    NAME_FUNC_OFFSET(11271, glGetFinalCombinerInputParameterfvNV, glGetFinalCombinerInputParameterfvNV, NULL, 668),
-    NAME_FUNC_OFFSET(11308, glGetFinalCombinerInputParameterivNV, glGetFinalCombinerInputParameterivNV, NULL, 669),
-    NAME_FUNC_OFFSET(11345, glResizeBuffersMESA, glResizeBuffersMESA, NULL, 670),
-    NAME_FUNC_OFFSET(11365, glWindowPos2dMESA, glWindowPos2dMESA, NULL, 671),
-    NAME_FUNC_OFFSET(11383, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, 672),
-    NAME_FUNC_OFFSET(11402, glWindowPos2fMESA, glWindowPos2fMESA, NULL, 673),
-    NAME_FUNC_OFFSET(11420, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, 674),
-    NAME_FUNC_OFFSET(11439, glWindowPos2iMESA, glWindowPos2iMESA, NULL, 675),
-    NAME_FUNC_OFFSET(11457, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, 676),
-    NAME_FUNC_OFFSET(11476, glWindowPos2sMESA, glWindowPos2sMESA, NULL, 677),
-    NAME_FUNC_OFFSET(11494, glWindowPos2svMESA, glWindowPos2svMESA, NULL, 678),
-    NAME_FUNC_OFFSET(11513, glWindowPos3dMESA, glWindowPos3dMESA, NULL, 679),
-    NAME_FUNC_OFFSET(11531, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, 680),
-    NAME_FUNC_OFFSET(11550, glWindowPos3fMESA, glWindowPos3fMESA, NULL, 681),
-    NAME_FUNC_OFFSET(11568, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, 682),
-    NAME_FUNC_OFFSET(11587, glWindowPos3iMESA, glWindowPos3iMESA, NULL, 683),
-    NAME_FUNC_OFFSET(11605, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, 684),
-    NAME_FUNC_OFFSET(11624, glWindowPos3sMESA, glWindowPos3sMESA, NULL, 685),
-    NAME_FUNC_OFFSET(11642, glWindowPos3svMESA, glWindowPos3svMESA, NULL, 686),
-    NAME_FUNC_OFFSET(11661, glWindowPos4dMESA, glWindowPos4dMESA, NULL, 687),
-    NAME_FUNC_OFFSET(11679, glWindowPos4dvMESA, glWindowPos4dvMESA, NULL, 688),
-    NAME_FUNC_OFFSET(11698, glWindowPos4fMESA, glWindowPos4fMESA, NULL, 689),
-    NAME_FUNC_OFFSET(11716, glWindowPos4fvMESA, glWindowPos4fvMESA, NULL, 690),
-    NAME_FUNC_OFFSET(11735, glWindowPos4iMESA, glWindowPos4iMESA, NULL, 691),
-    NAME_FUNC_OFFSET(11753, glWindowPos4ivMESA, glWindowPos4ivMESA, NULL, 692),
-    NAME_FUNC_OFFSET(11772, glWindowPos4sMESA, glWindowPos4sMESA, NULL, 693),
-    NAME_FUNC_OFFSET(11790, glWindowPos4svMESA, glWindowPos4svMESA, NULL, 694),
-    NAME_FUNC_OFFSET(11809, gl_dispatch_stub_695, gl_dispatch_stub_695, NULL, 695),
-    NAME_FUNC_OFFSET(11834, gl_dispatch_stub_696, gl_dispatch_stub_696, NULL, 696),
-    NAME_FUNC_OFFSET(11861, gl_dispatch_stub_697, gl_dispatch_stub_697, NULL, 697),
-    NAME_FUNC_OFFSET(11878, gl_dispatch_stub_698, gl_dispatch_stub_698, NULL, 698),
-    NAME_FUNC_OFFSET(11894, gl_dispatch_stub_699, gl_dispatch_stub_699, NULL, 699),
-    NAME_FUNC_OFFSET(11908, gl_dispatch_stub_700, gl_dispatch_stub_700, NULL, 700),
-    NAME_FUNC_OFFSET(11923, gl_dispatch_stub_701, gl_dispatch_stub_701, NULL, 701),
-    NAME_FUNC_OFFSET(11935, gl_dispatch_stub_702, gl_dispatch_stub_702, NULL, 702),
-    NAME_FUNC_OFFSET(11948, gl_dispatch_stub_703, gl_dispatch_stub_703, NULL, 703),
-    NAME_FUNC_OFFSET(11962, glAreProgramsResidentNV, glAreProgramsResidentNV, NULL, 704),
-    NAME_FUNC_OFFSET(11986, glBindProgramNV, glBindProgramNV, NULL, 705),
-    NAME_FUNC_OFFSET(12002, glDeleteProgramsNV, glDeleteProgramsNV, NULL, 706),
-    NAME_FUNC_OFFSET(12021, glExecuteProgramNV, glExecuteProgramNV, NULL, 707),
-    NAME_FUNC_OFFSET(12040, glGenProgramsNV, glGenProgramsNV, NULL, 708),
-    NAME_FUNC_OFFSET(12056, glGetProgramParameterdvNV, glGetProgramParameterdvNV, NULL, 709),
-    NAME_FUNC_OFFSET(12082, glGetProgramParameterfvNV, glGetProgramParameterfvNV, NULL, 710),
-    NAME_FUNC_OFFSET(12108, glGetProgramStringNV, glGetProgramStringNV, NULL, 711),
-    NAME_FUNC_OFFSET(12129, glGetProgramivNV, glGetProgramivNV, NULL, 712),
-    NAME_FUNC_OFFSET(12146, glGetTrackMatrixivNV, glGetTrackMatrixivNV, NULL, 713),
-    NAME_FUNC_OFFSET(12167, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, 714),
-    NAME_FUNC_OFFSET(12195, glGetVertexAttribdvNV, glGetVertexAttribdvNV, NULL, 715),
-    NAME_FUNC_OFFSET(12217, glGetVertexAttribfvNV, glGetVertexAttribfvNV, NULL, 716),
-    NAME_FUNC_OFFSET(12239, glGetVertexAttribivNV, glGetVertexAttribivNV, NULL, 717),
-    NAME_FUNC_OFFSET(12261, glIsProgramNV, glIsProgramNV, NULL, 718),
-    NAME_FUNC_OFFSET(12275, glLoadProgramNV, glLoadProgramNV, NULL, 719),
-    NAME_FUNC_OFFSET(12291, glProgramParameters4dvNV, glProgramParameters4dvNV, NULL, 720),
-    NAME_FUNC_OFFSET(12316, glProgramParameters4fvNV, glProgramParameters4fvNV, NULL, 721),
-    NAME_FUNC_OFFSET(12341, glRequestResidentProgramsNV, glRequestResidentProgramsNV, NULL, 722),
-    NAME_FUNC_OFFSET(12369, glTrackMatrixNV, glTrackMatrixNV, NULL, 723),
-    NAME_FUNC_OFFSET(12385, glVertexAttrib1dNV, glVertexAttrib1dNV, NULL, 724),
-    NAME_FUNC_OFFSET(12404, glVertexAttrib1dvNV, glVertexAttrib1dvNV, NULL, 725),
-    NAME_FUNC_OFFSET(12424, glVertexAttrib1fNV, glVertexAttrib1fNV, NULL, 726),
-    NAME_FUNC_OFFSET(12443, glVertexAttrib1fvNV, glVertexAttrib1fvNV, NULL, 727),
-    NAME_FUNC_OFFSET(12463, glVertexAttrib1sNV, glVertexAttrib1sNV, NULL, 728),
-    NAME_FUNC_OFFSET(12482, glVertexAttrib1svNV, glVertexAttrib1svNV, NULL, 729),
-    NAME_FUNC_OFFSET(12502, glVertexAttrib2dNV, glVertexAttrib2dNV, NULL, 730),
-    NAME_FUNC_OFFSET(12521, glVertexAttrib2dvNV, glVertexAttrib2dvNV, NULL, 731),
-    NAME_FUNC_OFFSET(12541, glVertexAttrib2fNV, glVertexAttrib2fNV, NULL, 732),
-    NAME_FUNC_OFFSET(12560, glVertexAttrib2fvNV, glVertexAttrib2fvNV, NULL, 733),
-    NAME_FUNC_OFFSET(12580, glVertexAttrib2sNV, glVertexAttrib2sNV, NULL, 734),
-    NAME_FUNC_OFFSET(12599, glVertexAttrib2svNV, glVertexAttrib2svNV, NULL, 735),
-    NAME_FUNC_OFFSET(12619, glVertexAttrib3dNV, glVertexAttrib3dNV, NULL, 736),
-    NAME_FUNC_OFFSET(12638, glVertexAttrib3dvNV, glVertexAttrib3dvNV, NULL, 737),
-    NAME_FUNC_OFFSET(12658, glVertexAttrib3fNV, glVertexAttrib3fNV, NULL, 738),
-    NAME_FUNC_OFFSET(12677, glVertexAttrib3fvNV, glVertexAttrib3fvNV, NULL, 739),
-    NAME_FUNC_OFFSET(12697, glVertexAttrib3sNV, glVertexAttrib3sNV, NULL, 740),
-    NAME_FUNC_OFFSET(12716, glVertexAttrib3svNV, glVertexAttrib3svNV, NULL, 741),
-    NAME_FUNC_OFFSET(12736, glVertexAttrib4dNV, glVertexAttrib4dNV, NULL, 742),
-    NAME_FUNC_OFFSET(12755, glVertexAttrib4dvNV, glVertexAttrib4dvNV, NULL, 743),
-    NAME_FUNC_OFFSET(12775, glVertexAttrib4fNV, glVertexAttrib4fNV, NULL, 744),
-    NAME_FUNC_OFFSET(12794, glVertexAttrib4fvNV, glVertexAttrib4fvNV, NULL, 745),
-    NAME_FUNC_OFFSET(12814, glVertexAttrib4sNV, glVertexAttrib4sNV, NULL, 746),
-    NAME_FUNC_OFFSET(12833, glVertexAttrib4svNV, glVertexAttrib4svNV, NULL, 747),
-    NAME_FUNC_OFFSET(12853, glVertexAttrib4ubNV, glVertexAttrib4ubNV, NULL, 748),
-    NAME_FUNC_OFFSET(12873, glVertexAttrib4ubvNV, glVertexAttrib4ubvNV, NULL, 749),
-    NAME_FUNC_OFFSET(12894, glVertexAttribPointerNV, glVertexAttribPointerNV, NULL, 750),
-    NAME_FUNC_OFFSET(12918, glVertexAttribs1dvNV, glVertexAttribs1dvNV, NULL, 751),
-    NAME_FUNC_OFFSET(12939, glVertexAttribs1fvNV, glVertexAttribs1fvNV, NULL, 752),
-    NAME_FUNC_OFFSET(12960, glVertexAttribs1svNV, glVertexAttribs1svNV, NULL, 753),
-    NAME_FUNC_OFFSET(12981, glVertexAttribs2dvNV, glVertexAttribs2dvNV, NULL, 754),
-    NAME_FUNC_OFFSET(13002, glVertexAttribs2fvNV, glVertexAttribs2fvNV, NULL, 755),
-    NAME_FUNC_OFFSET(13023, glVertexAttribs2svNV, glVertexAttribs2svNV, NULL, 756),
-    NAME_FUNC_OFFSET(13044, glVertexAttribs3dvNV, glVertexAttribs3dvNV, NULL, 757),
-    NAME_FUNC_OFFSET(13065, glVertexAttribs3fvNV, glVertexAttribs3fvNV, NULL, 758),
-    NAME_FUNC_OFFSET(13086, glVertexAttribs3svNV, glVertexAttribs3svNV, NULL, 759),
-    NAME_FUNC_OFFSET(13107, glVertexAttribs4dvNV, glVertexAttribs4dvNV, NULL, 760),
-    NAME_FUNC_OFFSET(13128, glVertexAttribs4fvNV, glVertexAttribs4fvNV, NULL, 761),
-    NAME_FUNC_OFFSET(13149, glVertexAttribs4svNV, glVertexAttribs4svNV, NULL, 762),
-    NAME_FUNC_OFFSET(13170, glVertexAttribs4ubvNV, glVertexAttribs4ubvNV, NULL, 763),
-    NAME_FUNC_OFFSET(13192, glGetTexBumpParameterfvATI, glGetTexBumpParameterfvATI, NULL, 764),
-    NAME_FUNC_OFFSET(13219, glGetTexBumpParameterivATI, glGetTexBumpParameterivATI, NULL, 765),
-    NAME_FUNC_OFFSET(13246, glTexBumpParameterfvATI, glTexBumpParameterfvATI, NULL, 766),
-    NAME_FUNC_OFFSET(13270, glTexBumpParameterivATI, glTexBumpParameterivATI, NULL, 767),
-    NAME_FUNC_OFFSET(13294, glAlphaFragmentOp1ATI, glAlphaFragmentOp1ATI, NULL, 768),
-    NAME_FUNC_OFFSET(13316, glAlphaFragmentOp2ATI, glAlphaFragmentOp2ATI, NULL, 769),
-    NAME_FUNC_OFFSET(13338, glAlphaFragmentOp3ATI, glAlphaFragmentOp3ATI, NULL, 770),
-    NAME_FUNC_OFFSET(13360, glBeginFragmentShaderATI, glBeginFragmentShaderATI, NULL, 771),
-    NAME_FUNC_OFFSET(13385, glBindFragmentShaderATI, glBindFragmentShaderATI, NULL, 772),
-    NAME_FUNC_OFFSET(13409, glColorFragmentOp1ATI, glColorFragmentOp1ATI, NULL, 773),
-    NAME_FUNC_OFFSET(13431, glColorFragmentOp2ATI, glColorFragmentOp2ATI, NULL, 774),
-    NAME_FUNC_OFFSET(13453, glColorFragmentOp3ATI, glColorFragmentOp3ATI, NULL, 775),
-    NAME_FUNC_OFFSET(13475, glDeleteFragmentShaderATI, glDeleteFragmentShaderATI, NULL, 776),
-    NAME_FUNC_OFFSET(13501, glEndFragmentShaderATI, glEndFragmentShaderATI, NULL, 777),
-    NAME_FUNC_OFFSET(13524, glGenFragmentShadersATI, glGenFragmentShadersATI, NULL, 778),
-    NAME_FUNC_OFFSET(13548, glPassTexCoordATI, glPassTexCoordATI, NULL, 779),
-    NAME_FUNC_OFFSET(13566, glSampleMapATI, glSampleMapATI, NULL, 780),
-    NAME_FUNC_OFFSET(13581, glSetFragmentShaderConstantATI, glSetFragmentShaderConstantATI, NULL, 781),
-    NAME_FUNC_OFFSET(13612, glPointParameteriNV, glPointParameteriNV, NULL, 782),
-    NAME_FUNC_OFFSET(13632, glPointParameterivNV, glPointParameterivNV, NULL, 783),
-    NAME_FUNC_OFFSET(13653, gl_dispatch_stub_784, gl_dispatch_stub_784, NULL, 784),
-    NAME_FUNC_OFFSET(13676, gl_dispatch_stub_785, gl_dispatch_stub_785, NULL, 785),
-    NAME_FUNC_OFFSET(13699, gl_dispatch_stub_786, gl_dispatch_stub_786, NULL, 786),
-    NAME_FUNC_OFFSET(13725, gl_dispatch_stub_787, gl_dispatch_stub_787, NULL, 787),
-    NAME_FUNC_OFFSET(13748, gl_dispatch_stub_788, gl_dispatch_stub_788, NULL, 788),
-    NAME_FUNC_OFFSET(13769, glGetProgramNamedParameterdvNV, glGetProgramNamedParameterdvNV, NULL, 789),
-    NAME_FUNC_OFFSET(13800, glGetProgramNamedParameterfvNV, glGetProgramNamedParameterfvNV, NULL, 790),
-    NAME_FUNC_OFFSET(13831, glProgramNamedParameter4dNV, glProgramNamedParameter4dNV, NULL, 791),
-    NAME_FUNC_OFFSET(13859, glProgramNamedParameter4dvNV, glProgramNamedParameter4dvNV, NULL, 792),
-    NAME_FUNC_OFFSET(13888, glProgramNamedParameter4fNV, glProgramNamedParameter4fNV, NULL, 793),
-    NAME_FUNC_OFFSET(13916, glProgramNamedParameter4fvNV, glProgramNamedParameter4fvNV, NULL, 794),
-    NAME_FUNC_OFFSET(13945, glPrimitiveRestartIndexNV, glPrimitiveRestartIndexNV, NULL, 795),
-    NAME_FUNC_OFFSET(13971, glPrimitiveRestartNV, glPrimitiveRestartNV, NULL, 796),
-    NAME_FUNC_OFFSET(13992, gl_dispatch_stub_797, gl_dispatch_stub_797, NULL, 797),
-    NAME_FUNC_OFFSET(14009, gl_dispatch_stub_798, gl_dispatch_stub_798, NULL, 798),
-    NAME_FUNC_OFFSET(14036, glBindFramebufferEXT, glBindFramebufferEXT, NULL, 799),
-    NAME_FUNC_OFFSET(14057, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, 800),
-    NAME_FUNC_OFFSET(14079, glCheckFramebufferStatusEXT, glCheckFramebufferStatusEXT, NULL, 801),
-    NAME_FUNC_OFFSET(14107, glDeleteFramebuffersEXT, glDeleteFramebuffersEXT, NULL, 802),
-    NAME_FUNC_OFFSET(14131, glDeleteRenderbuffersEXT, glDeleteRenderbuffersEXT, NULL, 803),
-    NAME_FUNC_OFFSET(14156, glFramebufferRenderbufferEXT, glFramebufferRenderbufferEXT, NULL, 804),
-    NAME_FUNC_OFFSET(14185, glFramebufferTexture1DEXT, glFramebufferTexture1DEXT, NULL, 805),
-    NAME_FUNC_OFFSET(14211, glFramebufferTexture2DEXT, glFramebufferTexture2DEXT, NULL, 806),
-    NAME_FUNC_OFFSET(14237, glFramebufferTexture3DEXT, glFramebufferTexture3DEXT, NULL, 807),
-    NAME_FUNC_OFFSET(14263, glGenFramebuffersEXT, glGenFramebuffersEXT, NULL, 808),
-    NAME_FUNC_OFFSET(14284, glGenRenderbuffersEXT, glGenRenderbuffersEXT, NULL, 809),
-    NAME_FUNC_OFFSET(14306, glGenerateMipmapEXT, glGenerateMipmapEXT, NULL, 810),
-    NAME_FUNC_OFFSET(14326, glGetFramebufferAttachmentParameterivEXT, glGetFramebufferAttachmentParameterivEXT, NULL, 811),
-    NAME_FUNC_OFFSET(14367, glGetRenderbufferParameterivEXT, glGetRenderbufferParameterivEXT, NULL, 812),
-    NAME_FUNC_OFFSET(14399, glIsFramebufferEXT, glIsFramebufferEXT, NULL, 813),
-    NAME_FUNC_OFFSET(14418, glIsRenderbufferEXT, glIsRenderbufferEXT, NULL, 814),
-    NAME_FUNC_OFFSET(14438, glRenderbufferStorageEXT, glRenderbufferStorageEXT, NULL, 815),
-    NAME_FUNC_OFFSET(14463, gl_dispatch_stub_816, gl_dispatch_stub_816, NULL, 816),
-    NAME_FUNC_OFFSET(14484, gl_dispatch_stub_817, gl_dispatch_stub_817, NULL, 817),
-    NAME_FUNC_OFFSET(14508, gl_dispatch_stub_818, gl_dispatch_stub_818, NULL, 818),
-    NAME_FUNC_OFFSET(14538, glBindFragDataLocationEXT, glBindFragDataLocationEXT, NULL, 819),
-    NAME_FUNC_OFFSET(14564, glGetFragDataLocationEXT, glGetFragDataLocationEXT, NULL, 820),
-    NAME_FUNC_OFFSET(14589, glGetUniformuivEXT, glGetUniformuivEXT, NULL, 821),
-    NAME_FUNC_OFFSET(14608, glGetVertexAttribIivEXT, glGetVertexAttribIivEXT, NULL, 822),
-    NAME_FUNC_OFFSET(14632, glGetVertexAttribIuivEXT, glGetVertexAttribIuivEXT, NULL, 823),
-    NAME_FUNC_OFFSET(14657, glUniform1uiEXT, glUniform1uiEXT, NULL, 824),
-    NAME_FUNC_OFFSET(14673, glUniform1uivEXT, glUniform1uivEXT, NULL, 825),
-    NAME_FUNC_OFFSET(14690, glUniform2uiEXT, glUniform2uiEXT, NULL, 826),
-    NAME_FUNC_OFFSET(14706, glUniform2uivEXT, glUniform2uivEXT, NULL, 827),
-    NAME_FUNC_OFFSET(14723, glUniform3uiEXT, glUniform3uiEXT, NULL, 828),
-    NAME_FUNC_OFFSET(14739, glUniform3uivEXT, glUniform3uivEXT, NULL, 829),
-    NAME_FUNC_OFFSET(14756, glUniform4uiEXT, glUniform4uiEXT, NULL, 830),
-    NAME_FUNC_OFFSET(14772, glUniform4uivEXT, glUniform4uivEXT, NULL, 831),
-    NAME_FUNC_OFFSET(14789, glVertexAttribI1iEXT, glVertexAttribI1iEXT, NULL, 832),
-    NAME_FUNC_OFFSET(14810, glVertexAttribI1ivEXT, glVertexAttribI1ivEXT, NULL, 833),
-    NAME_FUNC_OFFSET(14832, glVertexAttribI1uiEXT, glVertexAttribI1uiEXT, NULL, 834),
-    NAME_FUNC_OFFSET(14854, glVertexAttribI1uivEXT, glVertexAttribI1uivEXT, NULL, 835),
-    NAME_FUNC_OFFSET(14877, glVertexAttribI2iEXT, glVertexAttribI2iEXT, NULL, 836),
-    NAME_FUNC_OFFSET(14898, glVertexAttribI2ivEXT, glVertexAttribI2ivEXT, NULL, 837),
-    NAME_FUNC_OFFSET(14920, glVertexAttribI2uiEXT, glVertexAttribI2uiEXT, NULL, 838),
-    NAME_FUNC_OFFSET(14942, glVertexAttribI2uivEXT, glVertexAttribI2uivEXT, NULL, 839),
-    NAME_FUNC_OFFSET(14965, glVertexAttribI3iEXT, glVertexAttribI3iEXT, NULL, 840),
-    NAME_FUNC_OFFSET(14986, glVertexAttribI3ivEXT, glVertexAttribI3ivEXT, NULL, 841),
-    NAME_FUNC_OFFSET(15008, glVertexAttribI3uiEXT, glVertexAttribI3uiEXT, NULL, 842),
-    NAME_FUNC_OFFSET(15030, glVertexAttribI3uivEXT, glVertexAttribI3uivEXT, NULL, 843),
-    NAME_FUNC_OFFSET(15053, glVertexAttribI4bvEXT, glVertexAttribI4bvEXT, NULL, 844),
-    NAME_FUNC_OFFSET(15075, glVertexAttribI4iEXT, glVertexAttribI4iEXT, NULL, 845),
-    NAME_FUNC_OFFSET(15096, glVertexAttribI4ivEXT, glVertexAttribI4ivEXT, NULL, 846),
-    NAME_FUNC_OFFSET(15118, glVertexAttribI4svEXT, glVertexAttribI4svEXT, NULL, 847),
-    NAME_FUNC_OFFSET(15140, glVertexAttribI4ubvEXT, glVertexAttribI4ubvEXT, NULL, 848),
-    NAME_FUNC_OFFSET(15163, glVertexAttribI4uiEXT, glVertexAttribI4uiEXT, NULL, 849),
-    NAME_FUNC_OFFSET(15185, glVertexAttribI4uivEXT, glVertexAttribI4uivEXT, NULL, 850),
-    NAME_FUNC_OFFSET(15208, glVertexAttribI4usvEXT, glVertexAttribI4usvEXT, NULL, 851),
-    NAME_FUNC_OFFSET(15231, glVertexAttribIPointerEXT, glVertexAttribIPointerEXT, NULL, 852),
-    NAME_FUNC_OFFSET(15257, glFramebufferTextureLayerEXT, glFramebufferTextureLayerEXT, NULL, 853),
-    NAME_FUNC_OFFSET(15286, glColorMaskIndexedEXT, glColorMaskIndexedEXT, NULL, 854),
-    NAME_FUNC_OFFSET(15308, glDisableIndexedEXT, glDisableIndexedEXT, NULL, 855),
-    NAME_FUNC_OFFSET(15328, glEnableIndexedEXT, glEnableIndexedEXT, NULL, 856),
-    NAME_FUNC_OFFSET(15347, glGetBooleanIndexedvEXT, glGetBooleanIndexedvEXT, NULL, 857),
-    NAME_FUNC_OFFSET(15371, glGetIntegerIndexedvEXT, glGetIntegerIndexedvEXT, NULL, 858),
-    NAME_FUNC_OFFSET(15395, glIsEnabledIndexedEXT, glIsEnabledIndexedEXT, NULL, 859),
-    NAME_FUNC_OFFSET(15417, glClearColorIiEXT, glClearColorIiEXT, NULL, 860),
-    NAME_FUNC_OFFSET(15435, glClearColorIuiEXT, glClearColorIuiEXT, NULL, 861),
-    NAME_FUNC_OFFSET(15454, glGetTexParameterIivEXT, glGetTexParameterIivEXT, NULL, 862),
-    NAME_FUNC_OFFSET(15478, glGetTexParameterIuivEXT, glGetTexParameterIuivEXT, NULL, 863),
-    NAME_FUNC_OFFSET(15503, glTexParameterIivEXT, glTexParameterIivEXT, NULL, 864),
-    NAME_FUNC_OFFSET(15524, glTexParameterIuivEXT, glTexParameterIuivEXT, NULL, 865),
-    NAME_FUNC_OFFSET(15546, glBeginConditionalRenderNV, glBeginConditionalRenderNV, NULL, 866),
-    NAME_FUNC_OFFSET(15573, glEndConditionalRenderNV, glEndConditionalRenderNV, NULL, 867),
-    NAME_FUNC_OFFSET(15598, glBeginTransformFeedbackEXT, glBeginTransformFeedbackEXT, NULL, 868),
-    NAME_FUNC_OFFSET(15626, glBindBufferBaseEXT, glBindBufferBaseEXT, NULL, 869),
-    NAME_FUNC_OFFSET(15646, glBindBufferOffsetEXT, glBindBufferOffsetEXT, NULL, 870),
-    NAME_FUNC_OFFSET(15668, glBindBufferRangeEXT, glBindBufferRangeEXT, NULL, 871),
-    NAME_FUNC_OFFSET(15689, glEndTransformFeedbackEXT, glEndTransformFeedbackEXT, NULL, 872),
-    NAME_FUNC_OFFSET(15715, glGetTransformFeedbackVaryingEXT, glGetTransformFeedbackVaryingEXT, NULL, 873),
-    NAME_FUNC_OFFSET(15748, glTransformFeedbackVaryingsEXT, glTransformFeedbackVaryingsEXT, NULL, 874),
-    NAME_FUNC_OFFSET(15779, glProvokingVertexEXT, glProvokingVertexEXT, NULL, 875),
-    NAME_FUNC_OFFSET(15800, gl_dispatch_stub_876, gl_dispatch_stub_876, NULL, 876),
-    NAME_FUNC_OFFSET(15831, gl_dispatch_stub_877, gl_dispatch_stub_877, NULL, 877),
-    NAME_FUNC_OFFSET(15851, glGetObjectParameterivAPPLE, glGetObjectParameterivAPPLE, NULL, 878),
-    NAME_FUNC_OFFSET(15879, glObjectPurgeableAPPLE, glObjectPurgeableAPPLE, NULL, 879),
-    NAME_FUNC_OFFSET(15902, glObjectUnpurgeableAPPLE, glObjectUnpurgeableAPPLE, NULL, 880),
-    NAME_FUNC_OFFSET(15927, glActiveProgramEXT, glActiveProgramEXT, NULL, 881),
-    NAME_FUNC_OFFSET(15946, glCreateShaderProgramEXT, glCreateShaderProgramEXT, NULL, 882),
-    NAME_FUNC_OFFSET(15971, glUseShaderProgramEXT, glUseShaderProgramEXT, NULL, 883),
-    NAME_FUNC_OFFSET(15993, glTextureBarrierNV, glTextureBarrierNV, NULL, 884),
-    NAME_FUNC_OFFSET(16012, gl_dispatch_stub_885, gl_dispatch_stub_885, NULL, 885),
-    NAME_FUNC_OFFSET(16037, gl_dispatch_stub_886, gl_dispatch_stub_886, NULL, 886),
-    NAME_FUNC_OFFSET(16066, gl_dispatch_stub_887, gl_dispatch_stub_887, NULL, 887),
-    NAME_FUNC_OFFSET(16097, gl_dispatch_stub_888, gl_dispatch_stub_888, NULL, 888),
-    NAME_FUNC_OFFSET(16121, gl_dispatch_stub_889, gl_dispatch_stub_889, NULL, 889),
-    NAME_FUNC_OFFSET(16146, glEGLImageTargetRenderbufferStorageOES, glEGLImageTargetRenderbufferStorageOES, NULL, 890),
-    NAME_FUNC_OFFSET(16185, glEGLImageTargetTexture2DOES, glEGLImageTargetTexture2DOES, NULL, 891),
-    NAME_FUNC_OFFSET(16214, glArrayElement, glArrayElement, NULL, 306),
-    NAME_FUNC_OFFSET(16232, glBindTexture, glBindTexture, NULL, 307),
-    NAME_FUNC_OFFSET(16249, glDrawArrays, glDrawArrays, NULL, 310),
-    NAME_FUNC_OFFSET(16265, glAreTexturesResident, glAreTexturesResidentEXT, glAreTexturesResidentEXT, 322),
-    NAME_FUNC_OFFSET(16290, glCopyTexImage1D, glCopyTexImage1D, NULL, 323),
-    NAME_FUNC_OFFSET(16310, glCopyTexImage2D, glCopyTexImage2D, NULL, 324),
-    NAME_FUNC_OFFSET(16330, glCopyTexSubImage1D, glCopyTexSubImage1D, NULL, 325),
-    NAME_FUNC_OFFSET(16353, glCopyTexSubImage2D, glCopyTexSubImage2D, NULL, 326),
-    NAME_FUNC_OFFSET(16376, glDeleteTextures, glDeleteTexturesEXT, glDeleteTexturesEXT, 327),
-    NAME_FUNC_OFFSET(16396, glGenTextures, glGenTexturesEXT, glGenTexturesEXT, 328),
-    NAME_FUNC_OFFSET(16413, glGetPointerv, glGetPointerv, NULL, 329),
-    NAME_FUNC_OFFSET(16430, glIsTexture, glIsTextureEXT, glIsTextureEXT, 330),
-    NAME_FUNC_OFFSET(16445, glPrioritizeTextures, glPrioritizeTextures, NULL, 331),
-    NAME_FUNC_OFFSET(16469, glTexSubImage1D, glTexSubImage1D, NULL, 332),
-    NAME_FUNC_OFFSET(16488, glTexSubImage2D, glTexSubImage2D, NULL, 333),
-    NAME_FUNC_OFFSET(16507, glBlendColor, glBlendColor, NULL, 336),
-    NAME_FUNC_OFFSET(16523, glBlendEquation, glBlendEquation, NULL, 337),
-    NAME_FUNC_OFFSET(16542, glDrawRangeElements, glDrawRangeElements, NULL, 338),
-    NAME_FUNC_OFFSET(16565, glColorTable, glColorTable, NULL, 339),
-    NAME_FUNC_OFFSET(16581, glColorTable, glColorTable, NULL, 339),
-    NAME_FUNC_OFFSET(16597, glColorTableParameterfv, glColorTableParameterfv, NULL, 340),
-    NAME_FUNC_OFFSET(16624, glColorTableParameteriv, glColorTableParameteriv, NULL, 341),
-    NAME_FUNC_OFFSET(16651, glCopyColorTable, glCopyColorTable, NULL, 342),
-    NAME_FUNC_OFFSET(16671, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, 343),
-    NAME_FUNC_OFFSET(16690, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, 343),
-    NAME_FUNC_OFFSET(16709, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, 344),
-    NAME_FUNC_OFFSET(16739, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, 344),
-    NAME_FUNC_OFFSET(16769, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, 345),
-    NAME_FUNC_OFFSET(16799, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, 345),
-    NAME_FUNC_OFFSET(16829, glColorSubTable, glColorSubTable, NULL, 346),
-    NAME_FUNC_OFFSET(16848, glCopyColorSubTable, glCopyColorSubTable, NULL, 347),
-    NAME_FUNC_OFFSET(16871, glConvolutionFilter1D, glConvolutionFilter1D, NULL, 348),
-    NAME_FUNC_OFFSET(16896, glConvolutionFilter2D, glConvolutionFilter2D, NULL, 349),
-    NAME_FUNC_OFFSET(16921, glConvolutionParameterf, glConvolutionParameterf, NULL, 350),
-    NAME_FUNC_OFFSET(16948, glConvolutionParameterfv, glConvolutionParameterfv, NULL, 351),
-    NAME_FUNC_OFFSET(16976, glConvolutionParameteri, glConvolutionParameteri, NULL, 352),
-    NAME_FUNC_OFFSET(17003, glConvolutionParameteriv, glConvolutionParameteriv, NULL, 353),
-    NAME_FUNC_OFFSET(17031, glCopyConvolutionFilter1D, glCopyConvolutionFilter1D, NULL, 354),
-    NAME_FUNC_OFFSET(17060, glCopyConvolutionFilter2D, glCopyConvolutionFilter2D, NULL, 355),
-    NAME_FUNC_OFFSET(17089, glGetConvolutionFilter, gl_dispatch_stub_356, gl_dispatch_stub_356, 356),
-    NAME_FUNC_OFFSET(17115, glGetConvolutionParameterfv, gl_dispatch_stub_357, gl_dispatch_stub_357, 357),
-    NAME_FUNC_OFFSET(17146, glGetConvolutionParameteriv, gl_dispatch_stub_358, gl_dispatch_stub_358, 358),
-    NAME_FUNC_OFFSET(17177, glGetSeparableFilter, gl_dispatch_stub_359, gl_dispatch_stub_359, 359),
-    NAME_FUNC_OFFSET(17201, glSeparableFilter2D, glSeparableFilter2D, NULL, 360),
-    NAME_FUNC_OFFSET(17224, glGetHistogram, gl_dispatch_stub_361, gl_dispatch_stub_361, 361),
-    NAME_FUNC_OFFSET(17242, glGetHistogramParameterfv, gl_dispatch_stub_362, gl_dispatch_stub_362, 362),
-    NAME_FUNC_OFFSET(17271, glGetHistogramParameteriv, gl_dispatch_stub_363, gl_dispatch_stub_363, 363),
-    NAME_FUNC_OFFSET(17300, glGetMinmax, gl_dispatch_stub_364, gl_dispatch_stub_364, 364),
-    NAME_FUNC_OFFSET(17315, glGetMinmaxParameterfv, gl_dispatch_stub_365, gl_dispatch_stub_365, 365),
-    NAME_FUNC_OFFSET(17341, glGetMinmaxParameteriv, gl_dispatch_stub_366, gl_dispatch_stub_366, 366),
-    NAME_FUNC_OFFSET(17367, glHistogram, glHistogram, NULL, 367),
-    NAME_FUNC_OFFSET(17382, glMinmax, glMinmax, NULL, 368),
-    NAME_FUNC_OFFSET(17394, glResetHistogram, glResetHistogram, NULL, 369),
-    NAME_FUNC_OFFSET(17414, glResetMinmax, glResetMinmax, NULL, 370),
-    NAME_FUNC_OFFSET(17431, glTexImage3D, glTexImage3D, NULL, 371),
-    NAME_FUNC_OFFSET(17447, glTexSubImage3D, glTexSubImage3D, NULL, 372),
-    NAME_FUNC_OFFSET(17466, glCopyTexSubImage3D, glCopyTexSubImage3D, NULL, 373),
-    NAME_FUNC_OFFSET(17489, glActiveTextureARB, glActiveTextureARB, NULL, 374),
-    NAME_FUNC_OFFSET(17505, glClientActiveTextureARB, glClientActiveTextureARB, NULL, 375),
-    NAME_FUNC_OFFSET(17527, glMultiTexCoord1dARB, glMultiTexCoord1dARB, NULL, 376),
-    NAME_FUNC_OFFSET(17545, glMultiTexCoord1dvARB, glMultiTexCoord1dvARB, NULL, 377),
-    NAME_FUNC_OFFSET(17564, glMultiTexCoord1fARB, glMultiTexCoord1fARB, NULL, 378),
-    NAME_FUNC_OFFSET(17582, glMultiTexCoord1fvARB, glMultiTexCoord1fvARB, NULL, 379),
-    NAME_FUNC_OFFSET(17601, glMultiTexCoord1iARB, glMultiTexCoord1iARB, NULL, 380),
-    NAME_FUNC_OFFSET(17619, glMultiTexCoord1ivARB, glMultiTexCoord1ivARB, NULL, 381),
-    NAME_FUNC_OFFSET(17638, glMultiTexCoord1sARB, glMultiTexCoord1sARB, NULL, 382),
-    NAME_FUNC_OFFSET(17656, glMultiTexCoord1svARB, glMultiTexCoord1svARB, NULL, 383),
-    NAME_FUNC_OFFSET(17675, glMultiTexCoord2dARB, glMultiTexCoord2dARB, NULL, 384),
-    NAME_FUNC_OFFSET(17693, glMultiTexCoord2dvARB, glMultiTexCoord2dvARB, NULL, 385),
-    NAME_FUNC_OFFSET(17712, glMultiTexCoord2fARB, glMultiTexCoord2fARB, NULL, 386),
-    NAME_FUNC_OFFSET(17730, glMultiTexCoord2fvARB, glMultiTexCoord2fvARB, NULL, 387),
-    NAME_FUNC_OFFSET(17749, glMultiTexCoord2iARB, glMultiTexCoord2iARB, NULL, 388),
-    NAME_FUNC_OFFSET(17767, glMultiTexCoord2ivARB, glMultiTexCoord2ivARB, NULL, 389),
-    NAME_FUNC_OFFSET(17786, glMultiTexCoord2sARB, glMultiTexCoord2sARB, NULL, 390),
-    NAME_FUNC_OFFSET(17804, glMultiTexCoord2svARB, glMultiTexCoord2svARB, NULL, 391),
-    NAME_FUNC_OFFSET(17823, glMultiTexCoord3dARB, glMultiTexCoord3dARB, NULL, 392),
-    NAME_FUNC_OFFSET(17841, glMultiTexCoord3dvARB, glMultiTexCoord3dvARB, NULL, 393),
-    NAME_FUNC_OFFSET(17860, glMultiTexCoord3fARB, glMultiTexCoord3fARB, NULL, 394),
-    NAME_FUNC_OFFSET(17878, glMultiTexCoord3fvARB, glMultiTexCoord3fvARB, NULL, 395),
-    NAME_FUNC_OFFSET(17897, glMultiTexCoord3iARB, glMultiTexCoord3iARB, NULL, 396),
-    NAME_FUNC_OFFSET(17915, glMultiTexCoord3ivARB, glMultiTexCoord3ivARB, NULL, 397),
-    NAME_FUNC_OFFSET(17934, glMultiTexCoord3sARB, glMultiTexCoord3sARB, NULL, 398),
-    NAME_FUNC_OFFSET(17952, glMultiTexCoord3svARB, glMultiTexCoord3svARB, NULL, 399),
-    NAME_FUNC_OFFSET(17971, glMultiTexCoord4dARB, glMultiTexCoord4dARB, NULL, 400),
-    NAME_FUNC_OFFSET(17989, glMultiTexCoord4dvARB, glMultiTexCoord4dvARB, NULL, 401),
-    NAME_FUNC_OFFSET(18008, glMultiTexCoord4fARB, glMultiTexCoord4fARB, NULL, 402),
-    NAME_FUNC_OFFSET(18026, glMultiTexCoord4fvARB, glMultiTexCoord4fvARB, NULL, 403),
-    NAME_FUNC_OFFSET(18045, glMultiTexCoord4iARB, glMultiTexCoord4iARB, NULL, 404),
-    NAME_FUNC_OFFSET(18063, glMultiTexCoord4ivARB, glMultiTexCoord4ivARB, NULL, 405),
-    NAME_FUNC_OFFSET(18082, glMultiTexCoord4sARB, glMultiTexCoord4sARB, NULL, 406),
-    NAME_FUNC_OFFSET(18100, glMultiTexCoord4svARB, glMultiTexCoord4svARB, NULL, 407),
-    NAME_FUNC_OFFSET(18119, glStencilOpSeparate, glStencilOpSeparate, NULL, 423),
-    NAME_FUNC_OFFSET(18142, glLoadTransposeMatrixdARB, glLoadTransposeMatrixdARB, NULL, 441),
-    NAME_FUNC_OFFSET(18165, glLoadTransposeMatrixfARB, glLoadTransposeMatrixfARB, NULL, 442),
-    NAME_FUNC_OFFSET(18188, glMultTransposeMatrixdARB, glMultTransposeMatrixdARB, NULL, 443),
-    NAME_FUNC_OFFSET(18211, glMultTransposeMatrixfARB, glMultTransposeMatrixfARB, NULL, 444),
-    NAME_FUNC_OFFSET(18234, glSampleCoverageARB, glSampleCoverageARB, NULL, 445),
-    NAME_FUNC_OFFSET(18251, glCompressedTexImage1DARB, glCompressedTexImage1DARB, NULL, 446),
-    NAME_FUNC_OFFSET(18274, glCompressedTexImage2DARB, glCompressedTexImage2DARB, NULL, 447),
-    NAME_FUNC_OFFSET(18297, glCompressedTexImage3DARB, glCompressedTexImage3DARB, NULL, 448),
-    NAME_FUNC_OFFSET(18320, glCompressedTexSubImage1DARB, glCompressedTexSubImage1DARB, NULL, 449),
-    NAME_FUNC_OFFSET(18346, glCompressedTexSubImage2DARB, glCompressedTexSubImage2DARB, NULL, 450),
-    NAME_FUNC_OFFSET(18372, glCompressedTexSubImage3DARB, glCompressedTexSubImage3DARB, NULL, 451),
-    NAME_FUNC_OFFSET(18398, glGetCompressedTexImageARB, glGetCompressedTexImageARB, NULL, 452),
-    NAME_FUNC_OFFSET(18422, glDisableVertexAttribArrayARB, glDisableVertexAttribArrayARB, NULL, 453),
-    NAME_FUNC_OFFSET(18449, glEnableVertexAttribArrayARB, glEnableVertexAttribArrayARB, NULL, 454),
-    NAME_FUNC_OFFSET(18475, glGetVertexAttribdvARB, glGetVertexAttribdvARB, NULL, 461),
-    NAME_FUNC_OFFSET(18495, glGetVertexAttribfvARB, glGetVertexAttribfvARB, NULL, 462),
-    NAME_FUNC_OFFSET(18515, glGetVertexAttribivARB, glGetVertexAttribivARB, NULL, 463),
-    NAME_FUNC_OFFSET(18535, glProgramEnvParameter4dARB, glProgramEnvParameter4dARB, NULL, 464),
-    NAME_FUNC_OFFSET(18558, glProgramEnvParameter4dvARB, glProgramEnvParameter4dvARB, NULL, 465),
-    NAME_FUNC_OFFSET(18582, glProgramEnvParameter4fARB, glProgramEnvParameter4fARB, NULL, 466),
-    NAME_FUNC_OFFSET(18605, glProgramEnvParameter4fvARB, glProgramEnvParameter4fvARB, NULL, 467),
-    NAME_FUNC_OFFSET(18629, glVertexAttrib1dARB, glVertexAttrib1dARB, NULL, 473),
-    NAME_FUNC_OFFSET(18646, glVertexAttrib1dvARB, glVertexAttrib1dvARB, NULL, 474),
-    NAME_FUNC_OFFSET(18664, glVertexAttrib1fARB, glVertexAttrib1fARB, NULL, 475),
-    NAME_FUNC_OFFSET(18681, glVertexAttrib1fvARB, glVertexAttrib1fvARB, NULL, 476),
-    NAME_FUNC_OFFSET(18699, glVertexAttrib1sARB, glVertexAttrib1sARB, NULL, 477),
-    NAME_FUNC_OFFSET(18716, glVertexAttrib1svARB, glVertexAttrib1svARB, NULL, 478),
-    NAME_FUNC_OFFSET(18734, glVertexAttrib2dARB, glVertexAttrib2dARB, NULL, 479),
-    NAME_FUNC_OFFSET(18751, glVertexAttrib2dvARB, glVertexAttrib2dvARB, NULL, 480),
-    NAME_FUNC_OFFSET(18769, glVertexAttrib2fARB, glVertexAttrib2fARB, NULL, 481),
-    NAME_FUNC_OFFSET(18786, glVertexAttrib2fvARB, glVertexAttrib2fvARB, NULL, 482),
-    NAME_FUNC_OFFSET(18804, glVertexAttrib2sARB, glVertexAttrib2sARB, NULL, 483),
-    NAME_FUNC_OFFSET(18821, glVertexAttrib2svARB, glVertexAttrib2svARB, NULL, 484),
-    NAME_FUNC_OFFSET(18839, glVertexAttrib3dARB, glVertexAttrib3dARB, NULL, 485),
-    NAME_FUNC_OFFSET(18856, glVertexAttrib3dvARB, glVertexAttrib3dvARB, NULL, 486),
-    NAME_FUNC_OFFSET(18874, glVertexAttrib3fARB, glVertexAttrib3fARB, NULL, 487),
-    NAME_FUNC_OFFSET(18891, glVertexAttrib3fvARB, glVertexAttrib3fvARB, NULL, 488),
-    NAME_FUNC_OFFSET(18909, glVertexAttrib3sARB, glVertexAttrib3sARB, NULL, 489),
-    NAME_FUNC_OFFSET(18926, glVertexAttrib3svARB, glVertexAttrib3svARB, NULL, 490),
-    NAME_FUNC_OFFSET(18944, glVertexAttrib4NbvARB, glVertexAttrib4NbvARB, NULL, 491),
-    NAME_FUNC_OFFSET(18963, glVertexAttrib4NivARB, glVertexAttrib4NivARB, NULL, 492),
-    NAME_FUNC_OFFSET(18982, glVertexAttrib4NsvARB, glVertexAttrib4NsvARB, NULL, 493),
-    NAME_FUNC_OFFSET(19001, glVertexAttrib4NubARB, glVertexAttrib4NubARB, NULL, 494),
-    NAME_FUNC_OFFSET(19020, glVertexAttrib4NubvARB, glVertexAttrib4NubvARB, NULL, 495),
-    NAME_FUNC_OFFSET(19040, glVertexAttrib4NuivARB, glVertexAttrib4NuivARB, NULL, 496),
-    NAME_FUNC_OFFSET(19060, glVertexAttrib4NusvARB, glVertexAttrib4NusvARB, NULL, 497),
-    NAME_FUNC_OFFSET(19080, glVertexAttrib4bvARB, glVertexAttrib4bvARB, NULL, 498),
-    NAME_FUNC_OFFSET(19098, glVertexAttrib4dARB, glVertexAttrib4dARB, NULL, 499),
-    NAME_FUNC_OFFSET(19115, glVertexAttrib4dvARB, glVertexAttrib4dvARB, NULL, 500),
-    NAME_FUNC_OFFSET(19133, glVertexAttrib4fARB, glVertexAttrib4fARB, NULL, 501),
-    NAME_FUNC_OFFSET(19150, glVertexAttrib4fvARB, glVertexAttrib4fvARB, NULL, 502),
-    NAME_FUNC_OFFSET(19168, glVertexAttrib4ivARB, glVertexAttrib4ivARB, NULL, 503),
-    NAME_FUNC_OFFSET(19186, glVertexAttrib4sARB, glVertexAttrib4sARB, NULL, 504),
-    NAME_FUNC_OFFSET(19203, glVertexAttrib4svARB, glVertexAttrib4svARB, NULL, 505),
-    NAME_FUNC_OFFSET(19221, glVertexAttrib4ubvARB, glVertexAttrib4ubvARB, NULL, 506),
-    NAME_FUNC_OFFSET(19240, glVertexAttrib4uivARB, glVertexAttrib4uivARB, NULL, 507),
-    NAME_FUNC_OFFSET(19259, glVertexAttrib4usvARB, glVertexAttrib4usvARB, NULL, 508),
-    NAME_FUNC_OFFSET(19278, glVertexAttribPointerARB, glVertexAttribPointerARB, NULL, 509),
-    NAME_FUNC_OFFSET(19300, glBindBufferARB, glBindBufferARB, NULL, 510),
-    NAME_FUNC_OFFSET(19313, glBufferDataARB, glBufferDataARB, NULL, 511),
-    NAME_FUNC_OFFSET(19326, glBufferSubDataARB, glBufferSubDataARB, NULL, 512),
-    NAME_FUNC_OFFSET(19342, glDeleteBuffersARB, glDeleteBuffersARB, NULL, 513),
-    NAME_FUNC_OFFSET(19358, glGenBuffersARB, glGenBuffersARB, NULL, 514),
-    NAME_FUNC_OFFSET(19371, glGetBufferParameterivARB, glGetBufferParameterivARB, NULL, 515),
-    NAME_FUNC_OFFSET(19394, glGetBufferPointervARB, glGetBufferPointervARB, NULL, 516),
-    NAME_FUNC_OFFSET(19414, glGetBufferSubDataARB, glGetBufferSubDataARB, NULL, 517),
-    NAME_FUNC_OFFSET(19433, glIsBufferARB, glIsBufferARB, NULL, 518),
-    NAME_FUNC_OFFSET(19444, glMapBufferARB, glMapBufferARB, NULL, 519),
-    NAME_FUNC_OFFSET(19456, glUnmapBufferARB, glUnmapBufferARB, NULL, 520),
-    NAME_FUNC_OFFSET(19470, glBeginQueryARB, glBeginQueryARB, NULL, 521),
-    NAME_FUNC_OFFSET(19483, glDeleteQueriesARB, glDeleteQueriesARB, NULL, 522),
-    NAME_FUNC_OFFSET(19499, glEndQueryARB, glEndQueryARB, NULL, 523),
-    NAME_FUNC_OFFSET(19510, glGenQueriesARB, glGenQueriesARB, NULL, 524),
-    NAME_FUNC_OFFSET(19523, glGetQueryObjectivARB, glGetQueryObjectivARB, NULL, 525),
-    NAME_FUNC_OFFSET(19542, glGetQueryObjectuivARB, glGetQueryObjectuivARB, NULL, 526),
-    NAME_FUNC_OFFSET(19562, glGetQueryivARB, glGetQueryivARB, NULL, 527),
-    NAME_FUNC_OFFSET(19575, glIsQueryARB, glIsQueryARB, NULL, 528),
-    NAME_FUNC_OFFSET(19585, glCompileShaderARB, glCompileShaderARB, NULL, 530),
-    NAME_FUNC_OFFSET(19601, glGetActiveUniformARB, glGetActiveUniformARB, NULL, 535),
-    NAME_FUNC_OFFSET(19620, glGetShaderSourceARB, glGetShaderSourceARB, NULL, 541),
-    NAME_FUNC_OFFSET(19638, glGetUniformLocationARB, glGetUniformLocationARB, NULL, 542),
-    NAME_FUNC_OFFSET(19659, glGetUniformfvARB, glGetUniformfvARB, NULL, 543),
-    NAME_FUNC_OFFSET(19674, glGetUniformivARB, glGetUniformivARB, NULL, 544),
-    NAME_FUNC_OFFSET(19689, glLinkProgramARB, glLinkProgramARB, NULL, 545),
-    NAME_FUNC_OFFSET(19703, glShaderSourceARB, glShaderSourceARB, NULL, 546),
-    NAME_FUNC_OFFSET(19718, glUniform1fARB, glUniform1fARB, NULL, 547),
-    NAME_FUNC_OFFSET(19730, glUniform1fvARB, glUniform1fvARB, NULL, 548),
-    NAME_FUNC_OFFSET(19743, glUniform1iARB, glUniform1iARB, NULL, 549),
-    NAME_FUNC_OFFSET(19755, glUniform1ivARB, glUniform1ivARB, NULL, 550),
-    NAME_FUNC_OFFSET(19768, glUniform2fARB, glUniform2fARB, NULL, 551),
-    NAME_FUNC_OFFSET(19780, glUniform2fvARB, glUniform2fvARB, NULL, 552),
-    NAME_FUNC_OFFSET(19793, glUniform2iARB, glUniform2iARB, NULL, 553),
-    NAME_FUNC_OFFSET(19805, glUniform2ivARB, glUniform2ivARB, NULL, 554),
-    NAME_FUNC_OFFSET(19818, glUniform3fARB, glUniform3fARB, NULL, 555),
-    NAME_FUNC_OFFSET(19830, glUniform3fvARB, glUniform3fvARB, NULL, 556),
-    NAME_FUNC_OFFSET(19843, glUniform3iARB, glUniform3iARB, NULL, 557),
-    NAME_FUNC_OFFSET(19855, glUniform3ivARB, glUniform3ivARB, NULL, 558),
-    NAME_FUNC_OFFSET(19868, glUniform4fARB, glUniform4fARB, NULL, 559),
-    NAME_FUNC_OFFSET(19880, glUniform4fvARB, glUniform4fvARB, NULL, 560),
-    NAME_FUNC_OFFSET(19893, glUniform4iARB, glUniform4iARB, NULL, 561),
-    NAME_FUNC_OFFSET(19905, glUniform4ivARB, glUniform4ivARB, NULL, 562),
-    NAME_FUNC_OFFSET(19918, glUniformMatrix2fvARB, glUniformMatrix2fvARB, NULL, 563),
-    NAME_FUNC_OFFSET(19937, glUniformMatrix3fvARB, glUniformMatrix3fvARB, NULL, 564),
-    NAME_FUNC_OFFSET(19956, glUniformMatrix4fvARB, glUniformMatrix4fvARB, NULL, 565),
-    NAME_FUNC_OFFSET(19975, glUseProgramObjectARB, glUseProgramObjectARB, NULL, 566),
-    NAME_FUNC_OFFSET(19988, glValidateProgramARB, glValidateProgramARB, NULL, 567),
-    NAME_FUNC_OFFSET(20006, glBindAttribLocationARB, glBindAttribLocationARB, NULL, 568),
-    NAME_FUNC_OFFSET(20027, glGetActiveAttribARB, glGetActiveAttribARB, NULL, 569),
-    NAME_FUNC_OFFSET(20045, glGetAttribLocationARB, glGetAttribLocationARB, NULL, 570),
-    NAME_FUNC_OFFSET(20065, glDrawBuffersARB, glDrawBuffersARB, NULL, 571),
-    NAME_FUNC_OFFSET(20079, glDrawBuffersARB, glDrawBuffersARB, NULL, 571),
-    NAME_FUNC_OFFSET(20096, glDrawArraysInstancedARB, glDrawArraysInstancedARB, NULL, 572),
-    NAME_FUNC_OFFSET(20121, glDrawArraysInstancedARB, glDrawArraysInstancedARB, NULL, 572),
-    NAME_FUNC_OFFSET(20143, glDrawElementsInstancedARB, glDrawElementsInstancedARB, NULL, 573),
-    NAME_FUNC_OFFSET(20170, glDrawElementsInstancedARB, glDrawElementsInstancedARB, NULL, 573),
-    NAME_FUNC_OFFSET(20194, glRenderbufferStorageMultisample, glRenderbufferStorageMultisample, NULL, 574),
-    NAME_FUNC_OFFSET(20230, gl_dispatch_stub_617, gl_dispatch_stub_617, NULL, 617),
-    NAME_FUNC_OFFSET(20246, gl_dispatch_stub_618, gl_dispatch_stub_618, NULL, 618),
-    NAME_FUNC_OFFSET(20265, glPointParameterfEXT, glPointParameterfEXT, NULL, 625),
-    NAME_FUNC_OFFSET(20283, glPointParameterfEXT, glPointParameterfEXT, NULL, 625),
-    NAME_FUNC_OFFSET(20304, glPointParameterfEXT, glPointParameterfEXT, NULL, 625),
-    NAME_FUNC_OFFSET(20326, glPointParameterfvEXT, glPointParameterfvEXT, NULL, 626),
-    NAME_FUNC_OFFSET(20345, glPointParameterfvEXT, glPointParameterfvEXT, NULL, 626),
-    NAME_FUNC_OFFSET(20367, glPointParameterfvEXT, glPointParameterfvEXT, NULL, 626),
-    NAME_FUNC_OFFSET(20390, glSecondaryColor3bEXT, glSecondaryColor3bEXT, NULL, 629),
-    NAME_FUNC_OFFSET(20409, glSecondaryColor3bvEXT, glSecondaryColor3bvEXT, NULL, 630),
-    NAME_FUNC_OFFSET(20429, glSecondaryColor3dEXT, glSecondaryColor3dEXT, NULL, 631),
-    NAME_FUNC_OFFSET(20448, glSecondaryColor3dvEXT, glSecondaryColor3dvEXT, NULL, 632),
-    NAME_FUNC_OFFSET(20468, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, 633),
-    NAME_FUNC_OFFSET(20487, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, 634),
-    NAME_FUNC_OFFSET(20507, glSecondaryColor3iEXT, glSecondaryColor3iEXT, NULL, 635),
-    NAME_FUNC_OFFSET(20526, glSecondaryColor3ivEXT, glSecondaryColor3ivEXT, NULL, 636),
-    NAME_FUNC_OFFSET(20546, glSecondaryColor3sEXT, glSecondaryColor3sEXT, NULL, 637),
-    NAME_FUNC_OFFSET(20565, glSecondaryColor3svEXT, glSecondaryColor3svEXT, NULL, 638),
-    NAME_FUNC_OFFSET(20585, glSecondaryColor3ubEXT, glSecondaryColor3ubEXT, NULL, 639),
-    NAME_FUNC_OFFSET(20605, glSecondaryColor3ubvEXT, glSecondaryColor3ubvEXT, NULL, 640),
-    NAME_FUNC_OFFSET(20626, glSecondaryColor3uiEXT, glSecondaryColor3uiEXT, NULL, 641),
-    NAME_FUNC_OFFSET(20646, glSecondaryColor3uivEXT, glSecondaryColor3uivEXT, NULL, 642),
-    NAME_FUNC_OFFSET(20667, glSecondaryColor3usEXT, glSecondaryColor3usEXT, NULL, 643),
-    NAME_FUNC_OFFSET(20687, glSecondaryColor3usvEXT, glSecondaryColor3usvEXT, NULL, 644),
-    NAME_FUNC_OFFSET(20708, glSecondaryColorPointerEXT, glSecondaryColorPointerEXT, NULL, 645),
-    NAME_FUNC_OFFSET(20732, glMultiDrawArraysEXT, glMultiDrawArraysEXT, NULL, 646),
-    NAME_FUNC_OFFSET(20750, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, 647),
-    NAME_FUNC_OFFSET(20770, glFogCoordPointerEXT, glFogCoordPointerEXT, NULL, 648),
-    NAME_FUNC_OFFSET(20788, glFogCoorddEXT, glFogCoorddEXT, NULL, 649),
-    NAME_FUNC_OFFSET(20800, glFogCoorddvEXT, glFogCoorddvEXT, NULL, 650),
-    NAME_FUNC_OFFSET(20813, glFogCoordfEXT, glFogCoordfEXT, NULL, 651),
-    NAME_FUNC_OFFSET(20825, glFogCoordfvEXT, glFogCoordfvEXT, NULL, 652),
-    NAME_FUNC_OFFSET(20838, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, 654),
-    NAME_FUNC_OFFSET(20858, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, 654),
-    NAME_FUNC_OFFSET(20882, glWindowPos2dMESA, glWindowPos2dMESA, NULL, 671),
-    NAME_FUNC_OFFSET(20896, glWindowPos2dMESA, glWindowPos2dMESA, NULL, 671),
-    NAME_FUNC_OFFSET(20913, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, 672),
-    NAME_FUNC_OFFSET(20928, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, 672),
-    NAME_FUNC_OFFSET(20946, glWindowPos2fMESA, glWindowPos2fMESA, NULL, 673),
-    NAME_FUNC_OFFSET(20960, glWindowPos2fMESA, glWindowPos2fMESA, NULL, 673),
-    NAME_FUNC_OFFSET(20977, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, 674),
-    NAME_FUNC_OFFSET(20992, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, 674),
-    NAME_FUNC_OFFSET(21010, glWindowPos2iMESA, glWindowPos2iMESA, NULL, 675),
-    NAME_FUNC_OFFSET(21024, glWindowPos2iMESA, glWindowPos2iMESA, NULL, 675),
-    NAME_FUNC_OFFSET(21041, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, 676),
-    NAME_FUNC_OFFSET(21056, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, 676),
-    NAME_FUNC_OFFSET(21074, glWindowPos2sMESA, glWindowPos2sMESA, NULL, 677),
-    NAME_FUNC_OFFSET(21088, glWindowPos2sMESA, glWindowPos2sMESA, NULL, 677),
-    NAME_FUNC_OFFSET(21105, glWindowPos2svMESA, glWindowPos2svMESA, NULL, 678),
-    NAME_FUNC_OFFSET(21120, glWindowPos2svMESA, glWindowPos2svMESA, NULL, 678),
-    NAME_FUNC_OFFSET(21138, glWindowPos3dMESA, glWindowPos3dMESA, NULL, 679),
-    NAME_FUNC_OFFSET(21152, glWindowPos3dMESA, glWindowPos3dMESA, NULL, 679),
-    NAME_FUNC_OFFSET(21169, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, 680),
-    NAME_FUNC_OFFSET(21184, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, 680),
-    NAME_FUNC_OFFSET(21202, glWindowPos3fMESA, glWindowPos3fMESA, NULL, 681),
-    NAME_FUNC_OFFSET(21216, glWindowPos3fMESA, glWindowPos3fMESA, NULL, 681),
-    NAME_FUNC_OFFSET(21233, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, 682),
-    NAME_FUNC_OFFSET(21248, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, 682),
-    NAME_FUNC_OFFSET(21266, glWindowPos3iMESA, glWindowPos3iMESA, NULL, 683),
-    NAME_FUNC_OFFSET(21280, glWindowPos3iMESA, glWindowPos3iMESA, NULL, 683),
-    NAME_FUNC_OFFSET(21297, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, 684),
-    NAME_FUNC_OFFSET(21312, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, 684),
-    NAME_FUNC_OFFSET(21330, glWindowPos3sMESA, glWindowPos3sMESA, NULL, 685),
-    NAME_FUNC_OFFSET(21344, glWindowPos3sMESA, glWindowPos3sMESA, NULL, 685),
-    NAME_FUNC_OFFSET(21361, glWindowPos3svMESA, glWindowPos3svMESA, NULL, 686),
-    NAME_FUNC_OFFSET(21376, glWindowPos3svMESA, glWindowPos3svMESA, NULL, 686),
-    NAME_FUNC_OFFSET(21394, glBindProgramNV, glBindProgramNV, NULL, 705),
-    NAME_FUNC_OFFSET(21411, glDeleteProgramsNV, glDeleteProgramsNV, NULL, 706),
-    NAME_FUNC_OFFSET(21431, glGenProgramsNV, glGenProgramsNV, NULL, 708),
-    NAME_FUNC_OFFSET(21448, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, 714),
-    NAME_FUNC_OFFSET(21474, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, 714),
-    NAME_FUNC_OFFSET(21503, glIsProgramNV, glIsProgramNV, NULL, 718),
-    NAME_FUNC_OFFSET(21518, glPointParameteriNV, glPointParameteriNV, NULL, 782),
-    NAME_FUNC_OFFSET(21536, glPointParameterivNV, glPointParameterivNV, NULL, 783),
-    NAME_FUNC_OFFSET(21555, gl_dispatch_stub_786, gl_dispatch_stub_786, NULL, 786),
-    NAME_FUNC_OFFSET(21576, gl_dispatch_stub_788, gl_dispatch_stub_788, NULL, 788),
-    NAME_FUNC_OFFSET(21592, glPrimitiveRestartIndexNV, glPrimitiveRestartIndexNV, NULL, 795),
-    NAME_FUNC_OFFSET(21616, gl_dispatch_stub_798, gl_dispatch_stub_798, NULL, 798),
-    NAME_FUNC_OFFSET(21640, gl_dispatch_stub_798, gl_dispatch_stub_798, NULL, 798),
-    NAME_FUNC_OFFSET(21667, glBindFramebufferEXT, glBindFramebufferEXT, NULL, 799),
-    NAME_FUNC_OFFSET(21685, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, 800),
-    NAME_FUNC_OFFSET(21704, glCheckFramebufferStatusEXT, glCheckFramebufferStatusEXT, NULL, 801),
-    NAME_FUNC_OFFSET(21729, glDeleteFramebuffersEXT, glDeleteFramebuffersEXT, NULL, 802),
-    NAME_FUNC_OFFSET(21750, glDeleteRenderbuffersEXT, glDeleteRenderbuffersEXT, NULL, 803),
-    NAME_FUNC_OFFSET(21772, glFramebufferRenderbufferEXT, glFramebufferRenderbufferEXT, NULL, 804),
-    NAME_FUNC_OFFSET(21798, glFramebufferTexture1DEXT, glFramebufferTexture1DEXT, NULL, 805),
-    NAME_FUNC_OFFSET(21821, glFramebufferTexture2DEXT, glFramebufferTexture2DEXT, NULL, 806),
-    NAME_FUNC_OFFSET(21844, glFramebufferTexture3DEXT, glFramebufferTexture3DEXT, NULL, 807),
-    NAME_FUNC_OFFSET(21867, glGenFramebuffersEXT, glGenFramebuffersEXT, NULL, 808),
-    NAME_FUNC_OFFSET(21885, glGenRenderbuffersEXT, glGenRenderbuffersEXT, NULL, 809),
-    NAME_FUNC_OFFSET(21904, glGenerateMipmapEXT, glGenerateMipmapEXT, NULL, 810),
-    NAME_FUNC_OFFSET(21921, glGetFramebufferAttachmentParameterivEXT, glGetFramebufferAttachmentParameterivEXT, NULL, 811),
-    NAME_FUNC_OFFSET(21959, glGetRenderbufferParameterivEXT, glGetRenderbufferParameterivEXT, NULL, 812),
-    NAME_FUNC_OFFSET(21988, glIsFramebufferEXT, glIsFramebufferEXT, NULL, 813),
-    NAME_FUNC_OFFSET(22004, glIsRenderbufferEXT, glIsRenderbufferEXT, NULL, 814),
-    NAME_FUNC_OFFSET(22021, glRenderbufferStorageEXT, glRenderbufferStorageEXT, NULL, 815),
-    NAME_FUNC_OFFSET(22043, gl_dispatch_stub_816, gl_dispatch_stub_816, NULL, 816),
-    NAME_FUNC_OFFSET(22061, glBindFragDataLocationEXT, glBindFragDataLocationEXT, NULL, 819),
-    NAME_FUNC_OFFSET(22084, glGetFragDataLocationEXT, glGetFragDataLocationEXT, NULL, 820),
-    NAME_FUNC_OFFSET(22106, glGetUniformuivEXT, glGetUniformuivEXT, NULL, 821),
-    NAME_FUNC_OFFSET(22122, glGetVertexAttribIivEXT, glGetVertexAttribIivEXT, NULL, 822),
-    NAME_FUNC_OFFSET(22143, glGetVertexAttribIuivEXT, glGetVertexAttribIuivEXT, NULL, 823),
-    NAME_FUNC_OFFSET(22165, glUniform1uiEXT, glUniform1uiEXT, NULL, 824),
-    NAME_FUNC_OFFSET(22178, glUniform1uivEXT, glUniform1uivEXT, NULL, 825),
-    NAME_FUNC_OFFSET(22192, glUniform2uiEXT, glUniform2uiEXT, NULL, 826),
-    NAME_FUNC_OFFSET(22205, glUniform2uivEXT, glUniform2uivEXT, NULL, 827),
-    NAME_FUNC_OFFSET(22219, glUniform3uiEXT, glUniform3uiEXT, NULL, 828),
-    NAME_FUNC_OFFSET(22232, glUniform3uivEXT, glUniform3uivEXT, NULL, 829),
-    NAME_FUNC_OFFSET(22246, glUniform4uiEXT, glUniform4uiEXT, NULL, 830),
-    NAME_FUNC_OFFSET(22259, glUniform4uivEXT, glUniform4uivEXT, NULL, 831),
-    NAME_FUNC_OFFSET(22273, glVertexAttribI1iEXT, glVertexAttribI1iEXT, NULL, 832),
-    NAME_FUNC_OFFSET(22291, glVertexAttribI1ivEXT, glVertexAttribI1ivEXT, NULL, 833),
-    NAME_FUNC_OFFSET(22310, glVertexAttribI1uiEXT, glVertexAttribI1uiEXT, NULL, 834),
-    NAME_FUNC_OFFSET(22329, glVertexAttribI1uivEXT, glVertexAttribI1uivEXT, NULL, 835),
-    NAME_FUNC_OFFSET(22349, glVertexAttribI2iEXT, glVertexAttribI2iEXT, NULL, 836),
-    NAME_FUNC_OFFSET(22367, glVertexAttribI2ivEXT, glVertexAttribI2ivEXT, NULL, 837),
-    NAME_FUNC_OFFSET(22386, glVertexAttribI2uiEXT, glVertexAttribI2uiEXT, NULL, 838),
-    NAME_FUNC_OFFSET(22405, glVertexAttribI2uivEXT, glVertexAttribI2uivEXT, NULL, 839),
-    NAME_FUNC_OFFSET(22425, glVertexAttribI3iEXT, glVertexAttribI3iEXT, NULL, 840),
-    NAME_FUNC_OFFSET(22443, glVertexAttribI3ivEXT, glVertexAttribI3ivEXT, NULL, 841),
-    NAME_FUNC_OFFSET(22462, glVertexAttribI3uiEXT, glVertexAttribI3uiEXT, NULL, 842),
-    NAME_FUNC_OFFSET(22481, glVertexAttribI3uivEXT, glVertexAttribI3uivEXT, NULL, 843),
-    NAME_FUNC_OFFSET(22501, glVertexAttribI4bvEXT, glVertexAttribI4bvEXT, NULL, 844),
-    NAME_FUNC_OFFSET(22520, glVertexAttribI4iEXT, glVertexAttribI4iEXT, NULL, 845),
-    NAME_FUNC_OFFSET(22538, glVertexAttribI4ivEXT, glVertexAttribI4ivEXT, NULL, 846),
-    NAME_FUNC_OFFSET(22557, glVertexAttribI4svEXT, glVertexAttribI4svEXT, NULL, 847),
-    NAME_FUNC_OFFSET(22576, glVertexAttribI4ubvEXT, glVertexAttribI4ubvEXT, NULL, 848),
-    NAME_FUNC_OFFSET(22596, glVertexAttribI4uiEXT, glVertexAttribI4uiEXT, NULL, 849),
-    NAME_FUNC_OFFSET(22615, glVertexAttribI4uivEXT, glVertexAttribI4uivEXT, NULL, 850),
-    NAME_FUNC_OFFSET(22635, glVertexAttribI4usvEXT, glVertexAttribI4usvEXT, NULL, 851),
-    NAME_FUNC_OFFSET(22655, glVertexAttribIPointerEXT, glVertexAttribIPointerEXT, NULL, 852),
-    NAME_FUNC_OFFSET(22678, glFramebufferTextureLayerEXT, glFramebufferTextureLayerEXT, NULL, 853),
-    NAME_FUNC_OFFSET(22704, glColorMaskIndexedEXT, glColorMaskIndexedEXT, NULL, 854),
-    NAME_FUNC_OFFSET(22717, glDisableIndexedEXT, glDisableIndexedEXT, NULL, 855),
-    NAME_FUNC_OFFSET(22728, glEnableIndexedEXT, glEnableIndexedEXT, NULL, 856),
-    NAME_FUNC_OFFSET(22738, glGetBooleanIndexedvEXT, glGetBooleanIndexedvEXT, NULL, 857),
-    NAME_FUNC_OFFSET(22754, glGetIntegerIndexedvEXT, glGetIntegerIndexedvEXT, NULL, 858),
-    NAME_FUNC_OFFSET(22770, glIsEnabledIndexedEXT, glIsEnabledIndexedEXT, NULL, 859),
-    NAME_FUNC_OFFSET(22783, glGetTexParameterIivEXT, glGetTexParameterIivEXT, NULL, 862),
-    NAME_FUNC_OFFSET(22804, glGetTexParameterIuivEXT, glGetTexParameterIuivEXT, NULL, 863),
-    NAME_FUNC_OFFSET(22826, glTexParameterIivEXT, glTexParameterIivEXT, NULL, 864),
-    NAME_FUNC_OFFSET(22844, glTexParameterIuivEXT, glTexParameterIuivEXT, NULL, 865),
-    NAME_FUNC_OFFSET(22863, glBeginConditionalRenderNV, glBeginConditionalRenderNV, NULL, 866),
-    NAME_FUNC_OFFSET(22888, glEndConditionalRenderNV, glEndConditionalRenderNV, NULL, 867),
-    NAME_FUNC_OFFSET(22911, glBeginTransformFeedbackEXT, glBeginTransformFeedbackEXT, NULL, 868),
-    NAME_FUNC_OFFSET(22936, glBindBufferBaseEXT, glBindBufferBaseEXT, NULL, 869),
-    NAME_FUNC_OFFSET(22953, glBindBufferRangeEXT, glBindBufferRangeEXT, NULL, 871),
-    NAME_FUNC_OFFSET(22971, glEndTransformFeedbackEXT, glEndTransformFeedbackEXT, NULL, 872),
-    NAME_FUNC_OFFSET(22994, glGetTransformFeedbackVaryingEXT, glGetTransformFeedbackVaryingEXT, NULL, 873),
-    NAME_FUNC_OFFSET(23024, glTransformFeedbackVaryingsEXT, glTransformFeedbackVaryingsEXT, NULL, 874),
-    NAME_FUNC_OFFSET(23052, glProvokingVertexEXT, glProvokingVertexEXT, NULL, 875),
+    NAME_FUNC_OFFSET( 9140, glClampColorARB, glClampColorARB, NULL, 572),
+    NAME_FUNC_OFFSET( 9156, glDrawArraysInstancedARB, glDrawArraysInstancedARB, NULL, 573),
+    NAME_FUNC_OFFSET( 9181, glDrawElementsInstancedARB, glDrawElementsInstancedARB, NULL, 574),
+    NAME_FUNC_OFFSET( 9208, glRenderbufferStorageMultisample, glRenderbufferStorageMultisample, NULL, 575),
+    NAME_FUNC_OFFSET( 9241, glFramebufferTextureARB, glFramebufferTextureARB, NULL, 576),
+    NAME_FUNC_OFFSET( 9265, glFramebufferTextureFaceARB, glFramebufferTextureFaceARB, NULL, 577),
+    NAME_FUNC_OFFSET( 9293, glProgramParameteriARB, glProgramParameteriARB, NULL, 578),
+    NAME_FUNC_OFFSET( 9316, glVertexAttribDivisorARB, glVertexAttribDivisorARB, NULL, 579),
+    NAME_FUNC_OFFSET( 9341, glFlushMappedBufferRange, glFlushMappedBufferRange, NULL, 580),
+    NAME_FUNC_OFFSET( 9366, glMapBufferRange, glMapBufferRange, NULL, 581),
+    NAME_FUNC_OFFSET( 9383, glTexBufferARB, glTexBufferARB, NULL, 582),
+    NAME_FUNC_OFFSET( 9398, glBindVertexArray, glBindVertexArray, NULL, 583),
+    NAME_FUNC_OFFSET( 9416, glGenVertexArrays, glGenVertexArrays, NULL, 584),
+    NAME_FUNC_OFFSET( 9434, glCopyBufferSubData, glCopyBufferSubData, NULL, 585),
+    NAME_FUNC_OFFSET( 9454, glClientWaitSync, glClientWaitSync, NULL, 586),
+    NAME_FUNC_OFFSET( 9471, glDeleteSync, glDeleteSync, NULL, 587),
+    NAME_FUNC_OFFSET( 9484, glFenceSync, glFenceSync, NULL, 588),
+    NAME_FUNC_OFFSET( 9496, glGetInteger64v, glGetInteger64v, NULL, 589),
+    NAME_FUNC_OFFSET( 9512, glGetSynciv, glGetSynciv, NULL, 590),
+    NAME_FUNC_OFFSET( 9524, glIsSync, glIsSync, NULL, 591),
+    NAME_FUNC_OFFSET( 9533, glWaitSync, glWaitSync, NULL, 592),
+    NAME_FUNC_OFFSET( 9544, glDrawElementsBaseVertex, glDrawElementsBaseVertex, NULL, 593),
+    NAME_FUNC_OFFSET( 9569, glDrawRangeElementsBaseVertex, glDrawRangeElementsBaseVertex, NULL, 594),
+    NAME_FUNC_OFFSET( 9599, glMultiDrawElementsBaseVertex, glMultiDrawElementsBaseVertex, NULL, 595),
+    NAME_FUNC_OFFSET( 9629, glBlendEquationSeparateiARB, glBlendEquationSeparateiARB, NULL, 596),
+    NAME_FUNC_OFFSET( 9657, glBlendEquationiARB, glBlendEquationiARB, NULL, 597),
+    NAME_FUNC_OFFSET( 9677, glBlendFuncSeparateiARB, glBlendFuncSeparateiARB, NULL, 598),
+    NAME_FUNC_OFFSET( 9701, glBlendFunciARB, glBlendFunciARB, NULL, 599),
+    NAME_FUNC_OFFSET( 9717, glBindSampler, glBindSampler, NULL, 600),
+    NAME_FUNC_OFFSET( 9731, glDeleteSamplers, glDeleteSamplers, NULL, 601),
+    NAME_FUNC_OFFSET( 9748, glGenSamplers, glGenSamplers, NULL, 602),
+    NAME_FUNC_OFFSET( 9762, glGetSamplerParameterIiv, glGetSamplerParameterIiv, NULL, 603),
+    NAME_FUNC_OFFSET( 9787, glGetSamplerParameterIuiv, glGetSamplerParameterIuiv, NULL, 604),
+    NAME_FUNC_OFFSET( 9813, glGetSamplerParameterfv, glGetSamplerParameterfv, NULL, 605),
+    NAME_FUNC_OFFSET( 9837, glGetSamplerParameteriv, glGetSamplerParameteriv, NULL, 606),
+    NAME_FUNC_OFFSET( 9861, glIsSampler, glIsSampler, NULL, 607),
+    NAME_FUNC_OFFSET( 9873, glSamplerParameterIiv, glSamplerParameterIiv, NULL, 608),
+    NAME_FUNC_OFFSET( 9895, glSamplerParameterIuiv, glSamplerParameterIuiv, NULL, 609),
+    NAME_FUNC_OFFSET( 9918, glSamplerParameterf, glSamplerParameterf, NULL, 610),
+    NAME_FUNC_OFFSET( 9938, glSamplerParameterfv, glSamplerParameterfv, NULL, 611),
+    NAME_FUNC_OFFSET( 9959, glSamplerParameteri, glSamplerParameteri, NULL, 612),
+    NAME_FUNC_OFFSET( 9979, glSamplerParameteriv, glSamplerParameteriv, NULL, 613),
+    NAME_FUNC_OFFSET(10000, glBindTransformFeedback, glBindTransformFeedback, NULL, 614),
+    NAME_FUNC_OFFSET(10024, glDeleteTransformFeedbacks, glDeleteTransformFeedbacks, NULL, 615),
+    NAME_FUNC_OFFSET(10051, glDrawTransformFeedback, glDrawTransformFeedback, NULL, 616),
+    NAME_FUNC_OFFSET(10075, glGenTransformFeedbacks, glGenTransformFeedbacks, NULL, 617),
+    NAME_FUNC_OFFSET(10099, glIsTransformFeedback, glIsTransformFeedback, NULL, 618),
+    NAME_FUNC_OFFSET(10121, glPauseTransformFeedback, glPauseTransformFeedback, NULL, 619),
+    NAME_FUNC_OFFSET(10146, glResumeTransformFeedback, glResumeTransformFeedback, NULL, 620),
+    NAME_FUNC_OFFSET(10172, glClearDepthf, glClearDepthf, NULL, 621),
+    NAME_FUNC_OFFSET(10186, glDepthRangef, glDepthRangef, NULL, 622),
+    NAME_FUNC_OFFSET(10200, glGetShaderPrecisionFormat, glGetShaderPrecisionFormat, NULL, 623),
+    NAME_FUNC_OFFSET(10227, glReleaseShaderCompiler, glReleaseShaderCompiler, NULL, 624),
+    NAME_FUNC_OFFSET(10251, glShaderBinary, glShaderBinary, NULL, 625),
+    NAME_FUNC_OFFSET(10266, glPolygonOffsetEXT, glPolygonOffsetEXT, NULL, 626),
+    NAME_FUNC_OFFSET(10285, gl_dispatch_stub_627, gl_dispatch_stub_627, NULL, 627),
+    NAME_FUNC_OFFSET(10317, gl_dispatch_stub_628, gl_dispatch_stub_628, NULL, 628),
+    NAME_FUNC_OFFSET(10349, gl_dispatch_stub_629, gl_dispatch_stub_629, NULL, 629),
+    NAME_FUNC_OFFSET(10377, gl_dispatch_stub_630, gl_dispatch_stub_630, NULL, 630),
+    NAME_FUNC_OFFSET(10406, gl_dispatch_stub_631, gl_dispatch_stub_631, NULL, 631),
+    NAME_FUNC_OFFSET(10434, gl_dispatch_stub_632, gl_dispatch_stub_632, NULL, 632),
+    NAME_FUNC_OFFSET(10463, gl_dispatch_stub_633, gl_dispatch_stub_633, NULL, 633),
+    NAME_FUNC_OFFSET(10480, gl_dispatch_stub_634, gl_dispatch_stub_634, NULL, 634),
+    NAME_FUNC_OFFSET(10500, glColorPointerEXT, glColorPointerEXT, NULL, 635),
+    NAME_FUNC_OFFSET(10518, glEdgeFlagPointerEXT, glEdgeFlagPointerEXT, NULL, 636),
+    NAME_FUNC_OFFSET(10539, glIndexPointerEXT, glIndexPointerEXT, NULL, 637),
+    NAME_FUNC_OFFSET(10557, glNormalPointerEXT, glNormalPointerEXT, NULL, 638),
+    NAME_FUNC_OFFSET(10576, glTexCoordPointerEXT, glTexCoordPointerEXT, NULL, 639),
+    NAME_FUNC_OFFSET(10597, glVertexPointerEXT, glVertexPointerEXT, NULL, 640),
+    NAME_FUNC_OFFSET(10616, glPointParameterfEXT, glPointParameterfEXT, NULL, 641),
+    NAME_FUNC_OFFSET(10637, glPointParameterfvEXT, glPointParameterfvEXT, NULL, 642),
+    NAME_FUNC_OFFSET(10659, glLockArraysEXT, glLockArraysEXT, NULL, 643),
+    NAME_FUNC_OFFSET(10675, glUnlockArraysEXT, glUnlockArraysEXT, NULL, 644),
+    NAME_FUNC_OFFSET(10693, glSecondaryColor3bEXT, glSecondaryColor3bEXT, NULL, 645),
+    NAME_FUNC_OFFSET(10715, glSecondaryColor3bvEXT, glSecondaryColor3bvEXT, NULL, 646),
+    NAME_FUNC_OFFSET(10738, glSecondaryColor3dEXT, glSecondaryColor3dEXT, NULL, 647),
+    NAME_FUNC_OFFSET(10760, glSecondaryColor3dvEXT, glSecondaryColor3dvEXT, NULL, 648),
+    NAME_FUNC_OFFSET(10783, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, 649),
+    NAME_FUNC_OFFSET(10805, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, 650),
+    NAME_FUNC_OFFSET(10828, glSecondaryColor3iEXT, glSecondaryColor3iEXT, NULL, 651),
+    NAME_FUNC_OFFSET(10850, glSecondaryColor3ivEXT, glSecondaryColor3ivEXT, NULL, 652),
+    NAME_FUNC_OFFSET(10873, glSecondaryColor3sEXT, glSecondaryColor3sEXT, NULL, 653),
+    NAME_FUNC_OFFSET(10895, glSecondaryColor3svEXT, glSecondaryColor3svEXT, NULL, 654),
+    NAME_FUNC_OFFSET(10918, glSecondaryColor3ubEXT, glSecondaryColor3ubEXT, NULL, 655),
+    NAME_FUNC_OFFSET(10941, glSecondaryColor3ubvEXT, glSecondaryColor3ubvEXT, NULL, 656),
+    NAME_FUNC_OFFSET(10965, glSecondaryColor3uiEXT, glSecondaryColor3uiEXT, NULL, 657),
+    NAME_FUNC_OFFSET(10988, glSecondaryColor3uivEXT, glSecondaryColor3uivEXT, NULL, 658),
+    NAME_FUNC_OFFSET(11012, glSecondaryColor3usEXT, glSecondaryColor3usEXT, NULL, 659),
+    NAME_FUNC_OFFSET(11035, glSecondaryColor3usvEXT, glSecondaryColor3usvEXT, NULL, 660),
+    NAME_FUNC_OFFSET(11059, glSecondaryColorPointerEXT, glSecondaryColorPointerEXT, NULL, 661),
+    NAME_FUNC_OFFSET(11086, glMultiDrawArraysEXT, glMultiDrawArraysEXT, NULL, 662),
+    NAME_FUNC_OFFSET(11107, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, 663),
+    NAME_FUNC_OFFSET(11130, glFogCoordPointerEXT, glFogCoordPointerEXT, NULL, 664),
+    NAME_FUNC_OFFSET(11151, glFogCoorddEXT, glFogCoorddEXT, NULL, 665),
+    NAME_FUNC_OFFSET(11166, glFogCoorddvEXT, glFogCoorddvEXT, NULL, 666),
+    NAME_FUNC_OFFSET(11182, glFogCoordfEXT, glFogCoordfEXT, NULL, 667),
+    NAME_FUNC_OFFSET(11197, glFogCoordfvEXT, glFogCoordfvEXT, NULL, 668),
+    NAME_FUNC_OFFSET(11213, gl_dispatch_stub_669, gl_dispatch_stub_669, NULL, 669),
+    NAME_FUNC_OFFSET(11231, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, 670),
+    NAME_FUNC_OFFSET(11254, glFlushVertexArrayRangeNV, glFlushVertexArrayRangeNV, NULL, 671),
+    NAME_FUNC_OFFSET(11280, glVertexArrayRangeNV, glVertexArrayRangeNV, NULL, 672),
+    NAME_FUNC_OFFSET(11301, glCombinerInputNV, glCombinerInputNV, NULL, 673),
+    NAME_FUNC_OFFSET(11319, glCombinerOutputNV, glCombinerOutputNV, NULL, 674),
+    NAME_FUNC_OFFSET(11338, glCombinerParameterfNV, glCombinerParameterfNV, NULL, 675),
+    NAME_FUNC_OFFSET(11361, glCombinerParameterfvNV, glCombinerParameterfvNV, NULL, 676),
+    NAME_FUNC_OFFSET(11385, glCombinerParameteriNV, glCombinerParameteriNV, NULL, 677),
+    NAME_FUNC_OFFSET(11408, glCombinerParameterivNV, glCombinerParameterivNV, NULL, 678),
+    NAME_FUNC_OFFSET(11432, glFinalCombinerInputNV, glFinalCombinerInputNV, NULL, 679),
+    NAME_FUNC_OFFSET(11455, glGetCombinerInputParameterfvNV, glGetCombinerInputParameterfvNV, NULL, 680),
+    NAME_FUNC_OFFSET(11487, glGetCombinerInputParameterivNV, glGetCombinerInputParameterivNV, NULL, 681),
+    NAME_FUNC_OFFSET(11519, glGetCombinerOutputParameterfvNV, glGetCombinerOutputParameterfvNV, NULL, 682),
+    NAME_FUNC_OFFSET(11552, glGetCombinerOutputParameterivNV, glGetCombinerOutputParameterivNV, NULL, 683),
+    NAME_FUNC_OFFSET(11585, glGetFinalCombinerInputParameterfvNV, glGetFinalCombinerInputParameterfvNV, NULL, 684),
+    NAME_FUNC_OFFSET(11622, glGetFinalCombinerInputParameterivNV, glGetFinalCombinerInputParameterivNV, NULL, 685),
+    NAME_FUNC_OFFSET(11659, glResizeBuffersMESA, glResizeBuffersMESA, NULL, 686),
+    NAME_FUNC_OFFSET(11679, glWindowPos2dMESA, glWindowPos2dMESA, NULL, 687),
+    NAME_FUNC_OFFSET(11697, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, 688),
+    NAME_FUNC_OFFSET(11716, glWindowPos2fMESA, glWindowPos2fMESA, NULL, 689),
+    NAME_FUNC_OFFSET(11734, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, 690),
+    NAME_FUNC_OFFSET(11753, glWindowPos2iMESA, glWindowPos2iMESA, NULL, 691),
+    NAME_FUNC_OFFSET(11771, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, 692),
+    NAME_FUNC_OFFSET(11790, glWindowPos2sMESA, glWindowPos2sMESA, NULL, 693),
+    NAME_FUNC_OFFSET(11808, glWindowPos2svMESA, glWindowPos2svMESA, NULL, 694),
+    NAME_FUNC_OFFSET(11827, glWindowPos3dMESA, glWindowPos3dMESA, NULL, 695),
+    NAME_FUNC_OFFSET(11845, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, 696),
+    NAME_FUNC_OFFSET(11864, glWindowPos3fMESA, glWindowPos3fMESA, NULL, 697),
+    NAME_FUNC_OFFSET(11882, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, 698),
+    NAME_FUNC_OFFSET(11901, glWindowPos3iMESA, glWindowPos3iMESA, NULL, 699),
+    NAME_FUNC_OFFSET(11919, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, 700),
+    NAME_FUNC_OFFSET(11938, glWindowPos3sMESA, glWindowPos3sMESA, NULL, 701),
+    NAME_FUNC_OFFSET(11956, glWindowPos3svMESA, glWindowPos3svMESA, NULL, 702),
+    NAME_FUNC_OFFSET(11975, glWindowPos4dMESA, glWindowPos4dMESA, NULL, 703),
+    NAME_FUNC_OFFSET(11993, glWindowPos4dvMESA, glWindowPos4dvMESA, NULL, 704),
+    NAME_FUNC_OFFSET(12012, glWindowPos4fMESA, glWindowPos4fMESA, NULL, 705),
+    NAME_FUNC_OFFSET(12030, glWindowPos4fvMESA, glWindowPos4fvMESA, NULL, 706),
+    NAME_FUNC_OFFSET(12049, glWindowPos4iMESA, glWindowPos4iMESA, NULL, 707),
+    NAME_FUNC_OFFSET(12067, glWindowPos4ivMESA, glWindowPos4ivMESA, NULL, 708),
+    NAME_FUNC_OFFSET(12086, glWindowPos4sMESA, glWindowPos4sMESA, NULL, 709),
+    NAME_FUNC_OFFSET(12104, glWindowPos4svMESA, glWindowPos4svMESA, NULL, 710),
+    NAME_FUNC_OFFSET(12123, gl_dispatch_stub_711, gl_dispatch_stub_711, NULL, 711),
+    NAME_FUNC_OFFSET(12148, gl_dispatch_stub_712, gl_dispatch_stub_712, NULL, 712),
+    NAME_FUNC_OFFSET(12175, gl_dispatch_stub_713, gl_dispatch_stub_713, NULL, 713),
+    NAME_FUNC_OFFSET(12192, gl_dispatch_stub_714, gl_dispatch_stub_714, NULL, 714),
+    NAME_FUNC_OFFSET(12208, gl_dispatch_stub_715, gl_dispatch_stub_715, NULL, 715),
+    NAME_FUNC_OFFSET(12222, gl_dispatch_stub_716, gl_dispatch_stub_716, NULL, 716),
+    NAME_FUNC_OFFSET(12237, gl_dispatch_stub_717, gl_dispatch_stub_717, NULL, 717),
+    NAME_FUNC_OFFSET(12249, gl_dispatch_stub_718, gl_dispatch_stub_718, NULL, 718),
+    NAME_FUNC_OFFSET(12262, gl_dispatch_stub_719, gl_dispatch_stub_719, NULL, 719),
+    NAME_FUNC_OFFSET(12276, glAreProgramsResidentNV, glAreProgramsResidentNV, NULL, 720),
+    NAME_FUNC_OFFSET(12300, glBindProgramNV, glBindProgramNV, NULL, 721),
+    NAME_FUNC_OFFSET(12316, glDeleteProgramsNV, glDeleteProgramsNV, NULL, 722),
+    NAME_FUNC_OFFSET(12335, glExecuteProgramNV, glExecuteProgramNV, NULL, 723),
+    NAME_FUNC_OFFSET(12354, glGenProgramsNV, glGenProgramsNV, NULL, 724),
+    NAME_FUNC_OFFSET(12370, glGetProgramParameterdvNV, glGetProgramParameterdvNV, NULL, 725),
+    NAME_FUNC_OFFSET(12396, glGetProgramParameterfvNV, glGetProgramParameterfvNV, NULL, 726),
+    NAME_FUNC_OFFSET(12422, glGetProgramStringNV, glGetProgramStringNV, NULL, 727),
+    NAME_FUNC_OFFSET(12443, glGetProgramivNV, glGetProgramivNV, NULL, 728),
+    NAME_FUNC_OFFSET(12460, glGetTrackMatrixivNV, glGetTrackMatrixivNV, NULL, 729),
+    NAME_FUNC_OFFSET(12481, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, 730),
+    NAME_FUNC_OFFSET(12509, glGetVertexAttribdvNV, glGetVertexAttribdvNV, NULL, 731),
+    NAME_FUNC_OFFSET(12531, glGetVertexAttribfvNV, glGetVertexAttribfvNV, NULL, 732),
+    NAME_FUNC_OFFSET(12553, glGetVertexAttribivNV, glGetVertexAttribivNV, NULL, 733),
+    NAME_FUNC_OFFSET(12575, glIsProgramNV, glIsProgramNV, NULL, 734),
+    NAME_FUNC_OFFSET(12589, glLoadProgramNV, glLoadProgramNV, NULL, 735),
+    NAME_FUNC_OFFSET(12605, glProgramParameters4dvNV, glProgramParameters4dvNV, NULL, 736),
+    NAME_FUNC_OFFSET(12630, glProgramParameters4fvNV, glProgramParameters4fvNV, NULL, 737),
+    NAME_FUNC_OFFSET(12655, glRequestResidentProgramsNV, glRequestResidentProgramsNV, NULL, 738),
+    NAME_FUNC_OFFSET(12683, glTrackMatrixNV, glTrackMatrixNV, NULL, 739),
+    NAME_FUNC_OFFSET(12699, glVertexAttrib1dNV, glVertexAttrib1dNV, NULL, 740),
+    NAME_FUNC_OFFSET(12718, glVertexAttrib1dvNV, glVertexAttrib1dvNV, NULL, 741),
+    NAME_FUNC_OFFSET(12738, glVertexAttrib1fNV, glVertexAttrib1fNV, NULL, 742),
+    NAME_FUNC_OFFSET(12757, glVertexAttrib1fvNV, glVertexAttrib1fvNV, NULL, 743),
+    NAME_FUNC_OFFSET(12777, glVertexAttrib1sNV, glVertexAttrib1sNV, NULL, 744),
+    NAME_FUNC_OFFSET(12796, glVertexAttrib1svNV, glVertexAttrib1svNV, NULL, 745),
+    NAME_FUNC_OFFSET(12816, glVertexAttrib2dNV, glVertexAttrib2dNV, NULL, 746),
+    NAME_FUNC_OFFSET(12835, glVertexAttrib2dvNV, glVertexAttrib2dvNV, NULL, 747),
+    NAME_FUNC_OFFSET(12855, glVertexAttrib2fNV, glVertexAttrib2fNV, NULL, 748),
+    NAME_FUNC_OFFSET(12874, glVertexAttrib2fvNV, glVertexAttrib2fvNV, NULL, 749),
+    NAME_FUNC_OFFSET(12894, glVertexAttrib2sNV, glVertexAttrib2sNV, NULL, 750),
+    NAME_FUNC_OFFSET(12913, glVertexAttrib2svNV, glVertexAttrib2svNV, NULL, 751),
+    NAME_FUNC_OFFSET(12933, glVertexAttrib3dNV, glVertexAttrib3dNV, NULL, 752),
+    NAME_FUNC_OFFSET(12952, glVertexAttrib3dvNV, glVertexAttrib3dvNV, NULL, 753),
+    NAME_FUNC_OFFSET(12972, glVertexAttrib3fNV, glVertexAttrib3fNV, NULL, 754),
+    NAME_FUNC_OFFSET(12991, glVertexAttrib3fvNV, glVertexAttrib3fvNV, NULL, 755),
+    NAME_FUNC_OFFSET(13011, glVertexAttrib3sNV, glVertexAttrib3sNV, NULL, 756),
+    NAME_FUNC_OFFSET(13030, glVertexAttrib3svNV, glVertexAttrib3svNV, NULL, 757),
+    NAME_FUNC_OFFSET(13050, glVertexAttrib4dNV, glVertexAttrib4dNV, NULL, 758),
+    NAME_FUNC_OFFSET(13069, glVertexAttrib4dvNV, glVertexAttrib4dvNV, NULL, 759),
+    NAME_FUNC_OFFSET(13089, glVertexAttrib4fNV, glVertexAttrib4fNV, NULL, 760),
+    NAME_FUNC_OFFSET(13108, glVertexAttrib4fvNV, glVertexAttrib4fvNV, NULL, 761),
+    NAME_FUNC_OFFSET(13128, glVertexAttrib4sNV, glVertexAttrib4sNV, NULL, 762),
+    NAME_FUNC_OFFSET(13147, glVertexAttrib4svNV, glVertexAttrib4svNV, NULL, 763),
+    NAME_FUNC_OFFSET(13167, glVertexAttrib4ubNV, glVertexAttrib4ubNV, NULL, 764),
+    NAME_FUNC_OFFSET(13187, glVertexAttrib4ubvNV, glVertexAttrib4ubvNV, NULL, 765),
+    NAME_FUNC_OFFSET(13208, glVertexAttribPointerNV, glVertexAttribPointerNV, NULL, 766),
+    NAME_FUNC_OFFSET(13232, glVertexAttribs1dvNV, glVertexAttribs1dvNV, NULL, 767),
+    NAME_FUNC_OFFSET(13253, glVertexAttribs1fvNV, glVertexAttribs1fvNV, NULL, 768),
+    NAME_FUNC_OFFSET(13274, glVertexAttribs1svNV, glVertexAttribs1svNV, NULL, 769),
+    NAME_FUNC_OFFSET(13295, glVertexAttribs2dvNV, glVertexAttribs2dvNV, NULL, 770),
+    NAME_FUNC_OFFSET(13316, glVertexAttribs2fvNV, glVertexAttribs2fvNV, NULL, 771),
+    NAME_FUNC_OFFSET(13337, glVertexAttribs2svNV, glVertexAttribs2svNV, NULL, 772),
+    NAME_FUNC_OFFSET(13358, glVertexAttribs3dvNV, glVertexAttribs3dvNV, NULL, 773),
+    NAME_FUNC_OFFSET(13379, glVertexAttribs3fvNV, glVertexAttribs3fvNV, NULL, 774),
+    NAME_FUNC_OFFSET(13400, glVertexAttribs3svNV, glVertexAttribs3svNV, NULL, 775),
+    NAME_FUNC_OFFSET(13421, glVertexAttribs4dvNV, glVertexAttribs4dvNV, NULL, 776),
+    NAME_FUNC_OFFSET(13442, glVertexAttribs4fvNV, glVertexAttribs4fvNV, NULL, 777),
+    NAME_FUNC_OFFSET(13463, glVertexAttribs4svNV, glVertexAttribs4svNV, NULL, 778),
+    NAME_FUNC_OFFSET(13484, glVertexAttribs4ubvNV, glVertexAttribs4ubvNV, NULL, 779),
+    NAME_FUNC_OFFSET(13506, glGetTexBumpParameterfvATI, glGetTexBumpParameterfvATI, NULL, 780),
+    NAME_FUNC_OFFSET(13533, glGetTexBumpParameterivATI, glGetTexBumpParameterivATI, NULL, 781),
+    NAME_FUNC_OFFSET(13560, glTexBumpParameterfvATI, glTexBumpParameterfvATI, NULL, 782),
+    NAME_FUNC_OFFSET(13584, glTexBumpParameterivATI, glTexBumpParameterivATI, NULL, 783),
+    NAME_FUNC_OFFSET(13608, glAlphaFragmentOp1ATI, glAlphaFragmentOp1ATI, NULL, 784),
+    NAME_FUNC_OFFSET(13630, glAlphaFragmentOp2ATI, glAlphaFragmentOp2ATI, NULL, 785),
+    NAME_FUNC_OFFSET(13652, glAlphaFragmentOp3ATI, glAlphaFragmentOp3ATI, NULL, 786),
+    NAME_FUNC_OFFSET(13674, glBeginFragmentShaderATI, glBeginFragmentShaderATI, NULL, 787),
+    NAME_FUNC_OFFSET(13699, glBindFragmentShaderATI, glBindFragmentShaderATI, NULL, 788),
+    NAME_FUNC_OFFSET(13723, glColorFragmentOp1ATI, glColorFragmentOp1ATI, NULL, 789),
+    NAME_FUNC_OFFSET(13745, glColorFragmentOp2ATI, glColorFragmentOp2ATI, NULL, 790),
+    NAME_FUNC_OFFSET(13767, glColorFragmentOp3ATI, glColorFragmentOp3ATI, NULL, 791),
+    NAME_FUNC_OFFSET(13789, glDeleteFragmentShaderATI, glDeleteFragmentShaderATI, NULL, 792),
+    NAME_FUNC_OFFSET(13815, glEndFragmentShaderATI, glEndFragmentShaderATI, NULL, 793),
+    NAME_FUNC_OFFSET(13838, glGenFragmentShadersATI, glGenFragmentShadersATI, NULL, 794),
+    NAME_FUNC_OFFSET(13862, glPassTexCoordATI, glPassTexCoordATI, NULL, 795),
+    NAME_FUNC_OFFSET(13880, glSampleMapATI, glSampleMapATI, NULL, 796),
+    NAME_FUNC_OFFSET(13895, glSetFragmentShaderConstantATI, glSetFragmentShaderConstantATI, NULL, 797),
+    NAME_FUNC_OFFSET(13926, glPointParameteriNV, glPointParameteriNV, NULL, 798),
+    NAME_FUNC_OFFSET(13946, glPointParameterivNV, glPointParameterivNV, NULL, 799),
+    NAME_FUNC_OFFSET(13967, gl_dispatch_stub_800, gl_dispatch_stub_800, NULL, 800),
+    NAME_FUNC_OFFSET(13990, gl_dispatch_stub_801, gl_dispatch_stub_801, NULL, 801),
+    NAME_FUNC_OFFSET(14013, gl_dispatch_stub_802, gl_dispatch_stub_802, NULL, 802),
+    NAME_FUNC_OFFSET(14039, gl_dispatch_stub_803, gl_dispatch_stub_803, NULL, 803),
+    NAME_FUNC_OFFSET(14062, gl_dispatch_stub_804, gl_dispatch_stub_804, NULL, 804),
+    NAME_FUNC_OFFSET(14083, glGetProgramNamedParameterdvNV, glGetProgramNamedParameterdvNV, NULL, 805),
+    NAME_FUNC_OFFSET(14114, glGetProgramNamedParameterfvNV, glGetProgramNamedParameterfvNV, NULL, 806),
+    NAME_FUNC_OFFSET(14145, glProgramNamedParameter4dNV, glProgramNamedParameter4dNV, NULL, 807),
+    NAME_FUNC_OFFSET(14173, glProgramNamedParameter4dvNV, glProgramNamedParameter4dvNV, NULL, 808),
+    NAME_FUNC_OFFSET(14202, glProgramNamedParameter4fNV, glProgramNamedParameter4fNV, NULL, 809),
+    NAME_FUNC_OFFSET(14230, glProgramNamedParameter4fvNV, glProgramNamedParameter4fvNV, NULL, 810),
+    NAME_FUNC_OFFSET(14259, glPrimitiveRestartIndexNV, glPrimitiveRestartIndexNV, NULL, 811),
+    NAME_FUNC_OFFSET(14285, glPrimitiveRestartNV, glPrimitiveRestartNV, NULL, 812),
+    NAME_FUNC_OFFSET(14306, gl_dispatch_stub_813, gl_dispatch_stub_813, NULL, 813),
+    NAME_FUNC_OFFSET(14323, gl_dispatch_stub_814, gl_dispatch_stub_814, NULL, 814),
+    NAME_FUNC_OFFSET(14350, glBindFramebufferEXT, glBindFramebufferEXT, NULL, 815),
+    NAME_FUNC_OFFSET(14371, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, 816),
+    NAME_FUNC_OFFSET(14393, glCheckFramebufferStatusEXT, glCheckFramebufferStatusEXT, NULL, 817),
+    NAME_FUNC_OFFSET(14421, glDeleteFramebuffersEXT, glDeleteFramebuffersEXT, NULL, 818),
+    NAME_FUNC_OFFSET(14445, glDeleteRenderbuffersEXT, glDeleteRenderbuffersEXT, NULL, 819),
+    NAME_FUNC_OFFSET(14470, glFramebufferRenderbufferEXT, glFramebufferRenderbufferEXT, NULL, 820),
+    NAME_FUNC_OFFSET(14499, glFramebufferTexture1DEXT, glFramebufferTexture1DEXT, NULL, 821),
+    NAME_FUNC_OFFSET(14525, glFramebufferTexture2DEXT, glFramebufferTexture2DEXT, NULL, 822),
+    NAME_FUNC_OFFSET(14551, glFramebufferTexture3DEXT, glFramebufferTexture3DEXT, NULL, 823),
+    NAME_FUNC_OFFSET(14577, glGenFramebuffersEXT, glGenFramebuffersEXT, NULL, 824),
+    NAME_FUNC_OFFSET(14598, glGenRenderbuffersEXT, glGenRenderbuffersEXT, NULL, 825),
+    NAME_FUNC_OFFSET(14620, glGenerateMipmapEXT, glGenerateMipmapEXT, NULL, 826),
+    NAME_FUNC_OFFSET(14640, glGetFramebufferAttachmentParameterivEXT, glGetFramebufferAttachmentParameterivEXT, NULL, 827),
+    NAME_FUNC_OFFSET(14681, glGetRenderbufferParameterivEXT, glGetRenderbufferParameterivEXT, NULL, 828),
+    NAME_FUNC_OFFSET(14713, glIsFramebufferEXT, glIsFramebufferEXT, NULL, 829),
+    NAME_FUNC_OFFSET(14732, glIsRenderbufferEXT, glIsRenderbufferEXT, NULL, 830),
+    NAME_FUNC_OFFSET(14752, glRenderbufferStorageEXT, glRenderbufferStorageEXT, NULL, 831),
+    NAME_FUNC_OFFSET(14777, gl_dispatch_stub_832, gl_dispatch_stub_832, NULL, 832),
+    NAME_FUNC_OFFSET(14798, gl_dispatch_stub_833, gl_dispatch_stub_833, NULL, 833),
+    NAME_FUNC_OFFSET(14822, gl_dispatch_stub_834, gl_dispatch_stub_834, NULL, 834),
+    NAME_FUNC_OFFSET(14852, glBindFragDataLocationEXT, glBindFragDataLocationEXT, NULL, 835),
+    NAME_FUNC_OFFSET(14878, glGetFragDataLocationEXT, glGetFragDataLocationEXT, NULL, 836),
+    NAME_FUNC_OFFSET(14903, glGetUniformuivEXT, glGetUniformuivEXT, NULL, 837),
+    NAME_FUNC_OFFSET(14922, glGetVertexAttribIivEXT, glGetVertexAttribIivEXT, NULL, 838),
+    NAME_FUNC_OFFSET(14946, glGetVertexAttribIuivEXT, glGetVertexAttribIuivEXT, NULL, 839),
+    NAME_FUNC_OFFSET(14971, glUniform1uiEXT, glUniform1uiEXT, NULL, 840),
+    NAME_FUNC_OFFSET(14987, glUniform1uivEXT, glUniform1uivEXT, NULL, 841),
+    NAME_FUNC_OFFSET(15004, glUniform2uiEXT, glUniform2uiEXT, NULL, 842),
+    NAME_FUNC_OFFSET(15020, glUniform2uivEXT, glUniform2uivEXT, NULL, 843),
+    NAME_FUNC_OFFSET(15037, glUniform3uiEXT, glUniform3uiEXT, NULL, 844),
+    NAME_FUNC_OFFSET(15053, glUniform3uivEXT, glUniform3uivEXT, NULL, 845),
+    NAME_FUNC_OFFSET(15070, glUniform4uiEXT, glUniform4uiEXT, NULL, 846),
+    NAME_FUNC_OFFSET(15086, glUniform4uivEXT, glUniform4uivEXT, NULL, 847),
+    NAME_FUNC_OFFSET(15103, glVertexAttribI1iEXT, glVertexAttribI1iEXT, NULL, 848),
+    NAME_FUNC_OFFSET(15124, glVertexAttribI1ivEXT, glVertexAttribI1ivEXT, NULL, 849),
+    NAME_FUNC_OFFSET(15146, glVertexAttribI1uiEXT, glVertexAttribI1uiEXT, NULL, 850),
+    NAME_FUNC_OFFSET(15168, glVertexAttribI1uivEXT, glVertexAttribI1uivEXT, NULL, 851),
+    NAME_FUNC_OFFSET(15191, glVertexAttribI2iEXT, glVertexAttribI2iEXT, NULL, 852),
+    NAME_FUNC_OFFSET(15212, glVertexAttribI2ivEXT, glVertexAttribI2ivEXT, NULL, 853),
+    NAME_FUNC_OFFSET(15234, glVertexAttribI2uiEXT, glVertexAttribI2uiEXT, NULL, 854),
+    NAME_FUNC_OFFSET(15256, glVertexAttribI2uivEXT, glVertexAttribI2uivEXT, NULL, 855),
+    NAME_FUNC_OFFSET(15279, glVertexAttribI3iEXT, glVertexAttribI3iEXT, NULL, 856),
+    NAME_FUNC_OFFSET(15300, glVertexAttribI3ivEXT, glVertexAttribI3ivEXT, NULL, 857),
+    NAME_FUNC_OFFSET(15322, glVertexAttribI3uiEXT, glVertexAttribI3uiEXT, NULL, 858),
+    NAME_FUNC_OFFSET(15344, glVertexAttribI3uivEXT, glVertexAttribI3uivEXT, NULL, 859),
+    NAME_FUNC_OFFSET(15367, glVertexAttribI4bvEXT, glVertexAttribI4bvEXT, NULL, 860),
+    NAME_FUNC_OFFSET(15389, glVertexAttribI4iEXT, glVertexAttribI4iEXT, NULL, 861),
+    NAME_FUNC_OFFSET(15410, glVertexAttribI4ivEXT, glVertexAttribI4ivEXT, NULL, 862),
+    NAME_FUNC_OFFSET(15432, glVertexAttribI4svEXT, glVertexAttribI4svEXT, NULL, 863),
+    NAME_FUNC_OFFSET(15454, glVertexAttribI4ubvEXT, glVertexAttribI4ubvEXT, NULL, 864),
+    NAME_FUNC_OFFSET(15477, glVertexAttribI4uiEXT, glVertexAttribI4uiEXT, NULL, 865),
+    NAME_FUNC_OFFSET(15499, glVertexAttribI4uivEXT, glVertexAttribI4uivEXT, NULL, 866),
+    NAME_FUNC_OFFSET(15522, glVertexAttribI4usvEXT, glVertexAttribI4usvEXT, NULL, 867),
+    NAME_FUNC_OFFSET(15545, glVertexAttribIPointerEXT, glVertexAttribIPointerEXT, NULL, 868),
+    NAME_FUNC_OFFSET(15571, glFramebufferTextureLayerEXT, glFramebufferTextureLayerEXT, NULL, 869),
+    NAME_FUNC_OFFSET(15600, glColorMaskIndexedEXT, glColorMaskIndexedEXT, NULL, 870),
+    NAME_FUNC_OFFSET(15622, glDisableIndexedEXT, glDisableIndexedEXT, NULL, 871),
+    NAME_FUNC_OFFSET(15642, glEnableIndexedEXT, glEnableIndexedEXT, NULL, 872),
+    NAME_FUNC_OFFSET(15661, glGetBooleanIndexedvEXT, glGetBooleanIndexedvEXT, NULL, 873),
+    NAME_FUNC_OFFSET(15685, glGetIntegerIndexedvEXT, glGetIntegerIndexedvEXT, NULL, 874),
+    NAME_FUNC_OFFSET(15709, glIsEnabledIndexedEXT, glIsEnabledIndexedEXT, NULL, 875),
+    NAME_FUNC_OFFSET(15731, glClearColorIiEXT, glClearColorIiEXT, NULL, 876),
+    NAME_FUNC_OFFSET(15749, glClearColorIuiEXT, glClearColorIuiEXT, NULL, 877),
+    NAME_FUNC_OFFSET(15768, glGetTexParameterIivEXT, glGetTexParameterIivEXT, NULL, 878),
+    NAME_FUNC_OFFSET(15792, glGetTexParameterIuivEXT, glGetTexParameterIuivEXT, NULL, 879),
+    NAME_FUNC_OFFSET(15817, glTexParameterIivEXT, glTexParameterIivEXT, NULL, 880),
+    NAME_FUNC_OFFSET(15838, glTexParameterIuivEXT, glTexParameterIuivEXT, NULL, 881),
+    NAME_FUNC_OFFSET(15860, glBeginConditionalRenderNV, glBeginConditionalRenderNV, NULL, 882),
+    NAME_FUNC_OFFSET(15887, glEndConditionalRenderNV, glEndConditionalRenderNV, NULL, 883),
+    NAME_FUNC_OFFSET(15912, glBeginTransformFeedbackEXT, glBeginTransformFeedbackEXT, NULL, 884),
+    NAME_FUNC_OFFSET(15940, glBindBufferBaseEXT, glBindBufferBaseEXT, NULL, 885),
+    NAME_FUNC_OFFSET(15960, glBindBufferOffsetEXT, glBindBufferOffsetEXT, NULL, 886),
+    NAME_FUNC_OFFSET(15982, glBindBufferRangeEXT, glBindBufferRangeEXT, NULL, 887),
+    NAME_FUNC_OFFSET(16003, glEndTransformFeedbackEXT, glEndTransformFeedbackEXT, NULL, 888),
+    NAME_FUNC_OFFSET(16029, glGetTransformFeedbackVaryingEXT, glGetTransformFeedbackVaryingEXT, NULL, 889),
+    NAME_FUNC_OFFSET(16062, glTransformFeedbackVaryingsEXT, glTransformFeedbackVaryingsEXT, NULL, 890),
+    NAME_FUNC_OFFSET(16093, glProvokingVertexEXT, glProvokingVertexEXT, NULL, 891),
+    NAME_FUNC_OFFSET(16114, gl_dispatch_stub_892, gl_dispatch_stub_892, NULL, 892),
+    NAME_FUNC_OFFSET(16145, gl_dispatch_stub_893, gl_dispatch_stub_893, NULL, 893),
+    NAME_FUNC_OFFSET(16165, glGetObjectParameterivAPPLE, glGetObjectParameterivAPPLE, NULL, 894),
+    NAME_FUNC_OFFSET(16193, glObjectPurgeableAPPLE, glObjectPurgeableAPPLE, NULL, 895),
+    NAME_FUNC_OFFSET(16216, glObjectUnpurgeableAPPLE, glObjectUnpurgeableAPPLE, NULL, 896),
+    NAME_FUNC_OFFSET(16241, glActiveProgramEXT, glActiveProgramEXT, NULL, 897),
+    NAME_FUNC_OFFSET(16260, glCreateShaderProgramEXT, glCreateShaderProgramEXT, NULL, 898),
+    NAME_FUNC_OFFSET(16285, glUseShaderProgramEXT, glUseShaderProgramEXT, NULL, 899),
+    NAME_FUNC_OFFSET(16307, glTextureBarrierNV, glTextureBarrierNV, NULL, 900),
+    NAME_FUNC_OFFSET(16326, gl_dispatch_stub_901, gl_dispatch_stub_901, NULL, 901),
+    NAME_FUNC_OFFSET(16351, gl_dispatch_stub_902, gl_dispatch_stub_902, NULL, 902),
+    NAME_FUNC_OFFSET(16380, gl_dispatch_stub_903, gl_dispatch_stub_903, NULL, 903),
+    NAME_FUNC_OFFSET(16411, gl_dispatch_stub_904, gl_dispatch_stub_904, NULL, 904),
+    NAME_FUNC_OFFSET(16435, gl_dispatch_stub_905, gl_dispatch_stub_905, NULL, 905),
+    NAME_FUNC_OFFSET(16460, glEGLImageTargetRenderbufferStorageOES, glEGLImageTargetRenderbufferStorageOES, NULL, 906),
+    NAME_FUNC_OFFSET(16499, glEGLImageTargetTexture2DOES, glEGLImageTargetTexture2DOES, NULL, 907),
+    NAME_FUNC_OFFSET(16528, glArrayElement, glArrayElement, NULL, 306),
+    NAME_FUNC_OFFSET(16546, glBindTexture, glBindTexture, NULL, 307),
+    NAME_FUNC_OFFSET(16563, glDrawArrays, glDrawArrays, NULL, 310),
+    NAME_FUNC_OFFSET(16579, glAreTexturesResident, glAreTexturesResidentEXT, glAreTexturesResidentEXT, 322),
+    NAME_FUNC_OFFSET(16604, glCopyTexImage1D, glCopyTexImage1D, NULL, 323),
+    NAME_FUNC_OFFSET(16624, glCopyTexImage2D, glCopyTexImage2D, NULL, 324),
+    NAME_FUNC_OFFSET(16644, glCopyTexSubImage1D, glCopyTexSubImage1D, NULL, 325),
+    NAME_FUNC_OFFSET(16667, glCopyTexSubImage2D, glCopyTexSubImage2D, NULL, 326),
+    NAME_FUNC_OFFSET(16690, glDeleteTextures, glDeleteTexturesEXT, glDeleteTexturesEXT, 327),
+    NAME_FUNC_OFFSET(16710, glGenTextures, glGenTexturesEXT, glGenTexturesEXT, 328),
+    NAME_FUNC_OFFSET(16727, glGetPointerv, glGetPointerv, NULL, 329),
+    NAME_FUNC_OFFSET(16744, glIsTexture, glIsTextureEXT, glIsTextureEXT, 330),
+    NAME_FUNC_OFFSET(16759, glPrioritizeTextures, glPrioritizeTextures, NULL, 331),
+    NAME_FUNC_OFFSET(16783, glTexSubImage1D, glTexSubImage1D, NULL, 332),
+    NAME_FUNC_OFFSET(16802, glTexSubImage2D, glTexSubImage2D, NULL, 333),
+    NAME_FUNC_OFFSET(16821, glBlendColor, glBlendColor, NULL, 336),
+    NAME_FUNC_OFFSET(16837, glBlendEquation, glBlendEquation, NULL, 337),
+    NAME_FUNC_OFFSET(16856, glDrawRangeElements, glDrawRangeElements, NULL, 338),
+    NAME_FUNC_OFFSET(16879, glColorTable, glColorTable, NULL, 339),
+    NAME_FUNC_OFFSET(16895, glColorTable, glColorTable, NULL, 339),
+    NAME_FUNC_OFFSET(16911, glColorTableParameterfv, glColorTableParameterfv, NULL, 340),
+    NAME_FUNC_OFFSET(16938, glColorTableParameteriv, glColorTableParameteriv, NULL, 341),
+    NAME_FUNC_OFFSET(16965, glCopyColorTable, glCopyColorTable, NULL, 342),
+    NAME_FUNC_OFFSET(16985, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, 343),
+    NAME_FUNC_OFFSET(17004, glGetColorTable, glGetColorTableEXT, glGetColorTableEXT, 343),
+    NAME_FUNC_OFFSET(17023, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, 344),
+    NAME_FUNC_OFFSET(17053, glGetColorTableParameterfv, glGetColorTableParameterfvEXT, glGetColorTableParameterfvEXT, 344),
+    NAME_FUNC_OFFSET(17083, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, 345),
+    NAME_FUNC_OFFSET(17113, glGetColorTableParameteriv, glGetColorTableParameterivEXT, glGetColorTableParameterivEXT, 345),
+    NAME_FUNC_OFFSET(17143, glColorSubTable, glColorSubTable, NULL, 346),
+    NAME_FUNC_OFFSET(17162, glCopyColorSubTable, glCopyColorSubTable, NULL, 347),
+    NAME_FUNC_OFFSET(17185, glConvolutionFilter1D, glConvolutionFilter1D, NULL, 348),
+    NAME_FUNC_OFFSET(17210, glConvolutionFilter2D, glConvolutionFilter2D, NULL, 349),
+    NAME_FUNC_OFFSET(17235, glConvolutionParameterf, glConvolutionParameterf, NULL, 350),
+    NAME_FUNC_OFFSET(17262, glConvolutionParameterfv, glConvolutionParameterfv, NULL, 351),
+    NAME_FUNC_OFFSET(17290, glConvolutionParameteri, glConvolutionParameteri, NULL, 352),
+    NAME_FUNC_OFFSET(17317, glConvolutionParameteriv, glConvolutionParameteriv, NULL, 353),
+    NAME_FUNC_OFFSET(17345, glCopyConvolutionFilter1D, glCopyConvolutionFilter1D, NULL, 354),
+    NAME_FUNC_OFFSET(17374, glCopyConvolutionFilter2D, glCopyConvolutionFilter2D, NULL, 355),
+    NAME_FUNC_OFFSET(17403, glGetConvolutionFilter, gl_dispatch_stub_356, gl_dispatch_stub_356, 356),
+    NAME_FUNC_OFFSET(17429, glGetConvolutionParameterfv, gl_dispatch_stub_357, gl_dispatch_stub_357, 357),
+    NAME_FUNC_OFFSET(17460, glGetConvolutionParameteriv, gl_dispatch_stub_358, gl_dispatch_stub_358, 358),
+    NAME_FUNC_OFFSET(17491, glGetSeparableFilter, gl_dispatch_stub_359, gl_dispatch_stub_359, 359),
+    NAME_FUNC_OFFSET(17515, glSeparableFilter2D, glSeparableFilter2D, NULL, 360),
+    NAME_FUNC_OFFSET(17538, glGetHistogram, gl_dispatch_stub_361, gl_dispatch_stub_361, 361),
+    NAME_FUNC_OFFSET(17556, glGetHistogramParameterfv, gl_dispatch_stub_362, gl_dispatch_stub_362, 362),
+    NAME_FUNC_OFFSET(17585, glGetHistogramParameteriv, gl_dispatch_stub_363, gl_dispatch_stub_363, 363),
+    NAME_FUNC_OFFSET(17614, glGetMinmax, gl_dispatch_stub_364, gl_dispatch_stub_364, 364),
+    NAME_FUNC_OFFSET(17629, glGetMinmaxParameterfv, gl_dispatch_stub_365, gl_dispatch_stub_365, 365),
+    NAME_FUNC_OFFSET(17655, glGetMinmaxParameteriv, gl_dispatch_stub_366, gl_dispatch_stub_366, 366),
+    NAME_FUNC_OFFSET(17681, glHistogram, glHistogram, NULL, 367),
+    NAME_FUNC_OFFSET(17696, glMinmax, glMinmax, NULL, 368),
+    NAME_FUNC_OFFSET(17708, glResetHistogram, glResetHistogram, NULL, 369),
+    NAME_FUNC_OFFSET(17728, glResetMinmax, glResetMinmax, NULL, 370),
+    NAME_FUNC_OFFSET(17745, glTexImage3D, glTexImage3D, NULL, 371),
+    NAME_FUNC_OFFSET(17761, glTexSubImage3D, glTexSubImage3D, NULL, 372),
+    NAME_FUNC_OFFSET(17780, glCopyTexSubImage3D, glCopyTexSubImage3D, NULL, 373),
+    NAME_FUNC_OFFSET(17803, glActiveTextureARB, glActiveTextureARB, NULL, 374),
+    NAME_FUNC_OFFSET(17819, glClientActiveTextureARB, glClientActiveTextureARB, NULL, 375),
+    NAME_FUNC_OFFSET(17841, glMultiTexCoord1dARB, glMultiTexCoord1dARB, NULL, 376),
+    NAME_FUNC_OFFSET(17859, glMultiTexCoord1dvARB, glMultiTexCoord1dvARB, NULL, 377),
+    NAME_FUNC_OFFSET(17878, glMultiTexCoord1fARB, glMultiTexCoord1fARB, NULL, 378),
+    NAME_FUNC_OFFSET(17896, glMultiTexCoord1fvARB, glMultiTexCoord1fvARB, NULL, 379),
+    NAME_FUNC_OFFSET(17915, glMultiTexCoord1iARB, glMultiTexCoord1iARB, NULL, 380),
+    NAME_FUNC_OFFSET(17933, glMultiTexCoord1ivARB, glMultiTexCoord1ivARB, NULL, 381),
+    NAME_FUNC_OFFSET(17952, glMultiTexCoord1sARB, glMultiTexCoord1sARB, NULL, 382),
+    NAME_FUNC_OFFSET(17970, glMultiTexCoord1svARB, glMultiTexCoord1svARB, NULL, 383),
+    NAME_FUNC_OFFSET(17989, glMultiTexCoord2dARB, glMultiTexCoord2dARB, NULL, 384),
+    NAME_FUNC_OFFSET(18007, glMultiTexCoord2dvARB, glMultiTexCoord2dvARB, NULL, 385),
+    NAME_FUNC_OFFSET(18026, glMultiTexCoord2fARB, glMultiTexCoord2fARB, NULL, 386),
+    NAME_FUNC_OFFSET(18044, glMultiTexCoord2fvARB, glMultiTexCoord2fvARB, NULL, 387),
+    NAME_FUNC_OFFSET(18063, glMultiTexCoord2iARB, glMultiTexCoord2iARB, NULL, 388),
+    NAME_FUNC_OFFSET(18081, glMultiTexCoord2ivARB, glMultiTexCoord2ivARB, NULL, 389),
+    NAME_FUNC_OFFSET(18100, glMultiTexCoord2sARB, glMultiTexCoord2sARB, NULL, 390),
+    NAME_FUNC_OFFSET(18118, glMultiTexCoord2svARB, glMultiTexCoord2svARB, NULL, 391),
+    NAME_FUNC_OFFSET(18137, glMultiTexCoord3dARB, glMultiTexCoord3dARB, NULL, 392),
+    NAME_FUNC_OFFSET(18155, glMultiTexCoord3dvARB, glMultiTexCoord3dvARB, NULL, 393),
+    NAME_FUNC_OFFSET(18174, glMultiTexCoord3fARB, glMultiTexCoord3fARB, NULL, 394),
+    NAME_FUNC_OFFSET(18192, glMultiTexCoord3fvARB, glMultiTexCoord3fvARB, NULL, 395),
+    NAME_FUNC_OFFSET(18211, glMultiTexCoord3iARB, glMultiTexCoord3iARB, NULL, 396),
+    NAME_FUNC_OFFSET(18229, glMultiTexCoord3ivARB, glMultiTexCoord3ivARB, NULL, 397),
+    NAME_FUNC_OFFSET(18248, glMultiTexCoord3sARB, glMultiTexCoord3sARB, NULL, 398),
+    NAME_FUNC_OFFSET(18266, glMultiTexCoord3svARB, glMultiTexCoord3svARB, NULL, 399),
+    NAME_FUNC_OFFSET(18285, glMultiTexCoord4dARB, glMultiTexCoord4dARB, NULL, 400),
+    NAME_FUNC_OFFSET(18303, glMultiTexCoord4dvARB, glMultiTexCoord4dvARB, NULL, 401),
+    NAME_FUNC_OFFSET(18322, glMultiTexCoord4fARB, glMultiTexCoord4fARB, NULL, 402),
+    NAME_FUNC_OFFSET(18340, glMultiTexCoord4fvARB, glMultiTexCoord4fvARB, NULL, 403),
+    NAME_FUNC_OFFSET(18359, glMultiTexCoord4iARB, glMultiTexCoord4iARB, NULL, 404),
+    NAME_FUNC_OFFSET(18377, glMultiTexCoord4ivARB, glMultiTexCoord4ivARB, NULL, 405),
+    NAME_FUNC_OFFSET(18396, glMultiTexCoord4sARB, glMultiTexCoord4sARB, NULL, 406),
+    NAME_FUNC_OFFSET(18414, glMultiTexCoord4svARB, glMultiTexCoord4svARB, NULL, 407),
+    NAME_FUNC_OFFSET(18433, glStencilOpSeparate, glStencilOpSeparate, NULL, 423),
+    NAME_FUNC_OFFSET(18456, glLoadTransposeMatrixdARB, glLoadTransposeMatrixdARB, NULL, 441),
+    NAME_FUNC_OFFSET(18479, glLoadTransposeMatrixfARB, glLoadTransposeMatrixfARB, NULL, 442),
+    NAME_FUNC_OFFSET(18502, glMultTransposeMatrixdARB, glMultTransposeMatrixdARB, NULL, 443),
+    NAME_FUNC_OFFSET(18525, glMultTransposeMatrixfARB, glMultTransposeMatrixfARB, NULL, 444),
+    NAME_FUNC_OFFSET(18548, glSampleCoverageARB, glSampleCoverageARB, NULL, 445),
+    NAME_FUNC_OFFSET(18565, glCompressedTexImage1DARB, glCompressedTexImage1DARB, NULL, 446),
+    NAME_FUNC_OFFSET(18588, glCompressedTexImage2DARB, glCompressedTexImage2DARB, NULL, 447),
+    NAME_FUNC_OFFSET(18611, glCompressedTexImage3DARB, glCompressedTexImage3DARB, NULL, 448),
+    NAME_FUNC_OFFSET(18634, glCompressedTexSubImage1DARB, glCompressedTexSubImage1DARB, NULL, 449),
+    NAME_FUNC_OFFSET(18660, glCompressedTexSubImage2DARB, glCompressedTexSubImage2DARB, NULL, 450),
+    NAME_FUNC_OFFSET(18686, glCompressedTexSubImage3DARB, glCompressedTexSubImage3DARB, NULL, 451),
+    NAME_FUNC_OFFSET(18712, glGetCompressedTexImageARB, glGetCompressedTexImageARB, NULL, 452),
+    NAME_FUNC_OFFSET(18736, glDisableVertexAttribArrayARB, glDisableVertexAttribArrayARB, NULL, 453),
+    NAME_FUNC_OFFSET(18763, glEnableVertexAttribArrayARB, glEnableVertexAttribArrayARB, NULL, 454),
+    NAME_FUNC_OFFSET(18789, glGetVertexAttribdvARB, glGetVertexAttribdvARB, NULL, 461),
+    NAME_FUNC_OFFSET(18809, glGetVertexAttribfvARB, glGetVertexAttribfvARB, NULL, 462),
+    NAME_FUNC_OFFSET(18829, glGetVertexAttribivARB, glGetVertexAttribivARB, NULL, 463),
+    NAME_FUNC_OFFSET(18849, glProgramEnvParameter4dARB, glProgramEnvParameter4dARB, NULL, 464),
+    NAME_FUNC_OFFSET(18872, glProgramEnvParameter4dvARB, glProgramEnvParameter4dvARB, NULL, 465),
+    NAME_FUNC_OFFSET(18896, glProgramEnvParameter4fARB, glProgramEnvParameter4fARB, NULL, 466),
+    NAME_FUNC_OFFSET(18919, glProgramEnvParameter4fvARB, glProgramEnvParameter4fvARB, NULL, 467),
+    NAME_FUNC_OFFSET(18943, glVertexAttrib1dARB, glVertexAttrib1dARB, NULL, 473),
+    NAME_FUNC_OFFSET(18960, glVertexAttrib1dvARB, glVertexAttrib1dvARB, NULL, 474),
+    NAME_FUNC_OFFSET(18978, glVertexAttrib1fARB, glVertexAttrib1fARB, NULL, 475),
+    NAME_FUNC_OFFSET(18995, glVertexAttrib1fvARB, glVertexAttrib1fvARB, NULL, 476),
+    NAME_FUNC_OFFSET(19013, glVertexAttrib1sARB, glVertexAttrib1sARB, NULL, 477),
+    NAME_FUNC_OFFSET(19030, glVertexAttrib1svARB, glVertexAttrib1svARB, NULL, 478),
+    NAME_FUNC_OFFSET(19048, glVertexAttrib2dARB, glVertexAttrib2dARB, NULL, 479),
+    NAME_FUNC_OFFSET(19065, glVertexAttrib2dvARB, glVertexAttrib2dvARB, NULL, 480),
+    NAME_FUNC_OFFSET(19083, glVertexAttrib2fARB, glVertexAttrib2fARB, NULL, 481),
+    NAME_FUNC_OFFSET(19100, glVertexAttrib2fvARB, glVertexAttrib2fvARB, NULL, 482),
+    NAME_FUNC_OFFSET(19118, glVertexAttrib2sARB, glVertexAttrib2sARB, NULL, 483),
+    NAME_FUNC_OFFSET(19135, glVertexAttrib2svARB, glVertexAttrib2svARB, NULL, 484),
+    NAME_FUNC_OFFSET(19153, glVertexAttrib3dARB, glVertexAttrib3dARB, NULL, 485),
+    NAME_FUNC_OFFSET(19170, glVertexAttrib3dvARB, glVertexAttrib3dvARB, NULL, 486),
+    NAME_FUNC_OFFSET(19188, glVertexAttrib3fARB, glVertexAttrib3fARB, NULL, 487),
+    NAME_FUNC_OFFSET(19205, glVertexAttrib3fvARB, glVertexAttrib3fvARB, NULL, 488),
+    NAME_FUNC_OFFSET(19223, glVertexAttrib3sARB, glVertexAttrib3sARB, NULL, 489),
+    NAME_FUNC_OFFSET(19240, glVertexAttrib3svARB, glVertexAttrib3svARB, NULL, 490),
+    NAME_FUNC_OFFSET(19258, glVertexAttrib4NbvARB, glVertexAttrib4NbvARB, NULL, 491),
+    NAME_FUNC_OFFSET(19277, glVertexAttrib4NivARB, glVertexAttrib4NivARB, NULL, 492),
+    NAME_FUNC_OFFSET(19296, glVertexAttrib4NsvARB, glVertexAttrib4NsvARB, NULL, 493),
+    NAME_FUNC_OFFSET(19315, glVertexAttrib4NubARB, glVertexAttrib4NubARB, NULL, 494),
+    NAME_FUNC_OFFSET(19334, glVertexAttrib4NubvARB, glVertexAttrib4NubvARB, NULL, 495),
+    NAME_FUNC_OFFSET(19354, glVertexAttrib4NuivARB, glVertexAttrib4NuivARB, NULL, 496),
+    NAME_FUNC_OFFSET(19374, glVertexAttrib4NusvARB, glVertexAttrib4NusvARB, NULL, 497),
+    NAME_FUNC_OFFSET(19394, glVertexAttrib4bvARB, glVertexAttrib4bvARB, NULL, 498),
+    NAME_FUNC_OFFSET(19412, glVertexAttrib4dARB, glVertexAttrib4dARB, NULL, 499),
+    NAME_FUNC_OFFSET(19429, glVertexAttrib4dvARB, glVertexAttrib4dvARB, NULL, 500),
+    NAME_FUNC_OFFSET(19447, glVertexAttrib4fARB, glVertexAttrib4fARB, NULL, 501),
+    NAME_FUNC_OFFSET(19464, glVertexAttrib4fvARB, glVertexAttrib4fvARB, NULL, 502),
+    NAME_FUNC_OFFSET(19482, glVertexAttrib4ivARB, glVertexAttrib4ivARB, NULL, 503),
+    NAME_FUNC_OFFSET(19500, glVertexAttrib4sARB, glVertexAttrib4sARB, NULL, 504),
+    NAME_FUNC_OFFSET(19517, glVertexAttrib4svARB, glVertexAttrib4svARB, NULL, 505),
+    NAME_FUNC_OFFSET(19535, glVertexAttrib4ubvARB, glVertexAttrib4ubvARB, NULL, 506),
+    NAME_FUNC_OFFSET(19554, glVertexAttrib4uivARB, glVertexAttrib4uivARB, NULL, 507),
+    NAME_FUNC_OFFSET(19573, glVertexAttrib4usvARB, glVertexAttrib4usvARB, NULL, 508),
+    NAME_FUNC_OFFSET(19592, glVertexAttribPointerARB, glVertexAttribPointerARB, NULL, 509),
+    NAME_FUNC_OFFSET(19614, glBindBufferARB, glBindBufferARB, NULL, 510),
+    NAME_FUNC_OFFSET(19627, glBufferDataARB, glBufferDataARB, NULL, 511),
+    NAME_FUNC_OFFSET(19640, glBufferSubDataARB, glBufferSubDataARB, NULL, 512),
+    NAME_FUNC_OFFSET(19656, glDeleteBuffersARB, glDeleteBuffersARB, NULL, 513),
+    NAME_FUNC_OFFSET(19672, glGenBuffersARB, glGenBuffersARB, NULL, 514),
+    NAME_FUNC_OFFSET(19685, glGetBufferParameterivARB, glGetBufferParameterivARB, NULL, 515),
+    NAME_FUNC_OFFSET(19708, glGetBufferPointervARB, glGetBufferPointervARB, NULL, 516),
+    NAME_FUNC_OFFSET(19728, glGetBufferSubDataARB, glGetBufferSubDataARB, NULL, 517),
+    NAME_FUNC_OFFSET(19747, glIsBufferARB, glIsBufferARB, NULL, 518),
+    NAME_FUNC_OFFSET(19758, glMapBufferARB, glMapBufferARB, NULL, 519),
+    NAME_FUNC_OFFSET(19770, glUnmapBufferARB, glUnmapBufferARB, NULL, 520),
+    NAME_FUNC_OFFSET(19784, glBeginQueryARB, glBeginQueryARB, NULL, 521),
+    NAME_FUNC_OFFSET(19797, glDeleteQueriesARB, glDeleteQueriesARB, NULL, 522),
+    NAME_FUNC_OFFSET(19813, glEndQueryARB, glEndQueryARB, NULL, 523),
+    NAME_FUNC_OFFSET(19824, glGenQueriesARB, glGenQueriesARB, NULL, 524),
+    NAME_FUNC_OFFSET(19837, glGetQueryObjectivARB, glGetQueryObjectivARB, NULL, 525),
+    NAME_FUNC_OFFSET(19856, glGetQueryObjectuivARB, glGetQueryObjectuivARB, NULL, 526),
+    NAME_FUNC_OFFSET(19876, glGetQueryivARB, glGetQueryivARB, NULL, 527),
+    NAME_FUNC_OFFSET(19889, glIsQueryARB, glIsQueryARB, NULL, 528),
+    NAME_FUNC_OFFSET(19899, glCompileShaderARB, glCompileShaderARB, NULL, 530),
+    NAME_FUNC_OFFSET(19915, glGetActiveUniformARB, glGetActiveUniformARB, NULL, 535),
+    NAME_FUNC_OFFSET(19934, glGetShaderSourceARB, glGetShaderSourceARB, NULL, 541),
+    NAME_FUNC_OFFSET(19952, glGetUniformLocationARB, glGetUniformLocationARB, NULL, 542),
+    NAME_FUNC_OFFSET(19973, glGetUniformfvARB, glGetUniformfvARB, NULL, 543),
+    NAME_FUNC_OFFSET(19988, glGetUniformivARB, glGetUniformivARB, NULL, 544),
+    NAME_FUNC_OFFSET(20003, glLinkProgramARB, glLinkProgramARB, NULL, 545),
+    NAME_FUNC_OFFSET(20017, glShaderSourceARB, glShaderSourceARB, NULL, 546),
+    NAME_FUNC_OFFSET(20032, glUniform1fARB, glUniform1fARB, NULL, 547),
+    NAME_FUNC_OFFSET(20044, glUniform1fvARB, glUniform1fvARB, NULL, 548),
+    NAME_FUNC_OFFSET(20057, glUniform1iARB, glUniform1iARB, NULL, 549),
+    NAME_FUNC_OFFSET(20069, glUniform1ivARB, glUniform1ivARB, NULL, 550),
+    NAME_FUNC_OFFSET(20082, glUniform2fARB, glUniform2fARB, NULL, 551),
+    NAME_FUNC_OFFSET(20094, glUniform2fvARB, glUniform2fvARB, NULL, 552),
+    NAME_FUNC_OFFSET(20107, glUniform2iARB, glUniform2iARB, NULL, 553),
+    NAME_FUNC_OFFSET(20119, glUniform2ivARB, glUniform2ivARB, NULL, 554),
+    NAME_FUNC_OFFSET(20132, glUniform3fARB, glUniform3fARB, NULL, 555),
+    NAME_FUNC_OFFSET(20144, glUniform3fvARB, glUniform3fvARB, NULL, 556),
+    NAME_FUNC_OFFSET(20157, glUniform3iARB, glUniform3iARB, NULL, 557),
+    NAME_FUNC_OFFSET(20169, glUniform3ivARB, glUniform3ivARB, NULL, 558),
+    NAME_FUNC_OFFSET(20182, glUniform4fARB, glUniform4fARB, NULL, 559),
+    NAME_FUNC_OFFSET(20194, glUniform4fvARB, glUniform4fvARB, NULL, 560),
+    NAME_FUNC_OFFSET(20207, glUniform4iARB, glUniform4iARB, NULL, 561),
+    NAME_FUNC_OFFSET(20219, glUniform4ivARB, glUniform4ivARB, NULL, 562),
+    NAME_FUNC_OFFSET(20232, glUniformMatrix2fvARB, glUniformMatrix2fvARB, NULL, 563),
+    NAME_FUNC_OFFSET(20251, glUniformMatrix3fvARB, glUniformMatrix3fvARB, NULL, 564),
+    NAME_FUNC_OFFSET(20270, glUniformMatrix4fvARB, glUniformMatrix4fvARB, NULL, 565),
+    NAME_FUNC_OFFSET(20289, glUseProgramObjectARB, glUseProgramObjectARB, NULL, 566),
+    NAME_FUNC_OFFSET(20302, glValidateProgramARB, glValidateProgramARB, NULL, 567),
+    NAME_FUNC_OFFSET(20320, glBindAttribLocationARB, glBindAttribLocationARB, NULL, 568),
+    NAME_FUNC_OFFSET(20341, glGetActiveAttribARB, glGetActiveAttribARB, NULL, 569),
+    NAME_FUNC_OFFSET(20359, glGetAttribLocationARB, glGetAttribLocationARB, NULL, 570),
+    NAME_FUNC_OFFSET(20379, glDrawBuffersARB, glDrawBuffersARB, NULL, 571),
+    NAME_FUNC_OFFSET(20393, glDrawBuffersARB, glDrawBuffersARB, NULL, 571),
+    NAME_FUNC_OFFSET(20410, glDrawArraysInstancedARB, glDrawArraysInstancedARB, NULL, 573),
+    NAME_FUNC_OFFSET(20435, glDrawArraysInstancedARB, glDrawArraysInstancedARB, NULL, 573),
+    NAME_FUNC_OFFSET(20457, glDrawElementsInstancedARB, glDrawElementsInstancedARB, NULL, 574),
+    NAME_FUNC_OFFSET(20484, glDrawElementsInstancedARB, glDrawElementsInstancedARB, NULL, 574),
+    NAME_FUNC_OFFSET(20508, glRenderbufferStorageMultisample, glRenderbufferStorageMultisample, NULL, 575),
+    NAME_FUNC_OFFSET(20544, gl_dispatch_stub_633, gl_dispatch_stub_633, NULL, 633),
+    NAME_FUNC_OFFSET(20560, gl_dispatch_stub_634, gl_dispatch_stub_634, NULL, 634),
+    NAME_FUNC_OFFSET(20579, glPointParameterfEXT, glPointParameterfEXT, NULL, 641),
+    NAME_FUNC_OFFSET(20597, glPointParameterfEXT, glPointParameterfEXT, NULL, 641),
+    NAME_FUNC_OFFSET(20618, glPointParameterfEXT, glPointParameterfEXT, NULL, 641),
+    NAME_FUNC_OFFSET(20640, glPointParameterfvEXT, glPointParameterfvEXT, NULL, 642),
+    NAME_FUNC_OFFSET(20659, glPointParameterfvEXT, glPointParameterfvEXT, NULL, 642),
+    NAME_FUNC_OFFSET(20681, glPointParameterfvEXT, glPointParameterfvEXT, NULL, 642),
+    NAME_FUNC_OFFSET(20704, glSecondaryColor3bEXT, glSecondaryColor3bEXT, NULL, 645),
+    NAME_FUNC_OFFSET(20723, glSecondaryColor3bvEXT, glSecondaryColor3bvEXT, NULL, 646),
+    NAME_FUNC_OFFSET(20743, glSecondaryColor3dEXT, glSecondaryColor3dEXT, NULL, 647),
+    NAME_FUNC_OFFSET(20762, glSecondaryColor3dvEXT, glSecondaryColor3dvEXT, NULL, 648),
+    NAME_FUNC_OFFSET(20782, glSecondaryColor3fEXT, glSecondaryColor3fEXT, NULL, 649),
+    NAME_FUNC_OFFSET(20801, glSecondaryColor3fvEXT, glSecondaryColor3fvEXT, NULL, 650),
+    NAME_FUNC_OFFSET(20821, glSecondaryColor3iEXT, glSecondaryColor3iEXT, NULL, 651),
+    NAME_FUNC_OFFSET(20840, glSecondaryColor3ivEXT, glSecondaryColor3ivEXT, NULL, 652),
+    NAME_FUNC_OFFSET(20860, glSecondaryColor3sEXT, glSecondaryColor3sEXT, NULL, 653),
+    NAME_FUNC_OFFSET(20879, glSecondaryColor3svEXT, glSecondaryColor3svEXT, NULL, 654),
+    NAME_FUNC_OFFSET(20899, glSecondaryColor3ubEXT, glSecondaryColor3ubEXT, NULL, 655),
+    NAME_FUNC_OFFSET(20919, glSecondaryColor3ubvEXT, glSecondaryColor3ubvEXT, NULL, 656),
+    NAME_FUNC_OFFSET(20940, glSecondaryColor3uiEXT, glSecondaryColor3uiEXT, NULL, 657),
+    NAME_FUNC_OFFSET(20960, glSecondaryColor3uivEXT, glSecondaryColor3uivEXT, NULL, 658),
+    NAME_FUNC_OFFSET(20981, glSecondaryColor3usEXT, glSecondaryColor3usEXT, NULL, 659),
+    NAME_FUNC_OFFSET(21001, glSecondaryColor3usvEXT, glSecondaryColor3usvEXT, NULL, 660),
+    NAME_FUNC_OFFSET(21022, glSecondaryColorPointerEXT, glSecondaryColorPointerEXT, NULL, 661),
+    NAME_FUNC_OFFSET(21046, glMultiDrawArraysEXT, glMultiDrawArraysEXT, NULL, 662),
+    NAME_FUNC_OFFSET(21064, glMultiDrawElementsEXT, glMultiDrawElementsEXT, NULL, 663),
+    NAME_FUNC_OFFSET(21084, glFogCoordPointerEXT, glFogCoordPointerEXT, NULL, 664),
+    NAME_FUNC_OFFSET(21102, glFogCoorddEXT, glFogCoorddEXT, NULL, 665),
+    NAME_FUNC_OFFSET(21114, glFogCoorddvEXT, glFogCoorddvEXT, NULL, 666),
+    NAME_FUNC_OFFSET(21127, glFogCoordfEXT, glFogCoordfEXT, NULL, 667),
+    NAME_FUNC_OFFSET(21139, glFogCoordfvEXT, glFogCoordfvEXT, NULL, 668),
+    NAME_FUNC_OFFSET(21152, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, 670),
+    NAME_FUNC_OFFSET(21172, glBlendFuncSeparateEXT, glBlendFuncSeparateEXT, NULL, 670),
+    NAME_FUNC_OFFSET(21196, glWindowPos2dMESA, glWindowPos2dMESA, NULL, 687),
+    NAME_FUNC_OFFSET(21210, glWindowPos2dMESA, glWindowPos2dMESA, NULL, 687),
+    NAME_FUNC_OFFSET(21227, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, 688),
+    NAME_FUNC_OFFSET(21242, glWindowPos2dvMESA, glWindowPos2dvMESA, NULL, 688),
+    NAME_FUNC_OFFSET(21260, glWindowPos2fMESA, glWindowPos2fMESA, NULL, 689),
+    NAME_FUNC_OFFSET(21274, glWindowPos2fMESA, glWindowPos2fMESA, NULL, 689),
+    NAME_FUNC_OFFSET(21291, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, 690),
+    NAME_FUNC_OFFSET(21306, glWindowPos2fvMESA, glWindowPos2fvMESA, NULL, 690),
+    NAME_FUNC_OFFSET(21324, glWindowPos2iMESA, glWindowPos2iMESA, NULL, 691),
+    NAME_FUNC_OFFSET(21338, glWindowPos2iMESA, glWindowPos2iMESA, NULL, 691),
+    NAME_FUNC_OFFSET(21355, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, 692),
+    NAME_FUNC_OFFSET(21370, glWindowPos2ivMESA, glWindowPos2ivMESA, NULL, 692),
+    NAME_FUNC_OFFSET(21388, glWindowPos2sMESA, glWindowPos2sMESA, NULL, 693),
+    NAME_FUNC_OFFSET(21402, glWindowPos2sMESA, glWindowPos2sMESA, NULL, 693),
+    NAME_FUNC_OFFSET(21419, glWindowPos2svMESA, glWindowPos2svMESA, NULL, 694),
+    NAME_FUNC_OFFSET(21434, glWindowPos2svMESA, glWindowPos2svMESA, NULL, 694),
+    NAME_FUNC_OFFSET(21452, glWindowPos3dMESA, glWindowPos3dMESA, NULL, 695),
+    NAME_FUNC_OFFSET(21466, glWindowPos3dMESA, glWindowPos3dMESA, NULL, 695),
+    NAME_FUNC_OFFSET(21483, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, 696),
+    NAME_FUNC_OFFSET(21498, glWindowPos3dvMESA, glWindowPos3dvMESA, NULL, 696),
+    NAME_FUNC_OFFSET(21516, glWindowPos3fMESA, glWindowPos3fMESA, NULL, 697),
+    NAME_FUNC_OFFSET(21530, glWindowPos3fMESA, glWindowPos3fMESA, NULL, 697),
+    NAME_FUNC_OFFSET(21547, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, 698),
+    NAME_FUNC_OFFSET(21562, glWindowPos3fvMESA, glWindowPos3fvMESA, NULL, 698),
+    NAME_FUNC_OFFSET(21580, glWindowPos3iMESA, glWindowPos3iMESA, NULL, 699),
+    NAME_FUNC_OFFSET(21594, glWindowPos3iMESA, glWindowPos3iMESA, NULL, 699),
+    NAME_FUNC_OFFSET(21611, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, 700),
+    NAME_FUNC_OFFSET(21626, glWindowPos3ivMESA, glWindowPos3ivMESA, NULL, 700),
+    NAME_FUNC_OFFSET(21644, glWindowPos3sMESA, glWindowPos3sMESA, NULL, 701),
+    NAME_FUNC_OFFSET(21658, glWindowPos3sMESA, glWindowPos3sMESA, NULL, 701),
+    NAME_FUNC_OFFSET(21675, glWindowPos3svMESA, glWindowPos3svMESA, NULL, 702),
+    NAME_FUNC_OFFSET(21690, glWindowPos3svMESA, glWindowPos3svMESA, NULL, 702),
+    NAME_FUNC_OFFSET(21708, glBindProgramNV, glBindProgramNV, NULL, 721),
+    NAME_FUNC_OFFSET(21725, glDeleteProgramsNV, glDeleteProgramsNV, NULL, 722),
+    NAME_FUNC_OFFSET(21745, glGenProgramsNV, glGenProgramsNV, NULL, 724),
+    NAME_FUNC_OFFSET(21762, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, 730),
+    NAME_FUNC_OFFSET(21788, glGetVertexAttribPointervNV, glGetVertexAttribPointervNV, NULL, 730),
+    NAME_FUNC_OFFSET(21817, glIsProgramNV, glIsProgramNV, NULL, 734),
+    NAME_FUNC_OFFSET(21832, glPointParameteriNV, glPointParameteriNV, NULL, 798),
+    NAME_FUNC_OFFSET(21850, glPointParameterivNV, glPointParameterivNV, NULL, 799),
+    NAME_FUNC_OFFSET(21869, gl_dispatch_stub_802, gl_dispatch_stub_802, NULL, 802),
+    NAME_FUNC_OFFSET(21890, gl_dispatch_stub_804, gl_dispatch_stub_804, NULL, 804),
+    NAME_FUNC_OFFSET(21906, glPrimitiveRestartIndexNV, glPrimitiveRestartIndexNV, NULL, 811),
+    NAME_FUNC_OFFSET(21930, gl_dispatch_stub_814, gl_dispatch_stub_814, NULL, 814),
+    NAME_FUNC_OFFSET(21954, gl_dispatch_stub_814, gl_dispatch_stub_814, NULL, 814),
+    NAME_FUNC_OFFSET(21981, glBindFramebufferEXT, glBindFramebufferEXT, NULL, 815),
+    NAME_FUNC_OFFSET(21999, glBindRenderbufferEXT, glBindRenderbufferEXT, NULL, 816),
+    NAME_FUNC_OFFSET(22018, glCheckFramebufferStatusEXT, glCheckFramebufferStatusEXT, NULL, 817),
+    NAME_FUNC_OFFSET(22043, glDeleteFramebuffersEXT, glDeleteFramebuffersEXT, NULL, 818),
+    NAME_FUNC_OFFSET(22064, glDeleteRenderbuffersEXT, glDeleteRenderbuffersEXT, NULL, 819),
+    NAME_FUNC_OFFSET(22086, glFramebufferRenderbufferEXT, glFramebufferRenderbufferEXT, NULL, 820),
+    NAME_FUNC_OFFSET(22112, glFramebufferTexture1DEXT, glFramebufferTexture1DEXT, NULL, 821),
+    NAME_FUNC_OFFSET(22135, glFramebufferTexture2DEXT, glFramebufferTexture2DEXT, NULL, 822),
+    NAME_FUNC_OFFSET(22158, glFramebufferTexture3DEXT, glFramebufferTexture3DEXT, NULL, 823),
+    NAME_FUNC_OFFSET(22181, glGenFramebuffersEXT, glGenFramebuffersEXT, NULL, 824),
+    NAME_FUNC_OFFSET(22199, glGenRenderbuffersEXT, glGenRenderbuffersEXT, NULL, 825),
+    NAME_FUNC_OFFSET(22218, glGenerateMipmapEXT, glGenerateMipmapEXT, NULL, 826),
+    NAME_FUNC_OFFSET(22235, glGetFramebufferAttachmentParameterivEXT, glGetFramebufferAttachmentParameterivEXT, NULL, 827),
+    NAME_FUNC_OFFSET(22273, glGetRenderbufferParameterivEXT, glGetRenderbufferParameterivEXT, NULL, 828),
+    NAME_FUNC_OFFSET(22302, glIsFramebufferEXT, glIsFramebufferEXT, NULL, 829),
+    NAME_FUNC_OFFSET(22318, glIsRenderbufferEXT, glIsRenderbufferEXT, NULL, 830),
+    NAME_FUNC_OFFSET(22335, glRenderbufferStorageEXT, glRenderbufferStorageEXT, NULL, 831),
+    NAME_FUNC_OFFSET(22357, gl_dispatch_stub_832, gl_dispatch_stub_832, NULL, 832),
+    NAME_FUNC_OFFSET(22375, glBindFragDataLocationEXT, glBindFragDataLocationEXT, NULL, 835),
+    NAME_FUNC_OFFSET(22398, glGetFragDataLocationEXT, glGetFragDataLocationEXT, NULL, 836),
+    NAME_FUNC_OFFSET(22420, glGetUniformuivEXT, glGetUniformuivEXT, NULL, 837),
+    NAME_FUNC_OFFSET(22436, glGetVertexAttribIivEXT, glGetVertexAttribIivEXT, NULL, 838),
+    NAME_FUNC_OFFSET(22457, glGetVertexAttribIuivEXT, glGetVertexAttribIuivEXT, NULL, 839),
+    NAME_FUNC_OFFSET(22479, glUniform1uiEXT, glUniform1uiEXT, NULL, 840),
+    NAME_FUNC_OFFSET(22492, glUniform1uivEXT, glUniform1uivEXT, NULL, 841),
+    NAME_FUNC_OFFSET(22506, glUniform2uiEXT, glUniform2uiEXT, NULL, 842),
+    NAME_FUNC_OFFSET(22519, glUniform2uivEXT, glUniform2uivEXT, NULL, 843),
+    NAME_FUNC_OFFSET(22533, glUniform3uiEXT, glUniform3uiEXT, NULL, 844),
+    NAME_FUNC_OFFSET(22546, glUniform3uivEXT, glUniform3uivEXT, NULL, 845),
+    NAME_FUNC_OFFSET(22560, glUniform4uiEXT, glUniform4uiEXT, NULL, 846),
+    NAME_FUNC_OFFSET(22573, glUniform4uivEXT, glUniform4uivEXT, NULL, 847),
+    NAME_FUNC_OFFSET(22587, glVertexAttribI1iEXT, glVertexAttribI1iEXT, NULL, 848),
+    NAME_FUNC_OFFSET(22605, glVertexAttribI1ivEXT, glVertexAttribI1ivEXT, NULL, 849),
+    NAME_FUNC_OFFSET(22624, glVertexAttribI1uiEXT, glVertexAttribI1uiEXT, NULL, 850),
+    NAME_FUNC_OFFSET(22643, glVertexAttribI1uivEXT, glVertexAttribI1uivEXT, NULL, 851),
+    NAME_FUNC_OFFSET(22663, glVertexAttribI2iEXT, glVertexAttribI2iEXT, NULL, 852),
+    NAME_FUNC_OFFSET(22681, glVertexAttribI2ivEXT, glVertexAttribI2ivEXT, NULL, 853),
+    NAME_FUNC_OFFSET(22700, glVertexAttribI2uiEXT, glVertexAttribI2uiEXT, NULL, 854),
+    NAME_FUNC_OFFSET(22719, glVertexAttribI2uivEXT, glVertexAttribI2uivEXT, NULL, 855),
+    NAME_FUNC_OFFSET(22739, glVertexAttribI3iEXT, glVertexAttribI3iEXT, NULL, 856),
+    NAME_FUNC_OFFSET(22757, glVertexAttribI3ivEXT, glVertexAttribI3ivEXT, NULL, 857),
+    NAME_FUNC_OFFSET(22776, glVertexAttribI3uiEXT, glVertexAttribI3uiEXT, NULL, 858),
+    NAME_FUNC_OFFSET(22795, glVertexAttribI3uivEXT, glVertexAttribI3uivEXT, NULL, 859),
+    NAME_FUNC_OFFSET(22815, glVertexAttribI4bvEXT, glVertexAttribI4bvEXT, NULL, 860),
+    NAME_FUNC_OFFSET(22834, glVertexAttribI4iEXT, glVertexAttribI4iEXT, NULL, 861),
+    NAME_FUNC_OFFSET(22852, glVertexAttribI4ivEXT, glVertexAttribI4ivEXT, NULL, 862),
+    NAME_FUNC_OFFSET(22871, glVertexAttribI4svEXT, glVertexAttribI4svEXT, NULL, 863),
+    NAME_FUNC_OFFSET(22890, glVertexAttribI4ubvEXT, glVertexAttribI4ubvEXT, NULL, 864),
+    NAME_FUNC_OFFSET(22910, glVertexAttribI4uiEXT, glVertexAttribI4uiEXT, NULL, 865),
+    NAME_FUNC_OFFSET(22929, glVertexAttribI4uivEXT, glVertexAttribI4uivEXT, NULL, 866),
+    NAME_FUNC_OFFSET(22949, glVertexAttribI4usvEXT, glVertexAttribI4usvEXT, NULL, 867),
+    NAME_FUNC_OFFSET(22969, glVertexAttribIPointerEXT, glVertexAttribIPointerEXT, NULL, 868),
+    NAME_FUNC_OFFSET(22992, glFramebufferTextureLayerEXT, glFramebufferTextureLayerEXT, NULL, 869),
+    NAME_FUNC_OFFSET(23018, glColorMaskIndexedEXT, glColorMaskIndexedEXT, NULL, 870),
+    NAME_FUNC_OFFSET(23031, glDisableIndexedEXT, glDisableIndexedEXT, NULL, 871),
+    NAME_FUNC_OFFSET(23042, glEnableIndexedEXT, glEnableIndexedEXT, NULL, 872),
+    NAME_FUNC_OFFSET(23052, glGetBooleanIndexedvEXT, glGetBooleanIndexedvEXT, NULL, 873),
+    NAME_FUNC_OFFSET(23068, glGetIntegerIndexedvEXT, glGetIntegerIndexedvEXT, NULL, 874),
+    NAME_FUNC_OFFSET(23084, glIsEnabledIndexedEXT, glIsEnabledIndexedEXT, NULL, 875),
+    NAME_FUNC_OFFSET(23097, glGetTexParameterIivEXT, glGetTexParameterIivEXT, NULL, 878),
+    NAME_FUNC_OFFSET(23118, glGetTexParameterIuivEXT, glGetTexParameterIuivEXT, NULL, 879),
+    NAME_FUNC_OFFSET(23140, glTexParameterIivEXT, glTexParameterIivEXT, NULL, 880),
+    NAME_FUNC_OFFSET(23158, glTexParameterIuivEXT, glTexParameterIuivEXT, NULL, 881),
+    NAME_FUNC_OFFSET(23177, glBeginConditionalRenderNV, glBeginConditionalRenderNV, NULL, 882),
+    NAME_FUNC_OFFSET(23202, glEndConditionalRenderNV, glEndConditionalRenderNV, NULL, 883),
+    NAME_FUNC_OFFSET(23225, glBeginTransformFeedbackEXT, glBeginTransformFeedbackEXT, NULL, 884),
+    NAME_FUNC_OFFSET(23250, glBindBufferBaseEXT, glBindBufferBaseEXT, NULL, 885),
+    NAME_FUNC_OFFSET(23267, glBindBufferRangeEXT, glBindBufferRangeEXT, NULL, 887),
+    NAME_FUNC_OFFSET(23285, glEndTransformFeedbackEXT, glEndTransformFeedbackEXT, NULL, 888),
+    NAME_FUNC_OFFSET(23308, glGetTransformFeedbackVaryingEXT, glGetTransformFeedbackVaryingEXT, NULL, 889),
+    NAME_FUNC_OFFSET(23338, glTransformFeedbackVaryingsEXT, glTransformFeedbackVaryingsEXT, NULL, 890),
+    NAME_FUNC_OFFSET(23366, glProvokingVertexEXT, glProvokingVertexEXT, NULL, 891),
     NAME_FUNC_OFFSET(-1, NULL, NULL, NULL, 0)
 };
 
index 261242f6fc9ae49d2da055a47ea294a2d3d8101b..2d8a17727c5f24719612c330271d9100e75c52aa 100644 (file)
@@ -100,6 +100,7 @@ main_sources = [
     'main/readpix.c',
     'main/remap.c',
     'main/renderbuffer.c',
+    'main/samplerobj.c',
     'main/scissor.c',
     'main/shaderapi.c',
     'main/shaderobj.c',
@@ -143,6 +144,65 @@ math_sources = [
     'math/m_xform.c',
 ]
 
+math_xform_sources = [
+    'math/m_xform.c'
+]
+
+swrast_sources = [
+    'swrast/s_aaline.c',
+    'swrast/s_aatriangle.c',
+    'swrast/s_accum.c',
+    'swrast/s_alpha.c',
+    'swrast/s_atifragshader.c',
+    'swrast/s_bitmap.c',
+    'swrast/s_blend.c',
+    'swrast/s_blit.c',
+    'swrast/s_clear.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_fragprog.c',
+    'swrast/s_lines.c',
+    'swrast/s_logic.c',
+    'swrast/s_masking.c',
+    'swrast/s_points.c',
+    'swrast/s_readpix.c',
+    'swrast/s_span.c',
+    'swrast/s_stencil.c',
+    'swrast/s_texcombine.c',
+    'swrast/s_texfilter.c',
+    'swrast/s_triangle.c',
+    'swrast/s_zoom.c',
+]
+
+swrast_setup_sources = [
+    'swrast_setup/ss_context.c',
+    'swrast_setup/ss_triangle.c',
+]
+
+tnl_sources = [
+    'tnl/t_context.c',
+    'tnl/t_pipeline.c',
+    'tnl/t_draw.c',
+    'tnl/t_rasterpos.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',
+    'tnl/t_vb_fog.c',
+    'tnl/t_vb_light.c',
+    'tnl/t_vb_normals.c',
+    'tnl/t_vb_points.c',
+    'tnl/t_vp_build.c',
+    'tnl/t_vertex.c',
+    'tnl/t_vertex_sse.c',
+    'tnl/t_vertex_generic.c',
+]
+
 vbo_sources = [
     'vbo/vbo_context.c',
     'vbo/vbo_exec.c',
@@ -160,12 +220,6 @@ vbo_sources = [
     'vbo/vbo_save_loopback.c',
 ]
 
-vf_sources = [
-    'vf/vf.c',
-    'vf/vf_generic.c',
-    'vf/vf_sse.c',
-]
-
 statetracker_sources = [
     'state_tracker/st_atom.c',
     'state_tracker/st_atom_blend.c',
@@ -250,12 +304,21 @@ program_sources = [
     program_parse[0],
 ]
 
+common_driver_sources =        [
+    'drivers/common/driverfuncs.c',
+    'drivers/common/meta.c',
+]
+
 mesa_sources = (
     main_sources +
     math_sources +
+    math_xform_sources +
     program_sources +
     vbo_sources +
-    vf_sources +
+    tnl_sources +
+    swrast_sources +
+    swrast_setup_sources +
+    common_driver_sources +
     statetracker_sources
 )
 
@@ -390,6 +453,18 @@ if env['gcc'] and env['platform'] != 'windows':
         # build dir) to the include path
         env.Append(CPPPATH = [matypes[0].dir])
 
+
+# Create the git_sha1.h file if it doesn't exist already
+try:
+    f = open('main/git_sha1.h', 'r')
+    f.close()
+except IOError:
+    f = open('main/git_sha1.h', 'w')
+    f.close()
+# and update CPPPATH so the git_sha1.h header can be found
+env.Append(CPPPATH = ["#" + env['build_dir'] + "/mesa/main"])
+
+
 #
 # Libraries
 #
@@ -402,3 +477,5 @@ mesa = env.ConvenienceLibrary(
 env.Alias('mesa', mesa)
 
 Export('mesa')
+
+SConscript('drivers/SConscript')
diff --git a/src/mesa/drivers/SConscript b/src/mesa/drivers/SConscript
new file mode 100644 (file)
index 0000000..ab0f894
--- /dev/null
@@ -0,0 +1,6 @@
+Import('*')
+
+SConscript('osmesa/SConscript')
+
+if env['platform'] == 'windows':
+    SConscript('windows/gdi/SConscript')
index 2b00e8979d26a7cbcc7f3e614f777ef9a0f6e52f..6c35fa10d8a23666612f68b1a88b5aa8caa71bd8 100644 (file)
@@ -92,6 +92,8 @@
 #define META_TEXTURE        0x1000
 #define META_VERTEX         0x2000
 #define META_VIEWPORT       0x4000
+#define META_CLAMP_FRAGMENT_COLOR 0x8000
+#define META_CLAMP_VERTEX_COLOR 0x10000
 /*@}*/
 
 
@@ -180,6 +182,12 @@ struct save_state
    GLint ViewportX, ViewportY, ViewportW, ViewportH;
    GLclampd DepthNear, DepthFar;
 
+   /** META_CLAMP_FRAGMENT_COLOR */
+   GLenum ClampFragmentColor;
+
+   /** META_CLAMP_VERTEX_COLOR */
+   GLenum ClampVertexColor;
+
    /** Miscellaneous (always disabled) */
    GLboolean Lighting;
 };
@@ -569,6 +577,26 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state)
       _mesa_DepthRange(0.0, 1.0);
    }
 
+   if (state & META_CLAMP_FRAGMENT_COLOR) {
+      save->ClampFragmentColor = ctx->Color.ClampFragmentColor;
+
+      /* Generally in here we want to do clamping according to whether
+       * it's for the pixel path (ClampFragmentColor is GL_TRUE),
+       * regardless of the internal implementation of the metaops.
+       */
+      if (ctx->Color.ClampFragmentColor != GL_TRUE)
+        _mesa_ClampColorARB(GL_CLAMP_FRAGMENT_COLOR, GL_FALSE);
+   }
+
+   if (state & META_CLAMP_VERTEX_COLOR) {
+      save->ClampVertexColor = ctx->Light.ClampVertexColor;
+
+      /* Generally in here we never want vertex color clamping --
+       * result clamping is only dependent on fragment clamping.
+       */
+      _mesa_ClampColorARB(GL_CLAMP_VERTEX_COLOR, GL_FALSE);
+   }
+
    /* misc */
    {
       save->Lighting = ctx->Light.Enabled;
@@ -833,6 +861,14 @@ _mesa_meta_end(struct gl_context *ctx)
       _mesa_DepthRange(save->DepthNear, save->DepthFar);
    }
 
+   if (state & META_CLAMP_FRAGMENT_COLOR) {
+      _mesa_ClampColorARB(GL_CLAMP_FRAGMENT_COLOR, save->ClampFragmentColor);
+   }
+
+   if (state & META_CLAMP_VERTEX_COLOR) {
+      _mesa_ClampColorARB(GL_CLAMP_VERTEX_COLOR, save->ClampVertexColor);
+   }
+
    /* misc */
    if (save->Lighting) {
       _mesa_set_enable(ctx, GL_LIGHTING, GL_TRUE);
@@ -1124,12 +1160,12 @@ blitframebuffer_texture(struct gl_context *ctx,
       if (readAtt && readAtt->Texture) {
          const struct gl_texture_object *texObj = readAtt->Texture;
          const GLuint srcLevel = readAtt->TextureLevel;
-         const GLenum minFilterSave = texObj->MinFilter;
-         const GLenum magFilterSave = texObj->MagFilter;
+         const GLenum minFilterSave = texObj->Sampler.MinFilter;
+         const GLenum magFilterSave = texObj->Sampler.MagFilter;
          const GLint baseLevelSave = texObj->BaseLevel;
          const GLint maxLevelSave = texObj->MaxLevel;
-         const GLenum wrapSSave = texObj->WrapS;
-         const GLenum wrapTSave = texObj->WrapT;
+         const GLenum wrapSSave = texObj->Sampler.WrapS;
+         const GLenum wrapTSave = texObj->Sampler.WrapT;
          const GLenum target = texObj->Target;
 
          if (drawAtt->Texture == readAtt->Texture) {
@@ -1441,6 +1477,9 @@ _mesa_meta_Clear(struct gl_context *ctx, GLbitfield buffers)
    /* GL_COLOR_BUFFER_BIT */
    if (buffers & BUFFER_BITS_COLOR) {
       /* leave colormask, glDrawBuffer state as-is */
+
+      /* Clears never have the color clamped. */
+      _mesa_ClampColorARB(GL_CLAMP_FRAGMENT_COLOR, GL_FALSE);
    }
    else {
       ASSERT(metaSave & META_COLOR_MASK);
@@ -1494,10 +1533,10 @@ _mesa_meta_Clear(struct gl_context *ctx, GLbitfield buffers)
 
       /* vertex colors */
       for (i = 0; i < 4; i++) {
-         verts[i].r = ctx->Color.ClearColor[0];
-         verts[i].g = ctx->Color.ClearColor[1];
-         verts[i].b = ctx->Color.ClearColor[2];
-         verts[i].a = ctx->Color.ClearColor[3];
+         verts[i].r = ctx->Color.ClearColorUnclamped[0];
+         verts[i].g = ctx->Color.ClearColorUnclamped[1];
+         verts[i].b = ctx->Color.ClearColorUnclamped[2];
+         verts[i].a = ctx->Color.ClearColorUnclamped[3];
       }
 
       /* upload new vertex data */
@@ -1803,6 +1842,14 @@ _mesa_meta_DrawPixels(struct gl_context *ctx,
          texIntFormat = format;
       else
          texIntFormat = GL_RGBA;
+
+      /* If we're not supposed to clamp the resulting color, then just
+       * promote our texture to fully float.  We could do better by
+       * just going for the matching set of channels, in floating
+       * point.
+       */
+      if (ctx->Color.ClampFragmentColor != GL_TRUE)
+        texIntFormat = GL_RGBA32F;
    }
    else if (_mesa_is_stencil_format(format)) {
       if (ctx->Extensions.ARB_fragment_program &&
@@ -1861,6 +1908,7 @@ _mesa_meta_DrawPixels(struct gl_context *ctx,
                           META_TRANSFORM |
                           META_VERTEX |
                           META_VIEWPORT |
+                         META_CLAMP_FRAGMENT_COLOR |
                           metaExtraSave));
 
    newTex = alloc_texture(tex, width, height, texIntFormat);
@@ -2259,13 +2307,13 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target,
    struct vertex verts[4];
    const GLuint baseLevel = texObj->BaseLevel;
    const GLuint maxLevel = texObj->MaxLevel;
-   const GLenum minFilterSave = texObj->MinFilter;
-   const GLenum magFilterSave = texObj->MagFilter;
+   const GLenum minFilterSave = texObj->Sampler.MinFilter;
+   const GLenum magFilterSave = texObj->Sampler.MagFilter;
    const GLint maxLevelSave = texObj->MaxLevel;
    const GLboolean genMipmapSave = texObj->GenerateMipmap;
-   const GLenum wrapSSave = texObj->WrapS;
-   const GLenum wrapTSave = texObj->WrapT;
-   const GLenum wrapRSave = texObj->WrapR;
+   const GLenum wrapSSave = texObj->Sampler.WrapS;
+   const GLenum wrapTSave = texObj->Sampler.WrapT;
+   const GLenum wrapRSave = texObj->Sampler.WrapR;
    const GLuint fboSave = ctx->DrawBuffer->Name;
    const GLuint original_active_unit = ctx->Texture.CurrentUnit;
    GLenum faceTarget;
index f436d1398c26251359c85c1525e91c29299880fa..abd79562f98490692d1f9991a8a7af96cf470144 100644 (file)
 #define HW_WRITE_CLIPLOOP()    HW_CLIPLOOP()
 #endif
 
-#ifdef SPANTMP_MESA_FMT
-#define SPANTMP_PIXEL_FMT GL_NONE
-#define SPANTMP_PIXEL_TYPE GL_NONE
-#endif
-
-#ifndef SPANTMP_MESA_FMT
-#define SPANTMP_MESA_FMT MESA_FORMAT_COUNT
-#endif
-
 #if (SPANTMP_PIXEL_FMT == GL_RGB)  && (SPANTMP_PIXEL_TYPE == GL_UNSIGNED_SHORT_5_6_5)
 
 /**
        rgba[3] = p;                                                    \
      } while (0)
 
-#elif (SPANTMP_MESA_FMT == MESA_FORMAT_R8)
-
-#ifndef GET_VALUE
-#ifndef GET_PTR
-#define GET_PTR(_x, _y) (     buf + (_x) + (_y) * pitch)
-#endif
-
-#define GET_VALUE(_x, _y) *(volatile GLubyte *)(GET_PTR(_x, _y))
-#define PUT_VALUE(_x, _y, _v) *(volatile GLubyte *)(GET_PTR(_x, _y)) = (_v)
-#endif /* GET_VALUE */
-
-# define INIT_MONO_PIXEL(p, color)                       \
-     p = color[0]
-
-# define WRITE_RGBA(_x, _y, r, g, b, a)                                 \
-   PUT_VALUE(_x, _y, r)
-
-#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p)
-
-#define READ_RGBA( rgba, _x, _y )                                      \
-     do {                                                              \
-        GLubyte p = GET_VALUE(_x, _y);                                 \
-       rgba[0] = p;                                                    \
-       rgba[1] = 0;                                                    \
-       rgba[2] = 0;                                                    \
-       rgba[3] = 0;                                                    \
-     } while (0)
-
-#elif (SPANTMP_MESA_FMT == MESA_FORMAT_RG88)
-
-#ifndef GET_VALUE
-#ifndef GET_PTR
-#define GET_PTR(_x, _y) (     buf + (_x) * 2 + (_y) * pitch)
-#endif
-
-#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y))
-#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v)
-#endif /* GET_VALUE */
-
-# define INIT_MONO_PIXEL(p, color)                       \
-   PACK_COLOR_8888(color[0], color[1], 0, 0)
-
-# define WRITE_RGBA(_x, _y, r, g, b, a)                                 \
-   PUT_VALUE(_x, _y, r)
-
-#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p)
-
-#define READ_RGBA( rgba, _x, _y )                                      \
-     do {                                                              \
-        GLushort p = GET_VALUE(_x, _y);                                        \
-       rgba[0] = p & 0xff;                                             \
-       rgba[1] = (p >> 8) & 0xff;                                      \
-       rgba[2] = 0;                                                    \
-       rgba[3] = 0;                                                    \
-     } while (0)
-
-#elif (SPANTMP_MESA_FMT == MESA_FORMAT_R16)
-
-#ifndef GET_VALUE
-#ifndef GET_PTR
-#define GET_PTR(_x, _y) (     buf + (_x) * 2 + (_y) * pitch)
-#endif
-
-#define GET_VALUE(_x, _y) *(volatile GLushort *)(GET_PTR(_x, _y))
-#define PUT_VALUE(_x, _y, _v) *(volatile GLushort *)(GET_PTR(_x, _y)) = (_v)
-#endif /* GET_VALUE */
-
-# define INIT_MONO_PIXEL(p, color)                       \
-     p = color[0]
-
-# define WRITE_RGBA(_x, _y, r, g, b, a)                                 \
-   PUT_VALUE(_x, _y, r)
-
-#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p)
-
-#define READ_RGBA( rgba, _x, _y )                                      \
-     do {                                                              \
-        GLushort p = GET_VALUE(_x, _y);                                        \
-       rgba[0] = p;                                                    \
-       rgba[1] = 0;                                                    \
-       rgba[2] = 0;                                                    \
-       rgba[3] = 0;                                                    \
-     } while (0)
-
-#elif (SPANTMP_MESA_FMT == MESA_FORMAT_RG1616)
-
-#ifndef GET_VALUE
-#ifndef GET_PTR
-#define GET_PTR(_x, _y) (     buf + (_x) * 4 + (_y) * pitch)
-#endif
-
-#define GET_VALUE(_x, _y) *(volatile GLuint *)(GET_PTR(_x, _y))
-#define PUT_VALUE(_x, _y, _v) *(volatile GLuint *)(GET_PTR(_x, _y)) = (_v)
-#endif /* GET_VALUE */
-
-# define INIT_MONO_PIXEL(p, color)                       \
-   ((color[1] << 16) | (color[0]))
-
-# define WRITE_RGBA(_x, _y, r, g, b, a)                                 \
-   PUT_VALUE(_x, _y, r)
-
-#define WRITE_PIXEL(_x, _y, p) PUT_VALUE(_x, _y, p)
-
-#define READ_RGBA( rgba, _x, _y )                                      \
-     do {                                                              \
-        GLuint p = GET_VALUE(_x, _y);                                  \
-       rgba[0] = p & 0xffff;                                           \
-       rgba[1] = (p >> 16) & 0xffff;                                   \
-       rgba[2] = 0;                                                    \
-       rgba[3] = 0;                                                    \
-     } while (0)
-
 #else
 #error SPANTMP_PIXEL_FMT must be set to a valid value!
 #endif
@@ -1035,4 +914,3 @@ static void TAG(InitPointers)(struct gl_renderbuffer *rb)
 #undef GET_PTR
 #undef SPANTMP_PIXEL_FMT
 #undef SPANTMP_PIXEL_TYPE
-#undef SPANTMP_MESA_FMT
index 8eec07d5bcc611494f5e9be6dd46b95afa41d4b4..e927cf0addd6ad2006db1a392e5d932c0f28fd23 100644 (file)
@@ -1264,17 +1264,18 @@ driCalculateTextureFirstLastLevel( driTextureObject * t )
    case GL_TEXTURE_2D:
    case GL_TEXTURE_3D:
    case GL_TEXTURE_CUBE_MAP:
-      if (tObj->MinFilter == GL_NEAREST || tObj->MinFilter == GL_LINEAR) {
+      if (tObj->Sampler.MinFilter == GL_NEAREST ||
+          tObj->Sampler.MinFilter == GL_LINEAR) {
          /* GL_NEAREST and GL_LINEAR only care about GL_TEXTURE_BASE_LEVEL.
           */
 
          firstLevel = lastLevel = tObj->BaseLevel;
       }
       else {
-        firstLevel = tObj->BaseLevel + (GLint)(tObj->MinLod + 0.5);
+        firstLevel = tObj->BaseLevel + (GLint)(tObj->Sampler.MinLod + 0.5);
         firstLevel = MAX2(firstLevel, tObj->BaseLevel);
         firstLevel = MIN2(firstLevel, tObj->BaseLevel + baseImage->MaxLog2);
-        lastLevel = tObj->BaseLevel + (GLint)(tObj->MaxLod + 0.5);
+        lastLevel = tObj->BaseLevel + (GLint)(tObj->Sampler.MaxLod + 0.5);
         lastLevel = MAX2(lastLevel, t->tObj->BaseLevel);
         lastLevel = MIN2(lastLevel, t->tObj->BaseLevel + baseImage->MaxLog2);
         lastLevel = MIN2(lastLevel, t->tObj->MaxLevel);
index 083edfaa9b40955315e4f43ad85e0d6065680874..d8281838233e2a2632f8f3d776e2615c03c89c8b 100644 (file)
@@ -96,7 +96,6 @@ driParseDebugString( const char * debug,
  * 
  * \param buffer         Buffer to hold the \c GL_RENDERER string.
  * \param hardware_name  Name of the hardware.
- * \param driver_date    Driver date.
  * \param agp_mode       AGP mode (speed).
  * 
  * \returns
@@ -105,12 +104,12 @@ driParseDebugString( const char * debug,
  */
 unsigned
 driGetRendererString( char * buffer, const char * hardware_name,
-                     const char * driver_date, GLuint agp_mode )
+                     GLuint agp_mode )
 {
    unsigned offset;
    char *cpu;
 
-   offset = sprintf( buffer, "Mesa DRI %s %s", hardware_name, driver_date );
+   offset = sprintf( buffer, "Mesa DRI %s", hardware_name );
 
    /* Append any AGP-specific information.
     */
index 6349fb4b95c11fd560e0ed6bc11753ff35173812..a1c9ea604ee294e3fce056a20be37f018a5a1f6e 100644 (file)
@@ -76,7 +76,7 @@ extern unsigned driParseDebugString( const char * debug,
     const struct dri_debug_control * control );
 
 extern unsigned driGetRendererString( char * buffer,
-    const char * hardware_name, const char * driver_date, GLuint agp_mode );
+    const char * hardware_name, GLuint agp_mode );
 
 extern void driInitExtensions( struct gl_context * ctx, 
     const struct dri_extension * card_extensions, GLboolean enable_imaging );
index 0312c072437af37c77510c25b73b27bad4f81c3e..0226b38c4fc8ecd9f1601c8dfc40801094a58089 100644 (file)
@@ -64,7 +64,25 @@ extern char *program_invocation_name, *program_invocation_short_name;
    the basename to match BSD getprogname() */
 #    include <stdlib.h>
 #    include <libgen.h>
-#    define GET_PROGRAM_NAME() basename(getexecname())
+
+static const char *__getProgramName () {
+    static const char *progname;
+
+    if (progname == NULL) {
+       const char *e = getexecname();
+       if (e != NULL) {
+           /* Have to make a copy since getexecname can return a readonly
+              string, but basename expects to be able to modify its arg. */
+           char *n = strdup(e);
+           if (n != NULL) {
+               progname = basename(n);
+           }
+       }
+    }
+    return progname;
+}
+
+#    define GET_PROGRAM_NAME() __getProgramName()
 #endif
 
 #if !defined(GET_PROGRAM_NAME)
index 90dbb6bbe80b3cb7ae7904fc665ecacd5e0e7d4c..604b1e36f9782adc8840b7de87051532b9c57261 100644 (file)
@@ -67,8 +67,6 @@ int I810_DEBUG = (0);
 PUBLIC const char __driConfigOptions[] = { 0 };
 const GLuint __driNConfigOptions = 0;
 
-#define DRIVER_DATE                     "20050821"
-
 static const GLubyte *i810GetString( struct gl_context *ctx, GLenum name )
 {
    static char buffer[128];
@@ -88,7 +86,7 @@ static const GLubyte *i810GetString( struct gl_context *ctx, GLenum name )
       default:                  chipset = "Unknown i810-class Chipset"; break;
       }
 
-      (void) driGetRendererString( buffer, chipset, DRIVER_DATE, 0 );
+      (void) driGetRendererString( buffer, chipset, 0 );
       return (GLubyte *) buffer;
    }
    default:
index 49364aeb225efd412a06bf9e0415863948281fd7..dba4ebaa5c76bc1add37a177d2162f53c5b3ca00 100644 (file)
@@ -204,10 +204,10 @@ i810AllocTexObj( struct gl_context *ctx, struct gl_texture_object *texObj )
       
       make_empty_list( & t->base );
 
-      i810SetTexWrapping( t, texObj->WrapS, texObj->WrapT );
+      i810SetTexWrapping( t, texObj->Sampler.WrapS, texObj->Sampler.WrapT );
       /*i830SetTexMaxAnisotropy( t, texObj->MaxAnisotropy );*/
-      i810SetTexFilter( imesa, t, texObj->MinFilter, texObj->MagFilter, bias );
-      i810SetTexBorderColor( t, texObj->BorderColor.f );
+      i810SetTexFilter( imesa, t, texObj->Sampler.MinFilter, texObj->Sampler.MagFilter, bias );
+      i810SetTexBorderColor( t, texObj->Sampler.BorderColor.f );
    }
 
    return t;
@@ -238,17 +238,17 @@ static void i810TexParameter( struct gl_context *ctx, GLenum target,
    case GL_TEXTURE_MAG_FILTER:
       {
          GLfloat bias = ctx->Texture.Unit[ctx->Texture.CurrentUnit].LodBias;
-         i810SetTexFilter( imesa, t, tObj->MinFilter, tObj->MagFilter, bias );
+         i810SetTexFilter( imesa, t, tObj->Sampler.MinFilter, tObj->Sampler.MagFilter, bias );
       }
       break;
 
    case GL_TEXTURE_WRAP_S:
    case GL_TEXTURE_WRAP_T:
-      i810SetTexWrapping( t, tObj->WrapS, tObj->WrapT );
+      i810SetTexWrapping( t, tObj->Sampler.WrapS, tObj->Sampler.WrapT );
       break;
   
    case GL_TEXTURE_BORDER_COLOR:
-      i810SetTexBorderColor( t, tObj->BorderColor.f );
+      i810SetTexBorderColor( t, tObj->Sampler.BorderColor.f );
       break;
 
    case GL_TEXTURE_BASE_LEVEL:
index c35b4b5ed06d1a1b3a77809656f1141f45b8b028..7554bd5e7b932bd256f253c5449b670dec06d116 100644 (file)
@@ -193,7 +193,7 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
       float maxlod;
       uint32_t minlod_fixed, maxlod_fixed;
 
-      switch (tObj->MinFilter) {
+      switch (tObj->Sampler.MinFilter) {
       case GL_NEAREST:
          minFilt = FILTER_NEAREST;
          mipFilt = MIPFILTER_NONE;
@@ -222,12 +222,12 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
          return GL_FALSE;
       }
 
-      if (tObj->MaxAnisotropy > 1.0) {
+      if (tObj->Sampler.MaxAnisotropy > 1.0) {
          minFilt = FILTER_ANISOTROPIC;
          magFilt = FILTER_ANISOTROPIC;
       }
       else {
-         switch (tObj->MagFilter) {
+         switch (tObj->Sampler.MagFilter) {
          case GL_NEAREST:
             magFilt = FILTER_NEAREST;
             break;
@@ -239,7 +239,7 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
          }
       }
 
-      lodbias = (int) ((tUnit->LodBias + tObj->LodBias) * 16.0);
+      lodbias = (int) ((tUnit->LodBias + tObj->Sampler.LodBias) * 16.0);
       if (lodbias < -64)
           lodbias = -64;
       if (lodbias > 63)
@@ -259,8 +259,8 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
        * addressable (smallest resolution) LOD.  Use it to cover both
        * MAX_LEVEL and MAX_LOD.
        */
-      minlod_fixed = U_FIXED(CLAMP(tObj->MinLod, 0.0, 11), 4);
-      maxlod = MIN2(tObj->MaxLod, tObj->_MaxLevel - tObj->BaseLevel);
+      minlod_fixed = U_FIXED(CLAMP(tObj->Sampler.MinLod, 0.0, 11), 4);
+      maxlod = MIN2(tObj->Sampler.MaxLod, tObj->_MaxLevel - tObj->BaseLevel);
       if (intel->intelScreen->deviceID == PCI_CHIP_I855_GM ||
          intel->intelScreen->deviceID == PCI_CHIP_I865_G) {
         maxlod_fixed = U_FIXED(CLAMP(maxlod, 0.0, 11.75), 2);
@@ -279,8 +279,8 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
    }
 
    {
-      GLenum ws = tObj->WrapS;
-      GLenum wt = tObj->WrapT;
+      GLenum ws = tObj->Sampler.WrapS;
+      GLenum wt = tObj->Sampler.WrapT;
 
 
       /* 3D textures not available on i830
@@ -300,10 +300,10 @@ i830_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
    }
 
    /* convert border color from float to ubyte */
-   CLAMPED_FLOAT_TO_UBYTE(border[0], tObj->BorderColor.f[0]);
-   CLAMPED_FLOAT_TO_UBYTE(border[1], tObj->BorderColor.f[1]);
-   CLAMPED_FLOAT_TO_UBYTE(border[2], tObj->BorderColor.f[2]);
-   CLAMPED_FLOAT_TO_UBYTE(border[3], tObj->BorderColor.f[3]);
+   CLAMPED_FLOAT_TO_UBYTE(border[0], tObj->Sampler.BorderColor.f[0]);
+   CLAMPED_FLOAT_TO_UBYTE(border[1], tObj->Sampler.BorderColor.f[1]);
+   CLAMPED_FLOAT_TO_UBYTE(border[2], tObj->Sampler.BorderColor.f[2]);
+   CLAMPED_FLOAT_TO_UBYTE(border[3], tObj->Sampler.BorderColor.f[3]);
 
    state[I830_TEXREG_TM0S4] = PACK_COLOR_8888(border[3],
                                              border[0],
index 7389a1d57a90750b54eaa2153290b43fa629ca80..f02f2d782678e707db0c0ace3c41141f25949a3b 100644 (file)
@@ -69,8 +69,6 @@ i915InvalidateState(struct gl_context * ctx, GLuint new_state)
          p->params_uptodate = 0;
    }
 
-   if (new_state & (_NEW_FOG | _NEW_HINT | _NEW_PROGRAM | _NEW_PROGRAM_CONSTANTS))
-      i915_update_fog(ctx);
    if (new_state & (_NEW_STENCIL | _NEW_BUFFERS | _NEW_POLYGON))
       i915_update_stencil(ctx);
    if (new_state & (_NEW_LIGHT))
@@ -209,5 +207,11 @@ i915CreateContext(int api,
 
    i915InitState(i915);
 
+   /* Always enable pixel fog.  Vertex fog using fog coord will conflict
+    * with fog code appended onto fragment program.
+    */
+   _tnl_allow_vertex_fog(ctx, 0);
+   _tnl_allow_pixel_fog(ctx, 1);
+
    return GL_TRUE;
 }
index 601620275f46d0d19ad0ccd8ba7bcb098a3aa5d3..577a01e290ce9eb83e9829b7a484f71c7910de5d 100644 (file)
@@ -46,7 +46,6 @@
 #define I915_UPLOAD_STIPPLE          0x4
 #define I915_UPLOAD_PROGRAM          0x8
 #define I915_UPLOAD_CONSTANTS        0x10
-#define I915_UPLOAD_FOG              0x20
 #define I915_UPLOAD_INVARIENT        0x40
 #define I915_UPLOAD_DEFAULTS         0x80
 #define I915_UPLOAD_RASTER_RULES     0x100
 #define I915_BLENDREG_BLENDCOLOR1      2
 #define I915_BLEND_SETUP_SIZE          3
 
-#define I915_FOGREG_COLOR              0
-#define I915_FOGREG_MODE0              1
-#define I915_FOGREG_MODE1              2
-#define I915_FOGREG_MODE2              3
-#define I915_FOGREG_MODE3              4
-#define I915_FOG_SETUP_SIZE            5
-
 #define I915_STPREG_ST0        0
 #define I915_STPREG_ST1        1
 #define I915_STP_SETUP_SIZE    2
@@ -227,7 +219,6 @@ struct i915_hw_state
    GLuint Blend[I915_BLEND_SETUP_SIZE];
    GLuint Buffer[I915_DEST_SETUP_SIZE];
    GLuint Stipple[I915_STP_SETUP_SIZE];
-   GLuint Fog[I915_FOG_SETUP_SIZE];
    GLuint Defaults[I915_DEF_SETUP_SIZE];
    GLuint RasterRules[I915_RASTER_RULES_SETUP_SIZE];
    GLuint Tex[I915_TEX_UNITS][I915_TEX_SETUP_SIZE];
@@ -254,16 +245,11 @@ struct i915_hw_state
    GLuint emitted;              /* I915_UPLOAD_* */
 };
 
-#define I915_FOG_PIXEL  2
-#define I915_FOG_VERTEX 1
-#define I915_FOG_NONE   0
-
 struct i915_context
 {
    struct intel_context intel;
 
    GLuint last_ReallyEnabled;
-   GLuint vertex_fog;
    GLuint lodbias_ss2[MAX_TEXTURE_UNITS];
 
 
@@ -350,7 +336,6 @@ extern void i915_print_ureg(const char *msg, GLuint ureg);
  */
 extern void i915InitStateFunctions(struct dd_function_table *functions);
 extern void i915InitState(struct i915_context *i915);
-extern void i915_update_fog(struct gl_context * ctx);
 extern void i915_update_stencil(struct gl_context * ctx);
 extern void i915_update_provoking_vertex(struct gl_context *ctx);
 
index 2bfe665cb6551a0f7fb4e2faa5d356641e1dffe1..b67ebb9a1ec2879b4d88b1ed477b68b78638838c 100644 (file)
@@ -1285,15 +1285,6 @@ i915ProgramStringNotify(struct gl_context * ctx,
    if (target == GL_FRAGMENT_PROGRAM_ARB) {
       struct i915_fragment_program *p = (struct i915_fragment_program *) prog;
       p->translated = 0;
-
-      /* Hack: make sure fog is correctly enabled according to this
-       * fragment program's fog options.
-       */
-      if (p->FragProg.FogOption) {
-         /* add extra instructions to do fog, then turn off FogOption field */
-         _mesa_append_fog_code(ctx, &p->FragProg);
-         p->FragProg.FogOption = GL_NONE;
-      }
    }
 
    (void) _tnl_program_string(ctx, target, prog);
@@ -1371,7 +1362,7 @@ i915ValidateFragmentProgram(struct i915_context *i915)
        EMIT_ATTR(_TNL_ATTRIB_COLOR1, EMIT_4UB_4F_BGRA, S4_VFMT_SPEC_FOG, 4);
    }
 
-   if ((inputsRead & FRAG_BIT_FOGC) || i915->vertex_fog != I915_FOG_NONE) {
+   if ((inputsRead & FRAG_BIT_FOGC)) {
       EMIT_ATTR(_TNL_ATTRIB_FOG, EMIT_1F, S4_VFMT_FOG_PARAM, 4);
    }
 
index 3b1af4c455e2f90a3125621ecff31eb99e98edc9..99212ad4fd1c7a18bb66f1fa1d3a6a43023ff8cc 100644 (file)
@@ -724,157 +724,17 @@ i915ShadeModel(struct gl_context * ctx, GLenum mode)
 
 /* =============================================================
  * Fog
+ *
+ * This empty function remains because _mesa_init_driver_state calls
+ * dd_function_table::Fogfv unconditionally.  We have to have some function
+ * there so that it doesn't try to call a NULL pointer.
  */
-void
-i915_update_fog(struct gl_context * ctx)
-{
-   struct i915_context *i915 = I915_CONTEXT(ctx);
-   GLenum mode;
-   GLboolean enabled;
-   GLboolean try_pixel_fog;
-   GLuint dw;
-
-   if (ctx->FragmentProgram._Current) {
-      /* Pull in static fog state from program */
-      mode = ctx->FragmentProgram._Current->FogOption;
-      enabled = (mode != GL_NONE);
-      try_pixel_fog = 0;
-   }
-   else {
-      enabled = ctx->Fog.Enabled;
-      mode = ctx->Fog.Mode;
-#if 0
-      /* XXX - DISABLED -- Need ortho fallback */
-      try_pixel_fog = (ctx->Fog.FogCoordinateSource == GL_FRAGMENT_DEPTH_EXT
-                       && ctx->Hint.Fog == GL_NICEST);
-#else
-      try_pixel_fog = 0;
-#endif
-   }
-
-   if (!enabled) {
-      i915->vertex_fog = I915_FOG_NONE;
-   }
-   else if (try_pixel_fog) {
-      I915_STATECHANGE(i915, I915_UPLOAD_FOG);
-      i915->state.Fog[I915_FOGREG_MODE1] &= ~FMC1_FOGFUNC_MASK;
-      i915->vertex_fog = I915_FOG_PIXEL;
-
-      switch (mode) {
-      case GL_LINEAR:
-         if (ctx->Fog.End <= ctx->Fog.Start) {
-            /* XXX - this won't work with fragment programs.  Need to
-             * either fallback or append fog instructions to end of
-             * program in the case of linear fog.
-             */
-            printf("vertex fog!\n");
-            i915->state.Fog[I915_FOGREG_MODE1] |= FMC1_FOGFUNC_VERTEX;
-            i915->vertex_fog = I915_FOG_VERTEX;
-         }
-         else {
-            GLfloat c2 = 1.0 / (ctx->Fog.End - ctx->Fog.Start);
-            GLfloat c1 = ctx->Fog.End * c2;
-
-            i915->state.Fog[I915_FOGREG_MODE1] &= ~FMC1_C1_MASK;
-            i915->state.Fog[I915_FOGREG_MODE1] |= FMC1_FOGFUNC_PIXEL_LINEAR;
-            i915->state.Fog[I915_FOGREG_MODE1] |=
-               ((GLuint) (c1 * FMC1_C1_ONE)) & FMC1_C1_MASK;
-
-            if (i915->state.Fog[I915_FOGREG_MODE1] & FMC1_FOGINDEX_Z) {
-               i915->state.Fog[I915_FOGREG_MODE2]
-                  = (GLuint) (c2 * FMC2_C2_ONE);
-            }
-            else {
-               fi_type fi;
-               fi.f = c2;
-               i915->state.Fog[I915_FOGREG_MODE2] = fi.i;
-            }
-         }
-         break;
-      case GL_EXP:
-         i915->state.Fog[I915_FOGREG_MODE1] |= FMC1_FOGFUNC_PIXEL_EXP;
-         break;
-      case GL_EXP2:
-         i915->state.Fog[I915_FOGREG_MODE1] |= FMC1_FOGFUNC_PIXEL_EXP2;
-         break;
-      default:
-         break;
-      }
-   }
-   else { /* if (i915->vertex_fog != I915_FOG_VERTEX) */
-      I915_STATECHANGE(i915, I915_UPLOAD_FOG);
-      i915->state.Fog[I915_FOGREG_MODE1] &= ~FMC1_FOGFUNC_MASK;
-      i915->state.Fog[I915_FOGREG_MODE1] |= FMC1_FOGFUNC_VERTEX;
-      i915->vertex_fog = I915_FOG_VERTEX;
-   }
-
-   I915_ACTIVESTATE(i915, I915_UPLOAD_FOG, enabled);
-   dw = i915->state.Ctx[I915_CTXREG_LIS5];
-   if (enabled)
-      dw |= S5_FOG_ENABLE;
-   else
-      dw &= ~S5_FOG_ENABLE;
-   if (dw != i915->state.Ctx[I915_CTXREG_LIS5]) {
-      i915->state.Ctx[I915_CTXREG_LIS5] = dw;
-      I915_STATECHANGE(i915, I915_UPLOAD_CTX);
-   }
-
-   /* Always enable pixel fog.  Vertex fog using fog coord will conflict
-    * with fog code appended onto fragment program.
-    */
-    _tnl_allow_vertex_fog( ctx, 0 );
-    _tnl_allow_pixel_fog( ctx, 1 );
-}
-
 static void
 i915Fogfv(struct gl_context * ctx, GLenum pname, const GLfloat * param)
 {
-   struct i915_context *i915 = I915_CONTEXT(ctx);
-
-   switch (pname) {
-   case GL_FOG_COORDINATE_SOURCE_EXT:
-   case GL_FOG_MODE:
-   case GL_FOG_START:
-   case GL_FOG_END:
-      break;
-
-   case GL_FOG_DENSITY:
-      I915_STATECHANGE(i915, I915_UPLOAD_FOG);
-
-      if (i915->state.Fog[I915_FOGREG_MODE1] & FMC1_FOGINDEX_Z) {
-         i915->state.Fog[I915_FOGREG_MODE3] =
-            (GLuint) (ctx->Fog.Density * FMC3_D_ONE);
-      }
-      else {
-         fi_type fi;
-         fi.f = ctx->Fog.Density;
-         i915->state.Fog[I915_FOGREG_MODE3] = fi.i;
-      }
-      break;
-
-   case GL_FOG_COLOR:
-      I915_STATECHANGE(i915, I915_UPLOAD_FOG);
-      i915->state.Fog[I915_FOGREG_COLOR] =
-         (_3DSTATE_FOG_COLOR_CMD |
-          ((GLubyte) (ctx->Fog.Color[0] * 255.0F) << 16) |
-          ((GLubyte) (ctx->Fog.Color[1] * 255.0F) << 8) |
-          ((GLubyte) (ctx->Fog.Color[2] * 255.0F) << 0));
-      break;
-
-   default:
-      break;
-   }
-}
-
-static void
-i915Hint(struct gl_context * ctx, GLenum target, GLenum state)
-{
-   switch (target) {
-   case GL_FOG_HINT:
-      break;
-   default:
-      break;
-   }
+   (void) ctx;
+   (void) pname;
+   (void) param;
 }
 
 /* =============================================================
@@ -971,9 +831,6 @@ i915Enable(struct gl_context * ctx, GLenum cap, GLboolean state)
       }
       break;
 
-   case GL_FOG:
-      break;
-
    case GL_CULL_FACE:
       i915CullFaceFrontFace(ctx, 0);
       break;
@@ -1107,19 +964,6 @@ i915_init_packets(struct i915_context *i915)
       i915->state.Stipple[I915_STPREG_ST0] = _3DSTATE_STIPPLE;
    }
 
-
-   {
-      I915_STATECHANGE(i915, I915_UPLOAD_FOG);
-      i915->state.Fog[I915_FOGREG_MODE0] = _3DSTATE_FOG_MODE_CMD;
-      i915->state.Fog[I915_FOGREG_MODE1] = (FMC1_FOGFUNC_MODIFY_ENABLE |
-                                            FMC1_FOGFUNC_VERTEX |
-                                            FMC1_FOGINDEX_MODIFY_ENABLE |
-                                            FMC1_FOGINDEX_W |
-                                            FMC1_C1_C2_MODIFY_ENABLE |
-                                            FMC1_DENSITY_MODIFY_ENABLE);
-      i915->state.Fog[I915_FOGREG_COLOR] = _3DSTATE_FOG_COLOR_CMD;
-   }
-
    {
       i915->state.Buffer[I915_DESTREG_DV0] = _3DSTATE_DST_BUF_VARS_CMD;
 
@@ -1202,7 +1046,6 @@ i915InitStateFunctions(struct dd_function_table *functions)
    functions->Enable = i915Enable;
    functions->Fogfv = i915Fogfv;
    functions->FrontFace = i915CullFaceFrontFace;
-   functions->Hint = i915Hint;
    functions->LightModelfv = i915LightModelfv;
    functions->LineWidth = i915LineWidth;
    functions->LogicOpcode = i915LogicOp;
index af140c85f502fb47181607bd348ab0853daf590d..742bb994adb6ca07eb8600aa9a82cf096ac63ccc 100644 (file)
@@ -164,7 +164,7 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
 
    format = translate_texture_format(firstImage->TexFormat,
                                     firstImage->InternalFormat,
-                                    tObj->DepthMode);
+                                    tObj->Sampler.DepthMode);
    pitch = intelObj->mt->region->pitch * intelObj->mt->cpp;
 
    state[I915_TEXREG_MS3] =
@@ -181,7 +181,7 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
     * (lowest resolution) LOD.  Use it to cover both MAX_LEVEL and
     * MAX_LOD.
     */
-   maxlod = MIN2(tObj->MaxLod, tObj->_MaxLevel - tObj->BaseLevel);
+   maxlod = MIN2(tObj->Sampler.MaxLod, tObj->_MaxLevel - tObj->BaseLevel);
    state[I915_TEXREG_MS4] =
       ((((pitch / 4) - 1) << MS4_PITCH_SHIFT) |
        MS4_CUBE_FACE_ENA_MASK |
@@ -192,7 +192,7 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
    {
       GLuint minFilt, mipFilt, magFilt;
 
-      switch (tObj->MinFilter) {
+      switch (tObj->Sampler.MinFilter) {
       case GL_NEAREST:
          minFilt = FILTER_NEAREST;
          mipFilt = MIPFILTER_NONE;
@@ -221,16 +221,16 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
          return GL_FALSE;
       }
 
-      if (tObj->MaxAnisotropy > 1.0) {
+      if (tObj->Sampler.MaxAnisotropy > 1.0) {
          minFilt = FILTER_ANISOTROPIC;
          magFilt = FILTER_ANISOTROPIC;
-         if (tObj->MaxAnisotropy > 2.0)
+         if (tObj->Sampler.MaxAnisotropy > 2.0)
             aniso = SS2_MAX_ANISO_4;
          else
             aniso = SS2_MAX_ANISO_2;
       }
       else {
-         switch (tObj->MagFilter) {
+         switch (tObj->Sampler.MagFilter) {
          case GL_NEAREST:
             magFilt = FILTER_NEAREST;
             break;
@@ -242,7 +242,7 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
          }
       }
 
-      lodbias = (int) ((tUnit->LodBias + tObj->LodBias) * 16.0);
+      lodbias = (int) ((tUnit->LodBias + tObj->Sampler.LodBias) * 16.0);
       if (lodbias < -256)
           lodbias = -256;
       if (lodbias > 255)
@@ -258,14 +258,14 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
 
       /* Shadow:
        */
-      if (tObj->CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB &&
+      if (tObj->Sampler.CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB &&
           tObj->Target != GL_TEXTURE_3D) {
          if (tObj->Target == GL_TEXTURE_1D) 
             return GL_FALSE;
 
          state[I915_TEXREG_SS2] |=
             (SS2_SHADOW_ENABLE |
-             intel_translate_shadow_compare_func(tObj->CompareFunc));
+             intel_translate_shadow_compare_func(tObj->Sampler.CompareFunc));
 
          minFilt = FILTER_4X4_FLAT;
          magFilt = FILTER_4X4_FLAT;
@@ -278,9 +278,9 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
    }
 
    {
-      GLenum ws = tObj->WrapS;
-      GLenum wt = tObj->WrapT;
-      GLenum wr = tObj->WrapR;
+      GLenum ws = tObj->Sampler.WrapS;
+      GLenum wt = tObj->Sampler.WrapT;
+      GLenum wr = tObj->Sampler.WrapR;
       float minlod;
 
       /* We program 1D textures as 2D textures, so the 2D texcoord could
@@ -298,8 +298,8 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
        * clamp_to_border.
        */
       if (tObj->Target == GL_TEXTURE_3D &&
-          (tObj->MinFilter != GL_NEAREST ||
-           tObj->MagFilter != GL_NEAREST) &&
+          (tObj->Sampler.MinFilter != GL_NEAREST ||
+           tObj->Sampler.MagFilter != GL_NEAREST) &&
           (ws == GL_CLAMP ||
            wt == GL_CLAMP ||
            wr == GL_CLAMP ||
@@ -322,7 +322,7 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
           (translate_wrap_mode(wt) << SS3_TCY_ADDR_MODE_SHIFT) |
           (translate_wrap_mode(wr) << SS3_TCZ_ADDR_MODE_SHIFT));
 
-      minlod = MIN2(tObj->MinLod, tObj->_MaxLevel - tObj->BaseLevel);
+      minlod = MIN2(tObj->Sampler.MinLod, tObj->_MaxLevel - tObj->BaseLevel);
       state[I915_TEXREG_SS3] |= (unit << SS3_TEXTUREMAP_INDEX_SHIFT);
       state[I915_TEXREG_SS3] |= (U_FIXED(CLAMP(minlod, 0.0, 11.0), 4) <<
                                 SS3_MIN_LOD_SHIFT);
@@ -330,10 +330,10 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
    }
 
    /* convert border color from float to ubyte */
-   CLAMPED_FLOAT_TO_UBYTE(border[0], tObj->BorderColor.f[0]);
-   CLAMPED_FLOAT_TO_UBYTE(border[1], tObj->BorderColor.f[1]);
-   CLAMPED_FLOAT_TO_UBYTE(border[2], tObj->BorderColor.f[2]);
-   CLAMPED_FLOAT_TO_UBYTE(border[3], tObj->BorderColor.f[3]);
+   CLAMPED_FLOAT_TO_UBYTE(border[0], tObj->Sampler.BorderColor.f[0]);
+   CLAMPED_FLOAT_TO_UBYTE(border[1], tObj->Sampler.BorderColor.f[1]);
+   CLAMPED_FLOAT_TO_UBYTE(border[2], tObj->Sampler.BorderColor.f[2]);
+   CLAMPED_FLOAT_TO_UBYTE(border[3], tObj->Sampler.BorderColor.f[3]);
 
    if (firstImage->_BaseFormat == GL_DEPTH_COMPONENT) {
       /* GL specs that border color for depth textures is taken from the
index 921183b81dff7db3ef8520fe716a2036fc9aad72..89650b618e45e645cc289bdf802fb233b40f53b4 100644 (file)
@@ -260,9 +260,6 @@ get_state_size(struct i915_hw_state *state)
    if (dirty & I915_UPLOAD_STIPPLE)
       sz += sizeof(state->Stipple);
 
-   if (dirty & I915_UPLOAD_FOG)
-      sz += sizeof(state->Fog);
-
    if (dirty & I915_UPLOAD_TEX_ALL) {
       int nr = 0;
       for (i = 0; i < I915_TEX_UNITS; i++)
@@ -307,6 +304,10 @@ i915_emit_state(struct intel_context *intel)
                                   false);
    count = 0;
  again:
+   if (intel->batch.bo == NULL) {
+      _mesa_error(ctx, GL_OUT_OF_MEMORY, "i915 emit state");
+      assert(0);
+   }
    aper_count = 0;
    dirty = get_dirty(state);
 
@@ -425,12 +426,6 @@ i915_emit_state(struct intel_context *intel)
       emit(intel, state->Stipple, sizeof(state->Stipple));
    }
 
-   if (dirty & I915_UPLOAD_FOG) {
-      if (INTEL_DEBUG & DEBUG_STATE)
-         fprintf(stderr, "I915_UPLOAD_FOG:\n");
-      emit(intel, state->Fog, sizeof(state->Fog));
-   }
-
    /* Combine all the dirty texture state into a single command to
     * avoid lockups on I915 hardware. 
     */
index 412d82ab3ca90cbfb46311efab8518fcaeb67e8a..74a66af31a5579b9209dca506721c16fa676b359 100644 (file)
@@ -238,10 +238,10 @@ static void upload_blend_constant_color(struct brw_context *brw)
 
    BEGIN_BATCH(5);
    OUT_BATCH(_3DSTATE_BLEND_CONSTANT_COLOR << 16 | (5-2));
-   OUT_BATCH_F(ctx->Color.BlendColor[0]);
-   OUT_BATCH_F(ctx->Color.BlendColor[1]);
-   OUT_BATCH_F(ctx->Color.BlendColor[2]);
-   OUT_BATCH_F(ctx->Color.BlendColor[3]);
+   OUT_BATCH_F(ctx->Color.BlendColorUnclamped[0]);
+   OUT_BATCH_F(ctx->Color.BlendColorUnclamped[1]);
+   OUT_BATCH_F(ctx->Color.BlendColorUnclamped[2]);
+   OUT_BATCH_F(ctx->Color.BlendColorUnclamped[3]);
    CACHED_BATCH();
 }
 
index 9483ec69d968a43963db2dd99d29e2eeccbb955c..230d326fa120da383e9b9c18906f05bbbb79c510 100644 (file)
@@ -182,9 +182,21 @@ GLboolean brwCreateContext( int api,
 
    /* WM maximum threads is number of EUs times number of threads per EU. */
    if (intel->gen >= 6) {
-      brw->urb.size = 1024;
-      brw->vs_max_threads = 60;
-      brw->wm_max_threads = 80;
+      if (IS_GT2(intel->intelScreen->deviceID)) {
+        /* This could possibly be 80, but is supposed to require
+         * disabling of WIZ hashing (bit 6 of GT_MODE, 0x20d0) and a
+         * GPU reset to change.
+         */
+        brw->wm_max_threads = 40;
+        brw->vs_max_threads = 60;
+        brw->urb.size = 64;            /* volume 5c.5 section 5.1 */
+        brw->urb.max_vs_handles = 128; /* volume 2a (see 3DSTATE_URB) */
+      } else {
+        brw->wm_max_threads = 40;
+        brw->vs_max_threads = 24;
+        brw->urb.size = 32;            /* volume 5c.5 section 5.1 */
+        brw->urb.max_vs_handles = 256; /* volume 2a (see 3DSTATE_URB) */
+      }
    } else if (intel->gen == 5) {
       brw->urb.size = 1024;
       brw->vs_max_threads = 72;
index 7b0551a92bcf4994e9da1976ccab240cf785cc25..1daa49abfb392da63bb86b25e485eefbeb02ed83 100644 (file)
@@ -139,7 +139,7 @@ struct brw_context;
  * by any 3D rendering.
  */
 #define BRW_NEW_BATCH                  0x10000
-/** brw->depth_region updated */
+/** \see brw.state.depth_region */
 #define BRW_NEW_DEPTH_BUFFER           0x20000
 #define BRW_NEW_NR_WM_SURFACES         0x40000
 #define BRW_NEW_NR_VS_SURFACES         0x80000
@@ -464,8 +464,27 @@ struct brw_context
    struct {
       struct brw_state_flags dirty;
 
+      /**
+       * \name Cached region pointers
+       *
+       * When the draw buffer is updated, often the depth buffer is not
+       * changed. Caching the pointer to the buffer's region allows us to
+       * detect when the buffer has in fact changed, and allows us to avoid
+       * updating the buffer's GPU state when it has not.
+       *
+       * The original of each cached pointer is an instance of
+       * \c intel_renderbuffer.region.
+       *
+       * \see brw_set_draw_region()
+       *
+       * \{
+       */
+
+      /** \see struct brw_tracked_state brw_depthbuffer */
       struct intel_region *depth_region;
 
+      /** \} */
+
       /**
        * List of buffers accumulated in brw_validate_state to receive
        * drm_intel_bo_check_aperture treatment before exec, so we can
@@ -549,18 +568,21 @@ struct brw_context
 
       GLboolean constrained;
 
+      GLuint max_vs_handles;   /* Maximum number of VS handles */
+      GLuint max_gs_handles;   /* Maximum number of GS handles */
+
       GLuint nr_vs_entries;
       GLuint nr_gs_entries;
       GLuint nr_clip_entries;
       GLuint nr_sf_entries;
       GLuint nr_cs_entries;
 
-      /* gen6 */
+      /* gen6:
+       * The length of each URB entry owned by the VS (or GS), as
+       * a number of 1024-bit (128-byte) rows.  Should be >= 1.
+       */
       GLuint vs_size;
-/*       GLuint gs_size; */
-/*       GLuint clip_size; */
-/*       GLuint sf_size; */
-/*       GLuint cs_size; */
+      GLuint gs_size;
 
       GLuint vs_start;
       GLuint gs_start;
@@ -639,7 +661,9 @@ struct brw_context
 
       drm_intel_bo *prog_bo;
       drm_intel_bo *state_bo;
+      uint32_t state_offset;
       drm_intel_bo *vp_bo;
+      uint32_t vp_offset;
    } sf;
 
    struct {
index 6c61aefd7d3394eedf688085a783579cf7d1226e..effcb6c1c4acbb417efa9fccd942889771367802 100644 (file)
 #define PIPE_CONTROL_GTTWRITE_PROCESS_LOCAL 0x00
 #define PIPE_CONTROL_GTTWRITE_GLOBAL        0x01
 
+#define CMD_3D_PRIM                                 0x7b00 /* 3DPRIMITIVE */
+/* DW0 */
+# define GEN4_3DPRIM_TOPOLOGY_TYPE_SHIFT            10
+# define GEN4_3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL (0 << 15)
+# define GEN4_3DPRIM_VERTEXBUFFER_ACCESS_RANDOM     (1 << 15)
+
 #define _3DPRIM_POINTLIST         0x01
 #define _3DPRIM_LINELIST          0x02
 #define _3DPRIM_LINESTRIP         0x03
@@ -65,9 +71,6 @@
 #define _3DPRIM_LINESTRIP_CONT_BF 0x14
 #define _3DPRIM_TRIFAN_NOSTIPPLE  0x15
 
-#define _3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL 0
-#define _3DPRIM_VERTEXBUFFER_ACCESS_RANDOM     1
-
 #define BRW_ANISORATIO_2     0 
 #define BRW_ANISORATIO_4     1 
 #define BRW_ANISORATIO_6     2 
 #define BRW_DEPTHFORMAT_D32_FLOAT_S8X24_UINT     0
 #define BRW_DEPTHFORMAT_D32_FLOAT                1
 #define BRW_DEPTHFORMAT_D24_UNORM_S8_UINT        2
+#define BRW_DEPTHFORMAT_D24_UNORM_X8_UINT        3 /* GEN5 */
 #define BRW_DEPTHFORMAT_D16_UNORM                5
 
 #define BRW_FLOATING_POINT_IEEE_754        0
 
 #define CMD_PIPE_CONTROL              0x7a00
 
-#define CMD_3D_PRIM                   0x7b00
-
 #define CMD_MI_FLUSH                  0x0200
 
 
index f5abe021c433d73e3f78bb586db3a014bed65851..2db70c543eaa4f18944cd0d0a45884e9190be13f 100644 (file)
@@ -129,30 +129,31 @@ static void brw_emit_prim(struct brw_context *brw,
                          const struct _mesa_prim *prim,
                          uint32_t hw_prim)
 {
-   struct brw_3d_primitive prim_packet;
    struct intel_context *intel = &brw->intel;
+   int verts_per_instance;
+   int vertex_access_type;
+   int start_vertex_location;
+   int base_vertex_location;
 
    DBG("PRIM: %s %d %d\n", _mesa_lookup_enum_by_nr(prim->mode),
        prim->start, prim->count);
 
-   prim_packet.header.opcode = CMD_3D_PRIM;
-   prim_packet.header.length = sizeof(prim_packet)/4 - 2;
-   prim_packet.header.pad = 0;
-   prim_packet.header.topology = hw_prim;
-   prim_packet.header.indexed = prim->indexed;
-
-   prim_packet.verts_per_instance = trim(prim->mode, prim->count);
-   prim_packet.start_vert_location = prim->start;
-   if (prim->indexed)
-      prim_packet.start_vert_location += brw->ib.start_vertex_offset;
-   else
-      prim_packet.start_vert_location += brw->vb.start_vertex_bias;
-   prim_packet.instance_count = 1;
-   prim_packet.start_instance_location = 0;
-   prim_packet.base_vert_location = prim->basevertex;
-   if (prim->indexed)
-      prim_packet.base_vert_location += brw->vb.start_vertex_bias;
+   start_vertex_location = prim->start;
+   base_vertex_location = prim->basevertex;
+   if (prim->indexed) {
+      vertex_access_type = GEN4_3DPRIM_VERTEXBUFFER_ACCESS_RANDOM;
+      start_vertex_location += brw->ib.start_vertex_offset;
+      base_vertex_location += brw->vb.start_vertex_bias;
+   } else {
+      vertex_access_type = GEN4_3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL;
+      start_vertex_location += brw->vb.start_vertex_bias;
+   }
+
+   verts_per_instance = trim(prim->mode, prim->count);
 
+   /* If nothing to emit, just return. */
+   if (verts_per_instance == 0)
+      return;
 
    /* If we're set to always flush, do it before and after the primitive emit.
     * We want to catch both missed flushes that hurt instruction/state cache
@@ -162,10 +163,18 @@ static void brw_emit_prim(struct brw_context *brw,
    if (intel->always_flush_cache) {
       intel_batchbuffer_emit_mi_flush(intel);
    }
-   if (prim_packet.verts_per_instance) {
-      intel_batchbuffer_data(&brw->intel, &prim_packet,
-                             sizeof(prim_packet), false);
-   }
+
+   BEGIN_BATCH(6);
+   OUT_BATCH(CMD_3D_PRIM << 16 | (6 - 2) |
+            hw_prim << GEN4_3DPRIM_TOPOLOGY_TYPE_SHIFT |
+            vertex_access_type);
+   OUT_BATCH(verts_per_instance);
+   OUT_BATCH(start_vertex_location);
+   OUT_BATCH(1); // instance count
+   OUT_BATCH(0); // start instance location
+   OUT_BATCH(base_vertex_location);
+   ADVANCE_BATCH();
+
    if (intel->always_flush_cache) {
       intel_batchbuffer_emit_mi_flush(intel);
    }
@@ -271,20 +280,20 @@ static GLboolean check_fallbacks( struct brw_context *brw,
          struct gl_texture_unit *texUnit = &ctx->Texture.Unit[u];
          if (texUnit->Enabled) {
             if (texUnit->Enabled & TEXTURE_1D_BIT) {
-               if (texUnit->CurrentTex[TEXTURE_1D_INDEX]->WrapS == GL_CLAMP) {
+               if (texUnit->CurrentTex[TEXTURE_1D_INDEX]->Sampler.WrapS == GL_CLAMP) {
                    return GL_TRUE;
                }
             }
             if (texUnit->Enabled & TEXTURE_2D_BIT) {
-               if (texUnit->CurrentTex[TEXTURE_2D_INDEX]->WrapS == GL_CLAMP ||
-                   texUnit->CurrentTex[TEXTURE_2D_INDEX]->WrapT == GL_CLAMP) {
+               if (texUnit->CurrentTex[TEXTURE_2D_INDEX]->Sampler.WrapS == GL_CLAMP ||
+                   texUnit->CurrentTex[TEXTURE_2D_INDEX]->Sampler.WrapT == GL_CLAMP) {
                    return GL_TRUE;
                }
             }
             if (texUnit->Enabled & TEXTURE_3D_BIT) {
-               if (texUnit->CurrentTex[TEXTURE_3D_INDEX]->WrapS == GL_CLAMP ||
-                   texUnit->CurrentTex[TEXTURE_3D_INDEX]->WrapT == GL_CLAMP ||
-                   texUnit->CurrentTex[TEXTURE_3D_INDEX]->WrapR == GL_CLAMP) {
+               if (texUnit->CurrentTex[TEXTURE_3D_INDEX]->Sampler.WrapS == GL_CLAMP ||
+                   texUnit->CurrentTex[TEXTURE_3D_INDEX]->Sampler.WrapT == GL_CLAMP ||
+                   texUnit->CurrentTex[TEXTURE_3D_INDEX]->Sampler.WrapR == GL_CLAMP) {
                    return GL_TRUE;
                }
             }
index f1d00693168932d89915db3c21c933f69ffa155b..9389eb6733f29dcd5a48eb02321b3dc0a72bfed1 100644 (file)
@@ -575,7 +575,7 @@ static void brw_emit_vertices(struct brw_context *brw)
         if (intel->gen >= 5) {
            OUT_RELOC(buffer->bo, I915_GEM_DOMAIN_VERTEX, 0, buffer->bo->size - 1);
         } else
-           OUT_BATCH(buffer->bo->size / buffer->stride);
+           OUT_BATCH(0);
         OUT_BATCH(0); /* Instance data step rate */
 
         brw->vb.current_buffers[i].handle = buffer->bo->handle;
index 3b5c4c071e3416f2b5e217661067143bfa00bc73..7e63482d8fa9ec94a6a975dbbd9723552c833999 100644 (file)
 #include "brw_defines.h"
 #include "brw_eu.h"
 
+/* Returns the corresponding conditional mod for swapping src0 and
+ * src1 in e.g. CMP.
+ */
+uint32_t
+brw_swap_cmod(uint32_t cmod)
+{
+   switch (cmod) {
+   case BRW_CONDITIONAL_Z:
+   case BRW_CONDITIONAL_NZ:
+      return cmod;
+   case BRW_CONDITIONAL_G:
+      return BRW_CONDITIONAL_LE;
+   case BRW_CONDITIONAL_GE:
+      return BRW_CONDITIONAL_L;
+   case BRW_CONDITIONAL_L:
+      return BRW_CONDITIONAL_GE;
+   case BRW_CONDITIONAL_LE:
+      return BRW_CONDITIONAL_G;
+   default:
+      return ~0;
+   }
+}
 
 
 /* How does predicate control work when execution_size != 8?  Do I
@@ -60,6 +82,11 @@ void brw_set_predicate_control( struct brw_compile *p, GLuint pc )
    p->current->header.predicate_control = pc;
 }
 
+void brw_set_predicate_inverse(struct brw_compile *p, bool predicate_inverse)
+{
+   p->current->header.predicate_inverse = predicate_inverse;
+}
+
 void brw_set_conditionalmod( struct brw_compile *p, GLuint conditional )
 {
    p->current->header.destreg__conditionalmod = conditional;
index 2d2ed9de985b94dd86767ed6393c3ff0d2ffa26f..718b3800423c27710d5fb1667faab3686814066a 100644 (file)
@@ -772,6 +772,7 @@ void brw_set_access_mode( struct brw_compile *p, GLuint access_mode );
 void brw_set_compression_control( struct brw_compile *p, GLboolean control );
 void brw_set_predicate_control_flag_value( struct brw_compile *p, GLuint value );
 void brw_set_predicate_control( struct brw_compile *p, GLuint pc );
+void brw_set_predicate_inverse(struct brw_compile *p, bool predicate_inverse);
 void brw_set_conditionalmod( struct brw_compile *p, GLuint conditional );
 void brw_set_acc_write_control(struct brw_compile *p, GLuint value);
 
@@ -1017,6 +1018,8 @@ void brw_set_src1( struct brw_instruction *insn,
 
 void brw_set_uip_jip(struct brw_compile *p);
 
+uint32_t brw_swap_cmod(uint32_t cmod);
+
 /* brw_optimize.c */
 void brw_optimize(struct brw_compile *p);
 void brw_remove_duplicate_mrf_moves(struct brw_compile *p);
index 21ce92c917304cf959258b97fdd9e9e2fad8202c..71485cd1f71d8b31a0ce9603e6bef4ac1df09e2f 100644 (file)
@@ -52,6 +52,34 @@ static void guess_execution_size(struct brw_compile *p,
 }
 
 
+/**
+ * Prior to Sandybridge, the SEND instruction accepted non-MRF source
+ * registers, implicitly moving the operand to a message register.
+ *
+ * On Sandybridge, this is no longer the case.  This function performs the
+ * explicit move; it should be called before emitting a SEND instruction.
+ */
+static void
+gen6_resolve_implied_move(struct brw_compile *p,
+                         struct brw_reg *src,
+                         GLuint msg_reg_nr)
+{
+   struct intel_context *intel = &p->brw->intel;
+   if (intel->gen != 6)
+      return;
+
+   if (src->file != BRW_ARCHITECTURE_REGISTER_FILE || src->nr != BRW_ARF_NULL) {
+      brw_push_insn_state(p);
+      brw_set_mask_control(p, BRW_MASK_DISABLE);
+      brw_set_compression_control(p, BRW_COMPRESSION_NONE);
+      brw_MOV(p, retype(brw_message_reg(msg_reg_nr), BRW_REGISTER_TYPE_UD),
+             retype(*src, BRW_REGISTER_TYPE_UD));
+      brw_pop_insn_state(p);
+   }
+   *src = brw_message_reg(msg_reg_nr);
+}
+
+
 static void brw_set_dest(struct brw_compile *p,
                         struct brw_instruction *insn,
                         struct brw_reg dest)
@@ -468,10 +496,9 @@ static void brw_set_dp_write_message( struct brw_context *brw,
        insn->bits3.dp_render_cache.response_length = response_length;
        insn->bits3.dp_render_cache.msg_length = msg_length;
        insn->bits3.dp_render_cache.end_of_thread = end_of_thread;
+
+       /* We always use the render cache for write messages */
        insn->header.destreg__conditionalmod = BRW_MESSAGE_TARGET_DATAPORT_WRITE;
-       /* XXX really need below? */
-       insn->bits2.send_gen5.sfid = BRW_MESSAGE_TARGET_DATAPORT_WRITE;
-       insn->bits2.send_gen5.end_of_thread = end_of_thread;
    } else if (intel->gen == 5) {
        insn->bits3.dp_write_gen5.binding_table_index = binding_table_index;
        insn->bits3.dp_write_gen5.msg_control = msg_control;
@@ -511,6 +538,13 @@ brw_set_dp_read_message(struct brw_context *brw,
    brw_set_src1(insn, brw_imm_d(0));
 
    if (intel->gen >= 6) {
+       uint32_t target_function;
+
+       if (target_cache == BRW_DATAPORT_READ_TARGET_DATA_CACHE)
+         target_function = BRW_MESSAGE_TARGET_DATAPORT_READ; /* data cache */
+       else
+         target_function = BRW_MESSAGE_TARGET_DATAPORT_WRITE; /* render cache */
+
        insn->bits3.dp_render_cache.binding_table_index = binding_table_index;
        insn->bits3.dp_render_cache.msg_control = msg_control;
        insn->bits3.dp_render_cache.pixel_scoreboard_clear = 0;
@@ -520,10 +554,7 @@ brw_set_dp_read_message(struct brw_context *brw,
        insn->bits3.dp_render_cache.response_length = response_length;
        insn->bits3.dp_render_cache.msg_length = msg_length;
        insn->bits3.dp_render_cache.end_of_thread = 0;
-       insn->header.destreg__conditionalmod = BRW_MESSAGE_TARGET_DATAPORT_READ;
-       /* XXX really need below? */
-       insn->bits2.send_gen5.sfid = BRW_MESSAGE_TARGET_DATAPORT_READ;
-       insn->bits2.send_gen5.end_of_thread = 0;
+       insn->header.destreg__conditionalmod = target_function;
    } else if (intel->gen == 5) {
        insn->bits3.dp_read_gen5.binding_table_index = binding_table_index;
        insn->bits3.dp_read_gen5.msg_control = msg_control;
@@ -1458,9 +1489,12 @@ void brw_oword_block_write_scratch(struct brw_compile *p,
                                   GLuint offset)
 {
    struct intel_context *intel = &p->brw->intel;
-   uint32_t msg_control;
+   uint32_t msg_control, msg_type;
    int mlen;
 
+   if (intel->gen >= 6)
+      offset /= 16;
+
    mrf = retype(mrf, BRW_REGISTER_TYPE_UD);
 
    if (num_regs == 1) {
@@ -1526,13 +1560,22 @@ void brw_oword_block_write_scratch(struct brw_compile *p,
       }
 
       brw_set_dest(p, insn, dest);
-      brw_set_src0(insn, brw_null_reg());
+      if (intel->gen >= 6) {
+        brw_set_src0(insn, mrf);
+      } else {
+        brw_set_src0(insn, brw_null_reg());
+      }
+
+      if (intel->gen >= 6)
+        msg_type = GEN6_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE;
+      else
+        msg_type = BRW_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE;
 
       brw_set_dp_write_message(p->brw,
                               insn,
                               255, /* binding table index (255=stateless) */
                               msg_control,
-                              BRW_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE, /* msg_type */
+                              msg_type,
                               mlen,
                               GL_TRUE, /* header_present */
                               0, /* pixel scoreboard */
@@ -1557,9 +1600,13 @@ brw_oword_block_read_scratch(struct brw_compile *p,
                             int num_regs,
                             GLuint offset)
 {
+   struct intel_context *intel = &p->brw->intel;
    uint32_t msg_control;
    int rlen;
 
+   if (intel->gen >= 6)
+      offset /= 16;
+
    mrf = retype(mrf, BRW_REGISTER_TYPE_UD);
    dest = retype(dest, BRW_REGISTER_TYPE_UW);
 
@@ -1596,14 +1643,18 @@ brw_oword_block_read_scratch(struct brw_compile *p,
       insn->header.destreg__conditionalmod = mrf.nr;
 
       brw_set_dest(p, insn, dest);     /* UW? */
-      brw_set_src0(insn, brw_null_reg());
+      if (intel->gen >= 6) {
+        brw_set_src0(insn, mrf);
+      } else {
+        brw_set_src0(insn, brw_null_reg());
+      }
 
       brw_set_dp_read_message(p->brw,
                              insn,
                              255, /* binding table index (255=stateless) */
                              msg_control,
                              BRW_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ, /* msg_type */
-                             1, /* target cache (render/scratch) */
+                             BRW_DATAPORT_READ_TARGET_RENDER_CACHE,
                              1, /* msg_length */
                              rlen);
    }
@@ -1771,6 +1822,7 @@ void brw_dp_READ_4_vs_relative(struct brw_compile *p,
                               GLuint bind_table_index)
 {
    struct intel_context *intel = &p->brw->intel;
+   struct brw_reg src = brw_vec8_grf(0, 0);
    int msg_type;
 
    /* Setup MRF[1] with offset into const buffer */
@@ -1787,6 +1839,7 @@ void brw_dp_READ_4_vs_relative(struct brw_compile *p,
           addr_reg, brw_imm_d(offset));
    brw_pop_insn_state(p);
 
+   gen6_resolve_implied_move(p, &src, 0);
    struct brw_instruction *insn = next_insn(p, BRW_OPCODE_SEND);
 
    insn->header.predicate_control = BRW_PREDICATE_NONE;
@@ -1795,7 +1848,7 @@ void brw_dp_READ_4_vs_relative(struct brw_compile *p,
    insn->header.mask_control = BRW_MASK_DISABLE;
 
    brw_set_dest(p, insn, dest);
-   brw_set_src0(insn, brw_vec8_grf(0, 0));
+   brw_set_src0(insn, src);
 
    if (intel->gen == 6)
       msg_type = GEN6_DATAPORT_READ_MESSAGE_OWORD_DUAL_BLOCK_READ;
@@ -1809,7 +1862,7 @@ void brw_dp_READ_4_vs_relative(struct brw_compile *p,
                           bind_table_index,
                           BRW_DATAPORT_OWORD_DUAL_BLOCK_1OWORD,
                           msg_type,
-                          0, /* source cache = data cache */
+                          BRW_DATAPORT_READ_TARGET_DATA_CACHE,
                           2, /* msg_length */
                           1); /* response_length */
 }
@@ -1966,20 +2019,7 @@ void brw_SAMPLE(struct brw_compile *p,
    {
       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) {
-        if (src0.file != BRW_ARCHITECTURE_REGISTER_FILE ||
-            src0.nr != BRW_ARF_NULL) {
-           brw_push_insn_state(p);
-           brw_set_mask_control( p, BRW_MASK_DISABLE );
-           brw_set_compression_control(p, BRW_COMPRESSION_NONE);
-           brw_MOV(p, retype(brw_message_reg(msg_reg_nr), src0.type), src0);
-           brw_pop_insn_state(p);
-        }
-        src0 = brw_message_reg(msg_reg_nr);
-      }
+      gen6_resolve_implied_move(p, &src0, msg_reg_nr);
 
       insn = next_insn(p, BRW_OPCODE_SEND);
       insn->header.predicate_control = 0; /* XXX */
@@ -2034,17 +2074,7 @@ void brw_urb_WRITE(struct brw_compile *p,
    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_push_insn_state(p);
-      brw_set_mask_control( p, BRW_MASK_DISABLE );
-      brw_MOV(p, retype(brw_message_reg(msg_reg_nr), BRW_REGISTER_TYPE_UD),
-             retype(src0, BRW_REGISTER_TYPE_UD));
-      brw_pop_insn_state(p);
-      src0 = brw_message_reg(msg_reg_nr);
-   }
+   gen6_resolve_implied_move(p, &src0, msg_reg_nr);
 
    insn = next_insn(p, BRW_OPCODE_SEND);
 
@@ -2154,17 +2184,7 @@ void brw_ff_sync(struct brw_compile *p,
    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_push_insn_state(p);
-      brw_set_mask_control( p, BRW_MASK_DISABLE );
-      brw_MOV(p, retype(brw_message_reg(msg_reg_nr), BRW_REGISTER_TYPE_UD),
-             retype(src0, BRW_REGISTER_TYPE_UD));
-      brw_pop_insn_state(p);
-      src0 = brw_message_reg(msg_reg_nr);
-   }
+   gen6_resolve_implied_move(p, &src0, msg_reg_nr);
 
    insn = next_insn(p, BRW_OPCODE_SEND);
    brw_set_dest(p, insn, dest);
index 8b3f5adb9f9548ea85773322794e268ced0344fd..5426925e372ea2f2345efc28ce23a5b0b48552b7 100644 (file)
@@ -177,6 +177,23 @@ type_size(const struct glsl_type *type)
    }
 }
 
+void
+fs_visitor::fail(const char *format, ...)
+{
+   if (!failed) {
+      failed = true;
+
+      if (INTEL_DEBUG & DEBUG_WM) {
+        fprintf(stderr, "FS compile failed: ");
+
+        va_list va;
+        va_start(va, format);
+        vfprintf(stderr, format, va);
+        va_end(va);
+      }
+   }
+}
+
 /**
  * Returns how many MRFs an FS opcode will write over.
  *
@@ -382,60 +399,32 @@ fs_visitor::setup_uniform_values(int loc, const glsl_type *type)
 void
 fs_visitor::setup_builtin_uniform_values(ir_variable *ir)
 {
-   const struct gl_builtin_uniform_desc *statevar = NULL;
-
-   for (unsigned int i = 0; _mesa_builtin_uniform_desc[i].name; i++) {
-      statevar = &_mesa_builtin_uniform_desc[i];
-      if (strcmp(ir->name, _mesa_builtin_uniform_desc[i].name) == 0)
-        break;
-   }
-
-   if (!statevar->name) {
-      this->fail = true;
-      printf("Failed to find builtin uniform `%s'\n", ir->name);
-      return;
-   }
-
-   int array_count;
-   if (ir->type->is_array()) {
-      array_count = ir->type->length;
-   } else {
-      array_count = 1;
-   }
+   const ir_state_slot *const slots = ir->state_slots;
+   assert(ir->state_slots != NULL);
 
-   for (int a = 0; a < array_count; a++) {
-      for (unsigned int i = 0; i < statevar->num_elements; i++) {
-        struct gl_builtin_uniform_element *element = &statevar->elements[i];
-        int tokens[STATE_LENGTH];
-
-        memcpy(tokens, element->tokens, sizeof(element->tokens));
-        if (ir->type->is_array()) {
-           tokens[1] = a;
-        }
-
-        /* This state reference has already been setup by ir_to_mesa,
-         * but we'll get the same index back here.
-         */
-        int index = _mesa_add_state_reference(this->fp->Base.Parameters,
-                                              (gl_state_index *)tokens);
+   for (unsigned int i = 0; i < ir->num_state_slots; i++) {
+      /* This state reference has already been setup by ir_to_mesa, but we'll
+       * get the same index back here.
+       */
+      int index = _mesa_add_state_reference(this->fp->Base.Parameters,
+                                           (gl_state_index *)slots[i].tokens);
 
-        /* Add each of the unique swizzles of the element as a
-         * parameter.  This'll end up matching the expected layout of
-         * the array/matrix/structure we're trying to fill in.
-         */
-        int last_swiz = -1;
-        for (unsigned int i = 0; i < 4; i++) {
-           int swiz = GET_SWZ(element->swizzle, i);
-           if (swiz == last_swiz)
-              break;
-           last_swiz = swiz;
+      /* Add each of the unique swizzles of the element as a parameter.
+       * This'll end up matching the expected layout of the
+       * array/matrix/structure we're trying to fill in.
+       */
+      int last_swiz = -1;
+      for (unsigned int j = 0; j < 4; j++) {
+        int swiz = GET_SWZ(slots[i].swizzle, j);
+        if (swiz == last_swiz)
+           break;
+        last_swiz = swiz;
 
-           c->prog_data.param_convert[c->prog_data.nr_params] =
-              PARAM_NO_CONVERT;
-           this->param_index[c->prog_data.nr_params] = index;
-           this->param_offset[c->prog_data.nr_params] = swiz;
-           c->prog_data.nr_params++;
-        }
+        c->prog_data.param_convert[c->prog_data.nr_params] =
+           PARAM_NO_CONVERT;
+        this->param_index[c->prog_data.nr_params] = index;
+        this->param_offset[c->prog_data.nr_params] = swiz;
+        c->prog_data.nr_params++;
       }
    }
 }
@@ -451,15 +440,15 @@ fs_visitor::emit_fragcoord_interpolation(ir_variable *ir)
 
    /* gl_FragCoord.x */
    if (ir->pixel_center_integer) {
-      emit(fs_inst(BRW_OPCODE_MOV, wpos, this->pixel_x));
+      emit(BRW_OPCODE_MOV, wpos, this->pixel_x);
    } else {
-      emit(fs_inst(BRW_OPCODE_ADD, wpos, this->pixel_x, fs_reg(0.5f)));
+      emit(BRW_OPCODE_ADD, wpos, this->pixel_x, fs_reg(0.5f));
    }
    wpos.reg_offset++;
 
    /* gl_FragCoord.y */
    if (!flip && ir->pixel_center_integer) {
-      emit(fs_inst(BRW_OPCODE_MOV, wpos, this->pixel_y));
+      emit(BRW_OPCODE_MOV, wpos, this->pixel_y);
    } else {
       fs_reg pixel_y = this->pixel_y;
       float offset = (ir->pixel_center_integer ? 0.0 : 0.5);
@@ -469,22 +458,22 @@ fs_visitor::emit_fragcoord_interpolation(ir_variable *ir)
         offset += c->key.drawable_height - 1.0;
       }
 
-      emit(fs_inst(BRW_OPCODE_ADD, wpos, pixel_y, fs_reg(offset)));
+      emit(BRW_OPCODE_ADD, wpos, pixel_y, fs_reg(offset));
    }
    wpos.reg_offset++;
 
    /* gl_FragCoord.z */
    if (intel->gen >= 6) {
-      emit(fs_inst(BRW_OPCODE_MOV, wpos,
-                  fs_reg(brw_vec8_grf(c->source_depth_reg, 0))));
+      emit(BRW_OPCODE_MOV, wpos,
+          fs_reg(brw_vec8_grf(c->source_depth_reg, 0)));
    } else {
-      emit(fs_inst(FS_OPCODE_LINTERP, wpos, this->delta_x, this->delta_y,
-                  interp_reg(FRAG_ATTRIB_WPOS, 2)));
+      emit(FS_OPCODE_LINTERP, wpos, this->delta_x, this->delta_y,
+          interp_reg(FRAG_ATTRIB_WPOS, 2));
    }
    wpos.reg_offset++;
 
    /* gl_FragCoord.w: Already set up in emit_interpolation */
-   emit(fs_inst(BRW_OPCODE_MOV, wpos, this->wpos_w));
+   emit(BRW_OPCODE_MOV, wpos, this->wpos_w);
 
    return reg;
 }
@@ -503,7 +492,7 @@ fs_visitor::emit_general_interpolation(ir_variable *ir)
    if (ir->type->is_array()) {
       array_elements = ir->type->length;
       if (array_elements == 0) {
-        this->fail = true;
+        fail("dereferenced array '%s' has length 0\n", ir->name);
       }
       type = ir->type->fields.array;
    } else {
@@ -523,37 +512,33 @@ fs_visitor::emit_general_interpolation(ir_variable *ir)
            continue;
         }
 
-        if (c->key.flat_shade && (location == FRAG_ATTRIB_COL0 ||
-                                  location == FRAG_ATTRIB_COL1)) {
+        bool is_gl_Color =
+           location == FRAG_ATTRIB_COL0 || location == FRAG_ATTRIB_COL1;
+
+        if (c->key.flat_shade && is_gl_Color) {
            /* Constant interpolation (flat shading) case. The SF has
             * handed us defined values in only the constant offset
             * field of the setup reg.
             */
-           for (unsigned int c = 0; c < type->vector_elements; c++) {
-              struct brw_reg interp = interp_reg(location, c);
+           for (unsigned int k = 0; k < type->vector_elements; k++) {
+              struct brw_reg interp = interp_reg(location, k);
               interp = suboffset(interp, 3);
-              emit(fs_inst(FS_OPCODE_CINTERP, attr, fs_reg(interp)));
+              emit(FS_OPCODE_CINTERP, attr, fs_reg(interp));
               attr.reg_offset++;
            }
         } else {
            /* Perspective interpolation case. */
-           for (unsigned int c = 0; c < type->vector_elements; c++) {
-              struct brw_reg interp = interp_reg(location, c);
-              emit(fs_inst(FS_OPCODE_LINTERP,
-                           attr,
-                           this->delta_x,
-                           this->delta_y,
-                           fs_reg(interp)));
+           for (unsigned int k = 0; k < type->vector_elements; k++) {
+              struct brw_reg interp = interp_reg(location, k);
+              emit(FS_OPCODE_LINTERP, attr,
+                   this->delta_x, this->delta_y, fs_reg(interp));
               attr.reg_offset++;
            }
 
-           if (intel->gen < 6) {
+           if (intel->gen < 6 && !(is_gl_Color && c->key.linear_color)) {
               attr.reg_offset -= type->vector_elements;
-              for (unsigned int c = 0; c < type->vector_elements; c++) {
-                 emit(fs_inst(BRW_OPCODE_MUL,
-                              attr,
-                              attr,
-                              this->pixel_w));
+              for (unsigned int k = 0; k < type->vector_elements; k++) {
+                 emit(BRW_OPCODE_MUL, attr, attr, this->pixel_w);
                  attr.reg_offset++;
               }
            }
@@ -572,28 +557,21 @@ fs_visitor::emit_frontfacing_interpolation(ir_variable *ir)
 
    /* The frontfacing comes in as a bit in the thread payload. */
    if (intel->gen >= 6) {
-      emit(fs_inst(BRW_OPCODE_ASR,
-                  *reg,
-                  fs_reg(retype(brw_vec1_grf(0, 0), BRW_REGISTER_TYPE_D)),
-                  fs_reg(15)));
-      emit(fs_inst(BRW_OPCODE_NOT,
-                  *reg,
-                  *reg));
-      emit(fs_inst(BRW_OPCODE_AND,
-                  *reg,
-                  *reg,
-                  fs_reg(1)));
+      emit(BRW_OPCODE_ASR, *reg,
+          fs_reg(retype(brw_vec1_grf(0, 0), BRW_REGISTER_TYPE_D)),
+          fs_reg(15));
+      emit(BRW_OPCODE_NOT, *reg, *reg);
+      emit(BRW_OPCODE_AND, *reg, *reg, fs_reg(1));
    } else {
       struct brw_reg r1_6ud = retype(brw_vec1_grf(1, 6), BRW_REGISTER_TYPE_UD);
       /* bit 31 is "primitive is back face", so checking < (1 << 31) gives
        * us front face
        */
-      fs_inst *inst = emit(fs_inst(BRW_OPCODE_CMP,
-                                  *reg,
-                                  fs_reg(r1_6ud),
-                                  fs_reg(1u << 31)));
+      fs_inst *inst = emit(BRW_OPCODE_CMP, *reg,
+                          fs_reg(r1_6ud),
+                          fs_reg(1u << 31));
       inst->conditional_mod = BRW_CONDITIONAL_L;
-      emit(fs_inst(BRW_OPCODE_AND, *reg, *reg, fs_reg(1u)));
+      emit(BRW_OPCODE_AND, *reg, *reg, fs_reg(1u));
    }
 
    return reg;
@@ -628,11 +606,11 @@ fs_visitor::emit_math(fs_opcodes opcode, fs_reg dst, fs_reg src)
                           src.abs ||
                           src.negate)) {
       fs_reg expanded = fs_reg(this, glsl_type::float_type);
-      emit(fs_inst(BRW_OPCODE_MOV, expanded, src));
+      emit(BRW_OPCODE_MOV, expanded, src);
       src = expanded;
    }
 
-   fs_inst *inst = emit(fs_inst(opcode, dst, src));
+   fs_inst *inst = emit(opcode, dst, src);
 
    if (intel->gen < 6) {
       inst->base_mrf = 2;
@@ -658,20 +636,20 @@ fs_visitor::emit_math(fs_opcodes opcode, fs_reg dst, fs_reg src0, fs_reg src1)
        */
       if (src0.file == UNIFORM || src0.abs || src0.negate) {
         fs_reg expanded = fs_reg(this, glsl_type::float_type);
-        emit(fs_inst(BRW_OPCODE_MOV, expanded, src0));
+        emit(BRW_OPCODE_MOV, expanded, src0);
         src0 = expanded;
       }
 
       if (src1.file == UNIFORM || src1.abs || src1.negate) {
         fs_reg expanded = fs_reg(this, glsl_type::float_type);
-        emit(fs_inst(BRW_OPCODE_MOV, expanded, src1));
+        emit(BRW_OPCODE_MOV, expanded, src1);
         src1 = expanded;
       }
 
-      inst = emit(fs_inst(opcode, dst, src0, src1));
+      inst = emit(opcode, dst, src0, src1);
    } else {
-      emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + 1), src1));
-      inst = emit(fs_inst(opcode, dst, src0, reg_null_f));
+      emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + 1), src1);
+      inst = emit(opcode, dst, src0, reg_null_f);
 
       inst->base_mrf = base_mrf;
       inst->mlen = 2;
@@ -788,7 +766,7 @@ fs_visitor::try_emit_saturate(ir_expression *ir)
    fs_reg src = this->result;
 
    this->result = fs_reg(this, ir->type);
-   fs_inst *inst = emit(fs_inst(BRW_OPCODE_MOV, this->result, src));
+   fs_inst *inst = emit(BRW_OPCODE_MOV, this->result, src);
    inst->saturate = true;
 
    return true;
@@ -834,9 +812,8 @@ fs_visitor::visit(ir_expression *ir)
       ir->operands[operand]->accept(this);
       if (this->result.file == BAD_FILE) {
         ir_print_visitor v;
-        printf("Failed to get tree for expression operand:\n");
+        fail("Failed to get tree for expression operand:\n");
         ir->operands[operand]->accept(&v);
-        this->fail = true;
       }
       op[operand] = this->result;
 
@@ -859,7 +836,7 @@ fs_visitor::visit(ir_expression *ir)
       /* Note that BRW_OPCODE_NOT is not appropriate here, since it is
        * ones complement of the whole register, not just bit 0.
        */
-      emit(fs_inst(BRW_OPCODE_XOR, this->result, op[0], fs_reg(1)));
+      emit(BRW_OPCODE_XOR, this->result, op[0], fs_reg(1));
       break;
    case ir_unop_neg:
       op[0].negate = !op[0].negate;
@@ -873,16 +850,16 @@ fs_visitor::visit(ir_expression *ir)
    case ir_unop_sign:
       temp = fs_reg(this, ir->type);
 
-      emit(fs_inst(BRW_OPCODE_MOV, this->result, fs_reg(0.0f)));
+      emit(BRW_OPCODE_MOV, this->result, fs_reg(0.0f));
 
-      inst = emit(fs_inst(BRW_OPCODE_CMP, reg_null_f, op[0], fs_reg(0.0f)));
+      inst = emit(BRW_OPCODE_CMP, reg_null_f, op[0], fs_reg(0.0f));
       inst->conditional_mod = BRW_CONDITIONAL_G;
-      inst = emit(fs_inst(BRW_OPCODE_MOV, this->result, fs_reg(1.0f)));
+      inst = emit(BRW_OPCODE_MOV, this->result, fs_reg(1.0f));
       inst->predicated = true;
 
-      inst = emit(fs_inst(BRW_OPCODE_CMP, reg_null_f, op[0], fs_reg(0.0f)));
+      inst = emit(BRW_OPCODE_CMP, reg_null_f, op[0], fs_reg(0.0f));
       inst->conditional_mod = BRW_CONDITIONAL_L;
-      inst = emit(fs_inst(BRW_OPCODE_MOV, this->result, fs_reg(-1.0f)));
+      inst = emit(BRW_OPCODE_MOV, this->result, fs_reg(-1.0f));
       inst->predicated = true;
 
       break;
@@ -910,21 +887,21 @@ fs_visitor::visit(ir_expression *ir)
       break;
 
    case ir_unop_dFdx:
-      emit(fs_inst(FS_OPCODE_DDX, this->result, op[0]));
+      emit(FS_OPCODE_DDX, this->result, op[0]);
       break;
    case ir_unop_dFdy:
-      emit(fs_inst(FS_OPCODE_DDY, this->result, op[0]));
+      emit(FS_OPCODE_DDY, this->result, op[0]);
       break;
 
    case ir_binop_add:
-      emit(fs_inst(BRW_OPCODE_ADD, this->result, op[0], op[1]));
+      emit(BRW_OPCODE_ADD, this->result, op[0], op[1]);
       break;
    case ir_binop_sub:
       assert(!"not reached: should be handled by ir_sub_to_add_neg");
       break;
 
    case ir_binop_mul:
-      emit(fs_inst(BRW_OPCODE_MUL, this->result, op[0], op[1]));
+      emit(BRW_OPCODE_MUL, this->result, op[0], op[1]);
       break;
    case ir_binop_div:
       assert(!"not reached: should be handled by ir_div_to_mul_rcp");
@@ -946,21 +923,21 @@ fs_visitor::visit(ir_expression *ir)
       if (intel->gen < 5)
         temp.type = op[0].type;
 
-      inst = emit(fs_inst(BRW_OPCODE_CMP, temp, op[0], op[1]));
+      inst = emit(BRW_OPCODE_CMP, temp, op[0], op[1]);
       inst->conditional_mod = brw_conditional_for_comparison(ir->operation);
-      emit(fs_inst(BRW_OPCODE_AND, this->result, this->result, fs_reg(0x1)));
+      emit(BRW_OPCODE_AND, this->result, this->result, fs_reg(0x1));
       break;
 
    case ir_binop_logic_xor:
-      emit(fs_inst(BRW_OPCODE_XOR, this->result, op[0], op[1]));
+      emit(BRW_OPCODE_XOR, this->result, op[0], op[1]);
       break;
 
    case ir_binop_logic_or:
-      emit(fs_inst(BRW_OPCODE_OR, this->result, op[0], op[1]));
+      emit(BRW_OPCODE_OR, this->result, op[0], op[1]);
       break;
 
    case ir_binop_logic_and:
-      emit(fs_inst(BRW_OPCODE_AND, this->result, op[0], op[1]));
+      emit(BRW_OPCODE_AND, this->result, op[0], op[1]);
       break;
 
    case ir_binop_dot:
@@ -988,7 +965,7 @@ fs_visitor::visit(ir_expression *ir)
    case ir_unop_b2f:
    case ir_unop_b2i:
    case ir_unop_f2i:
-      emit(fs_inst(BRW_OPCODE_MOV, this->result, op[0]));
+      emit(BRW_OPCODE_MOV, this->result, op[0]);
       break;
    case ir_unop_f2b:
    case ir_unop_i2b:
@@ -997,42 +974,41 @@ fs_visitor::visit(ir_expression *ir)
       if (intel->gen < 5)
         temp.type = op[0].type;
 
-      inst = emit(fs_inst(BRW_OPCODE_CMP, temp, op[0], fs_reg(0.0f)));
+      inst = emit(BRW_OPCODE_CMP, temp, op[0], fs_reg(0.0f));
       inst->conditional_mod = BRW_CONDITIONAL_NZ;
-      inst = emit(fs_inst(BRW_OPCODE_AND, this->result,
-                         this->result, fs_reg(1)));
+      inst = emit(BRW_OPCODE_AND, this->result, this->result, fs_reg(1));
       break;
 
    case ir_unop_trunc:
-      emit(fs_inst(BRW_OPCODE_RNDZ, this->result, op[0]));
+      emit(BRW_OPCODE_RNDZ, this->result, op[0]);
       break;
    case ir_unop_ceil:
       op[0].negate = !op[0].negate;
-      inst = emit(fs_inst(BRW_OPCODE_RNDD, this->result, op[0]));
+      inst = emit(BRW_OPCODE_RNDD, this->result, op[0]);
       this->result.negate = true;
       break;
    case ir_unop_floor:
-      inst = emit(fs_inst(BRW_OPCODE_RNDD, this->result, op[0]));
+      inst = emit(BRW_OPCODE_RNDD, this->result, op[0]);
       break;
    case ir_unop_fract:
-      inst = emit(fs_inst(BRW_OPCODE_FRC, this->result, op[0]));
+      inst = emit(BRW_OPCODE_FRC, this->result, op[0]);
       break;
    case ir_unop_round_even:
-      emit(fs_inst(BRW_OPCODE_RNDE, this->result, op[0]));
+      emit(BRW_OPCODE_RNDE, this->result, op[0]);
       break;
 
    case ir_binop_min:
-      inst = emit(fs_inst(BRW_OPCODE_CMP, this->result, op[0], op[1]));
+      inst = emit(BRW_OPCODE_CMP, this->result, op[0], op[1]);
       inst->conditional_mod = BRW_CONDITIONAL_L;
 
-      inst = emit(fs_inst(BRW_OPCODE_SEL, this->result, op[0], op[1]));
+      inst = emit(BRW_OPCODE_SEL, this->result, op[0], op[1]);
       inst->predicated = true;
       break;
    case ir_binop_max:
-      inst = emit(fs_inst(BRW_OPCODE_CMP, this->result, op[0], op[1]));
+      inst = emit(BRW_OPCODE_CMP, this->result, op[0], op[1]);
       inst->conditional_mod = BRW_CONDITIONAL_G;
 
-      inst = emit(fs_inst(BRW_OPCODE_SEL, this->result, op[0], op[1]));
+      inst = emit(BRW_OPCODE_SEL, this->result, op[0], op[1]);
       inst->predicated = true;
       break;
 
@@ -1041,16 +1017,16 @@ fs_visitor::visit(ir_expression *ir)
       break;
 
    case ir_unop_bit_not:
-      inst = emit(fs_inst(BRW_OPCODE_NOT, this->result, op[0]));
+      inst = emit(BRW_OPCODE_NOT, this->result, op[0]);
       break;
    case ir_binop_bit_and:
-      inst = emit(fs_inst(BRW_OPCODE_AND, this->result, op[0], op[1]));
+      inst = emit(BRW_OPCODE_AND, this->result, op[0], op[1]);
       break;
    case ir_binop_bit_xor:
-      inst = emit(fs_inst(BRW_OPCODE_XOR, this->result, op[0], op[1]));
+      inst = emit(BRW_OPCODE_XOR, this->result, op[0], op[1]);
       break;
    case ir_binop_bit_or:
-      inst = emit(fs_inst(BRW_OPCODE_OR, this->result, op[0], op[1]));
+      inst = emit(BRW_OPCODE_OR, this->result, op[0], op[1]);
       break;
 
    case ir_unop_u2f:
@@ -1074,7 +1050,7 @@ fs_visitor::emit_assignment_writes(fs_reg &l, fs_reg &r,
         l.type = brw_type_for_base_type(type);
         r.type = brw_type_for_base_type(type);
 
-        fs_inst *inst = emit(fs_inst(BRW_OPCODE_MOV, l, r));
+        fs_inst *inst = emit(BRW_OPCODE_MOV, l, r);
         inst->predicated = predicated;
 
         l.reg_offset++;
@@ -1127,7 +1103,7 @@ fs_visitor::visit(ir_assignment *ir)
        ir->lhs->type->is_vector()) {
       for (int i = 0; i < ir->lhs->type->vector_elements; i++) {
         if (ir->write_mask & (1 << i)) {
-           inst = emit(fs_inst(BRW_OPCODE_MOV, l, r));
+           inst = emit(BRW_OPCODE_MOV, l, r);
            if (ir->condition)
               inst->predicated = true;
            r.reg_offset++;
@@ -1152,8 +1128,7 @@ fs_visitor::emit_texture_gen4(ir_texture *ir, fs_reg dst, fs_reg coordinate)
 
    if (ir->shadow_comparitor) {
       for (int i = 0; i < ir->coordinate->type->vector_elements; i++) {
-        emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen + i),
-                     coordinate));
+        emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen + i), coordinate);
         coordinate.reg_offset++;
       }
       /* gen4's SIMD8 sampler always has the slots for u,v,r present. */
@@ -1163,29 +1138,25 @@ fs_visitor::emit_texture_gen4(ir_texture *ir, fs_reg dst, fs_reg coordinate)
         /* There's no plain shadow compare message, so we use shadow
          * compare with a bias of 0.0.
          */
-        emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen),
-                     fs_reg(0.0f)));
+        emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), fs_reg(0.0f));
         mlen++;
       } else if (ir->op == ir_txb) {
         ir->lod_info.bias->accept(this);
-        emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen),
-                     this->result));
+        emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result);
         mlen++;
       } else {
         assert(ir->op == ir_txl);
         ir->lod_info.lod->accept(this);
-        emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen),
-                     this->result));
+        emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result);
         mlen++;
       }
 
       ir->shadow_comparitor->accept(this);
-      emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result));
+      emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result);
       mlen++;
    } else if (ir->op == ir_tex) {
       for (int i = 0; i < ir->coordinate->type->vector_elements; i++) {
-        emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen + i),
-                     coordinate));
+        emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen + i), coordinate);
         coordinate.reg_offset++;
       }
       /* gen4's SIMD8 sampler always has the slots for u,v,r present. */
@@ -1199,8 +1170,7 @@ fs_visitor::emit_texture_gen4(ir_texture *ir, fs_reg dst, fs_reg coordinate)
       assert(ir->op == ir_txb || ir->op == ir_txl);
 
       for (int i = 0; i < ir->coordinate->type->vector_elements; i++) {
-        emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen + i * 2),
-                     coordinate));
+        emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen + i * 2), coordinate);
         coordinate.reg_offset++;
       }
 
@@ -1209,13 +1179,11 @@ fs_visitor::emit_texture_gen4(ir_texture *ir, fs_reg dst, fs_reg coordinate)
 
       if (ir->op == ir_txb) {
         ir->lod_info.bias->accept(this);
-        emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen),
-                     this->result));
+        emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result);
         mlen++;
       } else {
         ir->lod_info.lod->accept(this);
-        emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen),
-                     this->result));
+        emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result);
         mlen++;
       }
 
@@ -1236,16 +1204,16 @@ fs_visitor::emit_texture_gen4(ir_texture *ir, fs_reg dst, fs_reg coordinate)
    fs_inst *inst = NULL;
    switch (ir->op) {
    case ir_tex:
-      inst = emit(fs_inst(FS_OPCODE_TEX, dst));
+      inst = emit(FS_OPCODE_TEX, dst);
       break;
    case ir_txb:
-      inst = emit(fs_inst(FS_OPCODE_TXB, dst));
+      inst = emit(FS_OPCODE_TXB, dst);
       break;
    case ir_txl:
-      inst = emit(fs_inst(FS_OPCODE_TXL, dst));
+      inst = emit(FS_OPCODE_TXL, dst);
       break;
    case ir_txd:
-      inst = emit(fs_inst(FS_OPCODE_TXD, dst));
+      inst = emit(FS_OPCODE_TXD, dst);
       break;
    case ir_txf:
       assert(!"GLSL 1.30 features unsupported");
@@ -1256,7 +1224,7 @@ fs_visitor::emit_texture_gen4(ir_texture *ir, fs_reg dst, fs_reg coordinate)
 
    if (simd16) {
       for (int i = 0; i < 4; i++) {
-        emit(fs_inst(BRW_OPCODE_MOV, orig_dst, dst));
+        emit(BRW_OPCODE_MOV, orig_dst, dst);
         orig_dst.reg_offset++;
         dst.reg_offset += 2;
       }
@@ -1280,8 +1248,7 @@ fs_visitor::emit_texture_gen5(ir_texture *ir, fs_reg dst, fs_reg coordinate)
    int base_mrf = 1;
 
    for (int i = 0; i < ir->coordinate->type->vector_elements; i++) {
-      emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen + i),
-                  coordinate));
+      emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen + i), coordinate);
       coordinate.reg_offset++;
    }
    mlen += ir->coordinate->type->vector_elements;
@@ -1290,30 +1257,30 @@ fs_visitor::emit_texture_gen5(ir_texture *ir, fs_reg dst, fs_reg coordinate)
       mlen = MAX2(mlen, 5);
 
       ir->shadow_comparitor->accept(this);
-      emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result));
+      emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result);
       mlen++;
    }
 
    fs_inst *inst = NULL;
    switch (ir->op) {
    case ir_tex:
-      inst = emit(fs_inst(FS_OPCODE_TEX, dst));
+      inst = emit(FS_OPCODE_TEX, dst);
       break;
    case ir_txb:
       ir->lod_info.bias->accept(this);
       mlen = MAX2(mlen, 5);
-      emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result));
+      emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result);
       mlen++;
 
-      inst = emit(fs_inst(FS_OPCODE_TXB, dst));
+      inst = emit(FS_OPCODE_TXB, dst);
       break;
    case ir_txl:
       ir->lod_info.lod->accept(this);
       mlen = MAX2(mlen, 5);
-      emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result));
+      emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result);
       mlen++;
 
-      inst = emit(fs_inst(FS_OPCODE_TXL, dst));
+      inst = emit(FS_OPCODE_TXL, dst);
       break;
    case ir_txd:
    case ir_txf:
@@ -1356,14 +1323,14 @@ fs_visitor::visit(ir_texture *ir)
       }
 
       /* Explicitly set up the message header by copying g0 to msg reg m1. */
-      emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, 1, BRW_REGISTER_TYPE_UD),
-                                  fs_reg(GRF, 0, BRW_REGISTER_TYPE_UD)));
+      emit(BRW_OPCODE_MOV, fs_reg(MRF, 1, BRW_REGISTER_TYPE_UD),
+          fs_reg(GRF, 0, BRW_REGISTER_TYPE_UD));
 
       /* Then set the offset bits in DWord 2 of the message header. */
-      emit(fs_inst(BRW_OPCODE_MOV,
-                  fs_reg(retype(brw_vec1_reg(BRW_MESSAGE_REGISTER_FILE, 1, 2),
-                                BRW_REGISTER_TYPE_UD)),
-                  fs_reg(brw_imm_uw(offset_bits))));
+      emit(BRW_OPCODE_MOV,
+          fs_reg(retype(brw_vec1_reg(BRW_MESSAGE_REGISTER_FILE, 1, 2),
+                        BRW_REGISTER_TYPE_UD)),
+          fs_reg(brw_imm_uw(offset_bits)));
    }
 
    /* Should be lowered by do_lower_texture_projection */
@@ -1409,10 +1376,10 @@ fs_visitor::visit(ir_texture *ir)
       fs_reg src = coordinate;
       coordinate = dst;
 
-      emit(fs_inst(BRW_OPCODE_MUL, dst, src, scale_x));
+      emit(BRW_OPCODE_MUL, dst, src, scale_x);
       dst.reg_offset++;
       src.reg_offset++;
-      emit(fs_inst(BRW_OPCODE_MUL, dst, src, scale_y));
+      emit(BRW_OPCODE_MUL, dst, src, scale_y);
    }
 
    /* Writemasking doesn't eliminate channels on SIMD8 texture
@@ -1453,13 +1420,13 @@ fs_visitor::visit(ir_texture *ir)
         l.reg_offset += i;
 
         if (swiz == SWIZZLE_ZERO) {
-           emit(fs_inst(BRW_OPCODE_MOV, l, fs_reg(0.0f)));
+           emit(BRW_OPCODE_MOV, l, fs_reg(0.0f));
         } else if (swiz == SWIZZLE_ONE) {
-           emit(fs_inst(BRW_OPCODE_MOV, l, fs_reg(1.0f)));
+           emit(BRW_OPCODE_MOV, l, fs_reg(1.0f));
         } else {
            fs_reg r = dst;
            r.reg_offset += GET_SWZ(c->key.tex_swizzles[inst->sampler], i);
-           emit(fs_inst(BRW_OPCODE_MOV, l, r));
+           emit(BRW_OPCODE_MOV, l, r);
         }
       }
       this->result = swizzle_dst;
@@ -1500,7 +1467,7 @@ fs_visitor::visit(ir_swizzle *ir)
       }
 
       channel.reg_offset += swiz;
-      emit(fs_inst(BRW_OPCODE_MOV, result, channel));
+      emit(BRW_OPCODE_MOV, result, channel);
       result.reg_offset++;
    }
 }
@@ -1512,8 +1479,8 @@ fs_visitor::visit(ir_discard *ir)
 
    assert(ir->condition == NULL); /* FINISHME */
 
-   emit(fs_inst(FS_OPCODE_DISCARD_NOT, temp, reg_null_d));
-   emit(fs_inst(FS_OPCODE_DISCARD_AND, reg_null_d, temp));
+   emit(FS_OPCODE_DISCARD_NOT, temp, reg_null_d);
+   emit(FS_OPCODE_DISCARD_AND, reg_null_d, temp);
    kill_emitted = true;
 }
 
@@ -1539,7 +1506,7 @@ fs_visitor::visit(ir_constant *ir)
 
         dst_reg.type = src_reg.type;
         for (unsigned j = 0; j < size; j++) {
-           emit(fs_inst(BRW_OPCODE_MOV, dst_reg, src_reg));
+           emit(BRW_OPCODE_MOV, dst_reg, src_reg);
            src_reg.reg_offset++;
            dst_reg.reg_offset++;
         }
@@ -1554,7 +1521,7 @@ fs_visitor::visit(ir_constant *ir)
 
         dst_reg.type = src_reg.type;
         for (unsigned j = 0; j < size; j++) {
-           emit(fs_inst(BRW_OPCODE_MOV, dst_reg, src_reg));
+           emit(BRW_OPCODE_MOV, dst_reg, src_reg);
            src_reg.reg_offset++;
            dst_reg.reg_offset++;
         }
@@ -1565,16 +1532,16 @@ fs_visitor::visit(ir_constant *ir)
       for (unsigned i = 0; i < size; i++) {
         switch (ir->type->base_type) {
         case GLSL_TYPE_FLOAT:
-           emit(fs_inst(BRW_OPCODE_MOV, dst_reg, fs_reg(ir->value.f[i])));
+           emit(BRW_OPCODE_MOV, dst_reg, fs_reg(ir->value.f[i]));
            break;
         case GLSL_TYPE_UINT:
-           emit(fs_inst(BRW_OPCODE_MOV, dst_reg, fs_reg(ir->value.u[i])));
+           emit(BRW_OPCODE_MOV, dst_reg, fs_reg(ir->value.u[i]));
            break;
         case GLSL_TYPE_INT:
-           emit(fs_inst(BRW_OPCODE_MOV, dst_reg, fs_reg(ir->value.i[i])));
+           emit(BRW_OPCODE_MOV, dst_reg, fs_reg(ir->value.i[i]));
            break;
         case GLSL_TYPE_BOOL:
-           emit(fs_inst(BRW_OPCODE_MOV, dst_reg, fs_reg((int)ir->value.b[i])));
+           emit(BRW_OPCODE_MOV, dst_reg, fs_reg((int)ir->value.b[i]));
            break;
         default:
            assert(!"Non-float/uint/int/bool constant");
@@ -1605,40 +1572,39 @@ fs_visitor::emit_bool_to_cond_code(ir_rvalue *ir)
 
       switch (expr->operation) {
       case ir_unop_logic_not:
-        inst = emit(fs_inst(BRW_OPCODE_AND, reg_null_d, op[0], fs_reg(1)));
+        inst = emit(BRW_OPCODE_AND, reg_null_d, op[0], fs_reg(1));
         inst->conditional_mod = BRW_CONDITIONAL_Z;
         break;
 
       case ir_binop_logic_xor:
-        inst = emit(fs_inst(BRW_OPCODE_XOR, reg_null_d, op[0], op[1]));
+        inst = emit(BRW_OPCODE_XOR, reg_null_d, op[0], op[1]);
         inst->conditional_mod = BRW_CONDITIONAL_NZ;
         break;
 
       case ir_binop_logic_or:
-        inst = emit(fs_inst(BRW_OPCODE_OR, reg_null_d, op[0], op[1]));
+        inst = emit(BRW_OPCODE_OR, reg_null_d, op[0], op[1]);
         inst->conditional_mod = BRW_CONDITIONAL_NZ;
         break;
 
       case ir_binop_logic_and:
-        inst = emit(fs_inst(BRW_OPCODE_AND, reg_null_d, op[0], op[1]));
+        inst = emit(BRW_OPCODE_AND, reg_null_d, op[0], op[1]);
         inst->conditional_mod = BRW_CONDITIONAL_NZ;
         break;
 
       case ir_unop_f2b:
         if (intel->gen >= 6) {
-           inst = emit(fs_inst(BRW_OPCODE_CMP, reg_null_d,
-                               op[0], fs_reg(0.0f)));
+           inst = emit(BRW_OPCODE_CMP, reg_null_d, op[0], fs_reg(0.0f));
         } else {
-           inst = emit(fs_inst(BRW_OPCODE_MOV, reg_null_f, op[0]));
+           inst = emit(BRW_OPCODE_MOV, reg_null_f, op[0]);
         }
         inst->conditional_mod = BRW_CONDITIONAL_NZ;
         break;
 
       case ir_unop_i2b:
         if (intel->gen >= 6) {
-           inst = emit(fs_inst(BRW_OPCODE_CMP, reg_null_d, op[0], fs_reg(0)));
+           inst = emit(BRW_OPCODE_CMP, reg_null_d, op[0], fs_reg(0));
         } else {
-           inst = emit(fs_inst(BRW_OPCODE_MOV, reg_null_d, op[0]));
+           inst = emit(BRW_OPCODE_MOV, reg_null_d, op[0]);
         }
         inst->conditional_mod = BRW_CONDITIONAL_NZ;
         break;
@@ -1651,14 +1617,14 @@ fs_visitor::emit_bool_to_cond_code(ir_rvalue *ir)
       case ir_binop_all_equal:
       case ir_binop_nequal:
       case ir_binop_any_nequal:
-        inst = emit(fs_inst(BRW_OPCODE_CMP, reg_null_cmp, op[0], op[1]));
+        inst = emit(BRW_OPCODE_CMP, reg_null_cmp, op[0], op[1]);
         inst->conditional_mod =
            brw_conditional_for_comparison(expr->operation);
         break;
 
       default:
         assert(!"not reached");
-        this->fail = true;
+        fail("bad cond code\n");
         break;
       }
       return;
@@ -1667,11 +1633,10 @@ fs_visitor::emit_bool_to_cond_code(ir_rvalue *ir)
    ir->accept(this);
 
    if (intel->gen >= 6) {
-      fs_inst *inst = emit(fs_inst(BRW_OPCODE_AND, reg_null_d,
-                                  this->result, fs_reg(1)));
+      fs_inst *inst = emit(BRW_OPCODE_AND, reg_null_d, this->result, fs_reg(1));
       inst->conditional_mod = BRW_CONDITIONAL_NZ;
    } else {
-      fs_inst *inst = emit(fs_inst(BRW_OPCODE_MOV, reg_null_d, this->result));
+      fs_inst *inst = emit(BRW_OPCODE_MOV, reg_null_d, this->result);
       inst->conditional_mod = BRW_CONDITIONAL_NZ;
    }
 }
@@ -1700,36 +1665,36 @@ fs_visitor::emit_if_gen6(ir_if *ir)
 
       switch (expr->operation) {
       case ir_unop_logic_not:
-        inst = emit(fs_inst(BRW_OPCODE_IF, temp, op[0], fs_reg(0)));
+        inst = emit(BRW_OPCODE_IF, temp, op[0], fs_reg(0));
         inst->conditional_mod = BRW_CONDITIONAL_Z;
         return;
 
       case ir_binop_logic_xor:
-        inst = emit(fs_inst(BRW_OPCODE_IF, reg_null_d, op[0], op[1]));
+        inst = emit(BRW_OPCODE_IF, reg_null_d, op[0], op[1]);
         inst->conditional_mod = BRW_CONDITIONAL_NZ;
         return;
 
       case ir_binop_logic_or:
         temp = fs_reg(this, glsl_type::bool_type);
-        emit(fs_inst(BRW_OPCODE_OR, temp, op[0], op[1]));
-        inst = emit(fs_inst(BRW_OPCODE_IF, reg_null_d, temp, fs_reg(0)));
+        emit(BRW_OPCODE_OR, temp, op[0], op[1]);
+        inst = emit(BRW_OPCODE_IF, reg_null_d, temp, fs_reg(0));
         inst->conditional_mod = BRW_CONDITIONAL_NZ;
         return;
 
       case ir_binop_logic_and:
         temp = fs_reg(this, glsl_type::bool_type);
-        emit(fs_inst(BRW_OPCODE_AND, temp, op[0], op[1]));
-        inst = emit(fs_inst(BRW_OPCODE_IF, reg_null_d, temp, fs_reg(0)));
+        emit(BRW_OPCODE_AND, temp, op[0], op[1]);
+        inst = emit(BRW_OPCODE_IF, reg_null_d, temp, fs_reg(0));
         inst->conditional_mod = BRW_CONDITIONAL_NZ;
         return;
 
       case ir_unop_f2b:
-        inst = emit(fs_inst(BRW_OPCODE_IF, reg_null_f, op[0], fs_reg(0)));
+        inst = emit(BRW_OPCODE_IF, reg_null_f, op[0], fs_reg(0));
         inst->conditional_mod = BRW_CONDITIONAL_NZ;
         return;
 
       case ir_unop_i2b:
-        inst = emit(fs_inst(BRW_OPCODE_IF, reg_null_d, op[0], fs_reg(0)));
+        inst = emit(BRW_OPCODE_IF, reg_null_d, op[0], fs_reg(0));
         inst->conditional_mod = BRW_CONDITIONAL_NZ;
         return;
 
@@ -1741,15 +1706,15 @@ fs_visitor::emit_if_gen6(ir_if *ir)
       case ir_binop_all_equal:
       case ir_binop_nequal:
       case ir_binop_any_nequal:
-        inst = emit(fs_inst(BRW_OPCODE_IF, reg_null_d, op[0], op[1]));
+        inst = emit(BRW_OPCODE_IF, reg_null_d, op[0], op[1]);
         inst->conditional_mod =
            brw_conditional_for_comparison(expr->operation);
         return;
       default:
         assert(!"not reached");
-        inst = emit(fs_inst(BRW_OPCODE_IF, reg_null_d, op[0], fs_reg(0)));
+        inst = emit(BRW_OPCODE_IF, reg_null_d, op[0], fs_reg(0));
         inst->conditional_mod = BRW_CONDITIONAL_NZ;
-        this->fail = true;
+        fail("bad condition\n");
         return;
       }
       return;
@@ -1757,7 +1722,7 @@ fs_visitor::emit_if_gen6(ir_if *ir)
 
    ir->condition->accept(this);
 
-   fs_inst *inst = emit(fs_inst(BRW_OPCODE_IF, reg_null_d, this->result, fs_reg(0)));
+   fs_inst *inst = emit(BRW_OPCODE_IF, reg_null_d, this->result, fs_reg(0));
    inst->conditional_mod = BRW_CONDITIONAL_NZ;
 }
 
@@ -1776,7 +1741,7 @@ fs_visitor::visit(ir_if *ir)
    } else {
       emit_bool_to_cond_code(ir->condition);
 
-      inst = emit(fs_inst(BRW_OPCODE_IF));
+      inst = emit(BRW_OPCODE_IF);
       inst->predicated = true;
    }
 
@@ -1788,7 +1753,7 @@ fs_visitor::visit(ir_if *ir)
    }
 
    if (!ir->else_instructions.is_empty()) {
-      emit(fs_inst(BRW_OPCODE_ELSE));
+      emit(BRW_OPCODE_ELSE);
 
       foreach_iter(exec_list_iterator, iter, ir->else_instructions) {
         ir_instruction *ir = (ir_instruction *)iter.get();
@@ -1798,7 +1763,7 @@ fs_visitor::visit(ir_if *ir)
       }
    }
 
-   emit(fs_inst(BRW_OPCODE_ENDIF));
+   emit(BRW_OPCODE_ENDIF);
 }
 
 void
@@ -1815,21 +1780,20 @@ fs_visitor::visit(ir_loop *ir)
         this->base_ir = ir->from;
         ir->from->accept(this);
 
-        emit(fs_inst(BRW_OPCODE_MOV, counter, this->result));
+        emit(BRW_OPCODE_MOV, counter, this->result);
       }
    }
 
-   emit(fs_inst(BRW_OPCODE_DO));
+   emit(BRW_OPCODE_DO);
 
    if (ir->to) {
       this->base_ir = ir->to;
       ir->to->accept(this);
 
-      fs_inst *inst = emit(fs_inst(BRW_OPCODE_CMP, reg_null_cmp,
-                                  counter, this->result));
+      fs_inst *inst = emit(BRW_OPCODE_CMP, reg_null_cmp, counter, this->result);
       inst->conditional_mod = brw_conditional_for_comparison(ir->cmp);
 
-      inst = emit(fs_inst(BRW_OPCODE_BREAK));
+      inst = emit(BRW_OPCODE_BREAK);
       inst->predicated = true;
    }
 
@@ -1843,10 +1807,10 @@ fs_visitor::visit(ir_loop *ir)
    if (ir->increment) {
       this->base_ir = ir->increment;
       ir->increment->accept(this);
-      emit(fs_inst(BRW_OPCODE_ADD, counter, counter, this->result));
+      emit(BRW_OPCODE_ADD, counter, counter, this->result);
    }
 
-   emit(fs_inst(BRW_OPCODE_WHILE));
+   emit(BRW_OPCODE_WHILE);
 }
 
 void
@@ -1854,10 +1818,10 @@ fs_visitor::visit(ir_loop_jump *ir)
 {
    switch (ir->mode) {
    case ir_loop_jump::jump_break:
-      emit(fs_inst(BRW_OPCODE_BREAK));
+      emit(BRW_OPCODE_BREAK);
       break;
    case ir_loop_jump::jump_continue:
-      emit(fs_inst(BRW_OPCODE_CONTINUE));
+      emit(BRW_OPCODE_CONTINUE);
       break;
    }
 }
@@ -1923,23 +1887,13 @@ void
 fs_visitor::emit_dummy_fs()
 {
    /* Everyone's favorite color. */
-   emit(fs_inst(BRW_OPCODE_MOV,
-               fs_reg(MRF, 2),
-               fs_reg(1.0f)));
-   emit(fs_inst(BRW_OPCODE_MOV,
-               fs_reg(MRF, 3),
-               fs_reg(0.0f)));
-   emit(fs_inst(BRW_OPCODE_MOV,
-               fs_reg(MRF, 4),
-               fs_reg(1.0f)));
-   emit(fs_inst(BRW_OPCODE_MOV,
-               fs_reg(MRF, 5),
-               fs_reg(0.0f)));
+   emit(BRW_OPCODE_MOV, fs_reg(MRF, 2), fs_reg(1.0f));
+   emit(BRW_OPCODE_MOV, fs_reg(MRF, 3), fs_reg(0.0f));
+   emit(BRW_OPCODE_MOV, fs_reg(MRF, 4), fs_reg(1.0f));
+   emit(BRW_OPCODE_MOV, fs_reg(MRF, 5), fs_reg(0.0f));
 
    fs_inst *write;
-   write = emit(fs_inst(FS_OPCODE_FB_WRITE,
-                       fs_reg(0),
-                       fs_reg(0)));
+   write = emit(FS_OPCODE_FB_WRITE, fs_reg(0), fs_reg(0));
    write->base_mrf = 0;
 }
 
@@ -1969,14 +1923,14 @@ fs_visitor::emit_interpolation_setup_gen4()
    this->pixel_y = fs_reg(this, glsl_type::uint_type);
    this->pixel_x.type = BRW_REGISTER_TYPE_UW;
    this->pixel_y.type = BRW_REGISTER_TYPE_UW;
-   emit(fs_inst(BRW_OPCODE_ADD,
-               this->pixel_x,
-               fs_reg(stride(suboffset(g1_uw, 4), 2, 4, 0)),
-               fs_reg(brw_imm_v(0x10101010))));
-   emit(fs_inst(BRW_OPCODE_ADD,
-               this->pixel_y,
-               fs_reg(stride(suboffset(g1_uw, 5), 2, 4, 0)),
-               fs_reg(brw_imm_v(0x11001100))));
+   emit(BRW_OPCODE_ADD,
+       this->pixel_x,
+       fs_reg(stride(suboffset(g1_uw, 4), 2, 4, 0)),
+       fs_reg(brw_imm_v(0x10101010)));
+   emit(BRW_OPCODE_ADD,
+       this->pixel_y,
+       fs_reg(stride(suboffset(g1_uw, 5), 2, 4, 0)),
+       fs_reg(brw_imm_v(0x11001100)));
 
    this->current_annotation = "compute pixel deltas from v0";
    if (brw->has_pln) {
@@ -1987,22 +1941,18 @@ fs_visitor::emit_interpolation_setup_gen4()
       this->delta_x = fs_reg(this, glsl_type::float_type);
       this->delta_y = fs_reg(this, glsl_type::float_type);
    }
-   emit(fs_inst(BRW_OPCODE_ADD,
-               this->delta_x,
-               this->pixel_x,
-               fs_reg(negate(brw_vec1_grf(1, 0)))));
-   emit(fs_inst(BRW_OPCODE_ADD,
-               this->delta_y,
-               this->pixel_y,
-               fs_reg(negate(brw_vec1_grf(1, 1)))));
+   emit(BRW_OPCODE_ADD, this->delta_x,
+       this->pixel_x, fs_reg(negate(brw_vec1_grf(1, 0))));
+   emit(BRW_OPCODE_ADD, this->delta_y,
+       this->pixel_y, fs_reg(negate(brw_vec1_grf(1, 1))));
 
    this->current_annotation = "compute pos.w and 1/pos.w";
    /* Compute wpos.w.  It's always in our setup, since it's needed to
     * interpolate the other attributes.
     */
    this->wpos_w = fs_reg(this, glsl_type::float_type);
-   emit(fs_inst(FS_OPCODE_LINTERP, wpos_w, this->delta_x, this->delta_y,
-               interp_reg(FRAG_ATTRIB_WPOS, 3)));
+   emit(FS_OPCODE_LINTERP, wpos_w, this->delta_x, this->delta_y,
+       interp_reg(FRAG_ATTRIB_WPOS, 3));
    /* Compute the pixel 1/W value from wpos.w. */
    this->pixel_w = fs_reg(this, glsl_type::float_type);
    emit_math(FS_OPCODE_RCP, this->pixel_w, wpos_w);
@@ -2021,14 +1971,14 @@ fs_visitor::emit_interpolation_setup_gen6()
    fs_reg int_pixel_y = fs_reg(this, glsl_type::uint_type);
    int_pixel_x.type = BRW_REGISTER_TYPE_UW;
    int_pixel_y.type = BRW_REGISTER_TYPE_UW;
-   emit(fs_inst(BRW_OPCODE_ADD,
-               int_pixel_x,
-               fs_reg(stride(suboffset(g1_uw, 4), 2, 4, 0)),
-               fs_reg(brw_imm_v(0x10101010))));
-   emit(fs_inst(BRW_OPCODE_ADD,
-               int_pixel_y,
-               fs_reg(stride(suboffset(g1_uw, 5), 2, 4, 0)),
-               fs_reg(brw_imm_v(0x11001100))));
+   emit(BRW_OPCODE_ADD,
+       int_pixel_x,
+       fs_reg(stride(suboffset(g1_uw, 4), 2, 4, 0)),
+       fs_reg(brw_imm_v(0x10101010)));
+   emit(BRW_OPCODE_ADD,
+       int_pixel_y,
+       fs_reg(stride(suboffset(g1_uw, 5), 2, 4, 0)),
+       fs_reg(brw_imm_v(0x11001100)));
 
    /* As of gen6, we can no longer mix float and int sources.  We have
     * to turn the integer pixel centers into floats for their actual
@@ -2036,13 +1986,13 @@ fs_visitor::emit_interpolation_setup_gen6()
     */
    this->pixel_x = fs_reg(this, glsl_type::float_type);
    this->pixel_y = fs_reg(this, glsl_type::float_type);
-   emit(fs_inst(BRW_OPCODE_MOV, this->pixel_x, int_pixel_x));
-   emit(fs_inst(BRW_OPCODE_MOV, this->pixel_y, int_pixel_y));
+   emit(BRW_OPCODE_MOV, this->pixel_x, int_pixel_x);
+   emit(BRW_OPCODE_MOV, this->pixel_y, int_pixel_y);
 
-   this->current_annotation = "compute 1/pos.w";
-   this->wpos_w = fs_reg(brw_vec8_grf(c->source_w_reg, 0));
-   this->pixel_w = fs_reg(this, glsl_type::float_type);
-   emit_math(FS_OPCODE_RCP, this->pixel_w, wpos_w);
+   this->current_annotation = "compute pos.w";
+   this->pixel_w = fs_reg(brw_vec8_grf(c->source_w_reg, 0));
+   this->wpos_w = fs_reg(this, glsl_type::float_type);
+   emit_math(FS_OPCODE_RCP, this->wpos_w, this->pixel_w);
 
    this->delta_x = fs_reg(brw_vec8_grf(2, 0));
    this->delta_y = fs_reg(brw_vec8_grf(3, 0));
@@ -2069,8 +2019,8 @@ fs_visitor::emit_fb_writes()
    }
 
    if (c->aa_dest_stencil_reg) {
-      emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, nr++),
-                  fs_reg(brw_vec8_grf(c->aa_dest_stencil_reg, 0))));
+      emit(BRW_OPCODE_MOV, fs_reg(MRF, nr++),
+          fs_reg(brw_vec8_grf(c->aa_dest_stencil_reg, 0)));
    }
 
    /* Reserve space for color. It'll be filled in per MRT below. */
@@ -2083,17 +2033,17 @@ fs_visitor::emit_fb_writes()
         assert(this->frag_depth);
         fs_reg depth = *(variable_storage(this->frag_depth));
 
-        emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, nr++), depth));
+        emit(BRW_OPCODE_MOV, fs_reg(MRF, nr++), depth);
       } else {
         /* Pass through the payload depth. */
-        emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, nr++),
-                     fs_reg(brw_vec8_grf(c->source_depth_reg, 0))));
+        emit(BRW_OPCODE_MOV, fs_reg(MRF, nr++),
+             fs_reg(brw_vec8_grf(c->source_depth_reg, 0)));
       }
    }
 
    if (c->dest_depth_reg) {
-      emit(fs_inst(BRW_OPCODE_MOV, fs_reg(MRF, nr++),
-                  fs_reg(brw_vec8_grf(c->dest_depth_reg, 0))));
+      emit(BRW_OPCODE_MOV, fs_reg(MRF, nr++),
+          fs_reg(brw_vec8_grf(c->dest_depth_reg, 0)));
    }
 
    fs_reg color = reg_undef;
@@ -2110,9 +2060,7 @@ fs_visitor::emit_fb_writes()
                                                 target);
       if (this->frag_color || this->frag_data) {
         for (int i = 0; i < 4; i++) {
-           emit(fs_inst(BRW_OPCODE_MOV,
-                        fs_reg(MRF, color_mrf + i),
-                        color));
+           emit(BRW_OPCODE_MOV, fs_reg(MRF, color_mrf + i), color);
            color.reg_offset++;
         }
       }
@@ -2120,8 +2068,7 @@ fs_visitor::emit_fb_writes()
       if (this->frag_color)
         color.reg_offset -= 4;
 
-      fs_inst *inst = emit(fs_inst(FS_OPCODE_FB_WRITE,
-                                  reg_undef, reg_undef));
+      fs_inst *inst = emit(FS_OPCODE_FB_WRITE);
       inst->target = target;
       inst->base_mrf = 0;
       inst->mlen = nr;
@@ -2137,13 +2084,10 @@ fs_visitor::emit_fb_writes()
          * renderbuffer.
          */
         color.reg_offset += 3;
-        emit(fs_inst(BRW_OPCODE_MOV,
-                     fs_reg(MRF, color_mrf + 3),
-                     color));
+        emit(BRW_OPCODE_MOV, fs_reg(MRF, color_mrf + 3), color);
       }
 
-      fs_inst *inst = emit(fs_inst(FS_OPCODE_FB_WRITE,
-                                  reg_undef, reg_undef));
+      fs_inst *inst = emit(FS_OPCODE_FB_WRITE);
       inst->base_mrf = 0;
       inst->mlen = nr;
       inst->eot = true;
@@ -2868,8 +2812,7 @@ fs_visitor::calculate_live_intervals()
            if (inst->src[i].file == GRF && inst->src[i].reg != 0) {
               int reg = inst->src[i].reg;
 
-              if (!loop_depth || (this->virtual_grf_sizes[reg] == 1 &&
-                                  def[reg] >= bb_header_ip)) {
+              if (!loop_depth) {
                  use[reg] = ip;
               } else {
                  def[reg] = MIN2(loop_start, def[reg]);
@@ -2885,8 +2828,7 @@ fs_visitor::calculate_live_intervals()
         if (inst->dst.file == GRF && inst->dst.reg != 0) {
            int reg = inst->dst.reg;
 
-           if (!loop_depth || (this->virtual_grf_sizes[reg] == 1 &&
-                               !inst->predicated)) {
+           if (!loop_depth) {
               def[reg] = MIN2(def[reg], ip);
            } else {
               def[reg] = MIN2(def[reg], loop_start);
@@ -2996,12 +2938,41 @@ fs_visitor::propagate_constants()
                  progress = true;
               }
               break;
+
            case BRW_OPCODE_CMP:
+              if (i == 1) {
+                 scan_inst->src[i] = inst->src[0];
+                 progress = true;
+              } else if (i == 0 && scan_inst->src[1].file != IMM) {
+                 uint32_t new_cmod;
+
+                 new_cmod = brw_swap_cmod(scan_inst->conditional_mod);
+                 if (new_cmod != ~0u) {
+                    /* Fit this constant in by swapping the operands and
+                     * flipping the test
+                     */
+                    scan_inst->src[0] = scan_inst->src[1];
+                    scan_inst->src[1] = inst->src[0];
+                    scan_inst->conditional_mod = new_cmod;
+                    progress = true;
+                 }
+              }
+              break;
+
            case BRW_OPCODE_SEL:
               if (i == 1) {
                  scan_inst->src[i] = inst->src[0];
                  progress = true;
+              } else if (i == 0 && scan_inst->src[1].file != IMM) {
+                 /* Fit this constant in by swapping the operands and
+                  * flipping the predicate
+                  */
+                 scan_inst->src[0] = scan_inst->src[1];
+                 scan_inst->src[1] = inst->src[0];
+                 scan_inst->predicate_inverse = !scan_inst->predicate_inverse;
+                 progress = true;
               }
+              break;
            }
         }
 
@@ -3487,6 +3458,7 @@ fs_visitor::generate_code()
 
       brw_set_conditionalmod(p, inst->conditional_mod);
       brw_set_predicate_control(p, inst->predicated);
+      brw_set_predicate_inverse(p, inst->predicate_inverse);
       brw_set_saturate(p, inst->saturate);
 
       switch (inst->opcode) {
@@ -3677,7 +3649,7 @@ fs_visitor::generate_code()
         } else {
            _mesa_problem(ctx, "Unsupported opcode %d in FS", inst->opcode);
         }
-        this->fail = true;
+        fail("unsupported opcode in FS\n");
       }
 
       if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
@@ -3808,18 +3780,18 @@ brw_wm_fs_emit(struct brw_context *brw, struct brw_wm_compile *c)
         v.assign_regs_trivial();
       else {
         while (!v.assign_regs()) {
-           if (v.fail)
+           if (v.failed)
               break;
         }
       }
    }
 
-   if (!v.fail)
+   if (!v.failed)
       v.generate_code();
 
-   assert(!v.fail); /* FINISHME: Cleanly fail, tested at link time, etc. */
+   assert(!v.failed); /* FINISHME: Cleanly fail, tested at link time, etc. */
 
-   if (v.fail)
+   if (v.failed)
       return GL_FALSE;
 
    c->prog_data.total_grf = v.grf_used;
index dc030ae5b50224c007f72c2d070c7da3fd817663..f792906cfe79afeb41132c6818a859d82df0823d 100644 (file)
@@ -331,6 +331,7 @@ public:
    fs_reg src[3];
    bool saturate;
    bool predicated;
+   bool predicate_inverse;
    int conditional_mod; /**< BRW_CONDITIONAL_* */
 
    int mlen; /**< SEND message length */
@@ -364,7 +365,7 @@ public:
       this->ctx = &intel->ctx;
       this->mem_ctx = ralloc_context(NULL);
       this->shader = shader;
-      this->fail = false;
+      this->failed = false;
       this->variable_ht = hash_table_ctor(0,
                                          hash_table_pointer_hash,
                                          hash_table_pointer_compare);
@@ -432,6 +433,32 @@ public:
    void visit(ir_function_signature *ir);
 
    fs_inst *emit(fs_inst inst);
+
+   fs_inst *emit(int opcode)
+   {
+      return emit(fs_inst(opcode));
+   }
+
+   fs_inst *emit(int opcode, fs_reg dst)
+   {
+      return emit(fs_inst(opcode, dst));
+   }
+
+   fs_inst *emit(int opcode, fs_reg dst, fs_reg src0)
+   {
+      return emit(fs_inst(opcode, dst, src0));
+   }
+
+   fs_inst *emit(int opcode, fs_reg dst, fs_reg src0, fs_reg src1)
+   {
+      return emit(fs_inst(opcode, dst, src0, src1));
+   }
+
+   fs_inst *emit(int opcode, fs_reg dst, fs_reg src0, fs_reg src1, fs_reg src2)
+   {
+      return emit(fs_inst(opcode, dst, src0, src1, src2));
+   }
+
    void setup_paramvalues_refs();
    void assign_curb_setup();
    void calculate_urb_setup();
@@ -450,6 +477,7 @@ public:
    bool remove_duplicate_mrf_writes();
    bool virtual_grf_interferes(int a, int b);
    void schedule_instructions();
+   void fail(const char *msg, ...);
 
    void generate_code();
    void generate_fb_write(fs_inst *inst);
@@ -523,7 +551,7 @@ public:
    ir_instruction *base_ir;
    /** @} */
 
-   bool fail;
+   bool failed;
 
    /* Result of last visit() method. */
    fs_reg result;
index f0277423170cd41cbe4c3db82725ae8efc64e45d..67f29ce1816c6c5eeabfa133f8f221b14c251b65 100644 (file)
@@ -119,8 +119,7 @@ fs_visitor::assign_regs()
       }
       if (i == class_count) {
         if (this->virtual_grf_sizes[r] >= base_reg_count) {
-           fprintf(stderr, "Object too large to register allocate.\n");
-           this->fail = true;
+           fail("Object too large to register allocate.\n");
         }
 
         class_sizes[class_count++] = this->virtual_grf_sizes[r];
@@ -226,8 +225,9 @@ fs_visitor::assign_regs()
        * loop back into here to try again.
        */
       int reg = choose_spill_reg(g);
-      if (reg == -1 || intel->gen >= 6) {
-        this->fail = true;
+
+      if (reg == -1) {
+        fail("no register to spill\n");
       } else {
         spill_reg(reg);
       }
index 70c451d071db0d5ad6da6d3a79bce067d2c5b1c3..14ee6767cd5c4a9cef2710b62aa085212cce1ae6 100644 (file)
@@ -83,45 +83,23 @@ static void compile_gs_prog( struct brw_context *brw,
    /* Note that primitives which don't require a GS program have
     * already been weeded out by this stage:
     */
+
+   /* Gen6: VF has already converted into polygon, and LINELOOP is
+    * converted to LINESTRIP at the beginning of the 3D pipeline.
+    */
+   if (intel->gen == 6)
+      return;
+
    switch (key->primitive) {
    case GL_QUADS:
-      /* Gen6: VF has already converted into polygon. */
-      if (intel->gen == 6)
-          return;
       brw_gs_quads( &c, key );
       break;
    case GL_QUAD_STRIP:
-      if (intel->gen == 6)
-          return;
       brw_gs_quad_strip( &c, key );
       break;
    case GL_LINE_LOOP:
-      /* Gen6: LINELOOP is converted to LINESTRIP at the beginning of the 3D pipeline */
-      if (intel->gen == 6)
-          return;
       brw_gs_lines( &c );
       break;
-   case GL_LINES:
-      if (key->hint_gs_always)
-        brw_gs_lines( &c );
-      else {
-        return;
-      }
-      break;
-   case GL_TRIANGLES:
-      if (key->hint_gs_always)
-        brw_gs_tris( &c );
-      else {
-        return;
-      }
-      break;
-   case GL_POINTS:
-      if (key->hint_gs_always)
-        brw_gs_points( &c );
-      else {
-        return;
-      }
-      break;      
    default:
       return;
    }
@@ -170,7 +148,6 @@ static void populate_key( struct brw_context *brw,
 {
    struct gl_context *ctx = &brw->intel.ctx;
    struct intel_context *intel = &brw->intel;
-   int prim_gs_always;
 
    memset(key, 0, sizeof(*key));
 
@@ -180,8 +157,6 @@ static void populate_key( struct brw_context *brw,
    /* BRW_NEW_PRIMITIVE */
    key->primitive = gs_prim[brw->primitive];
 
-   key->hint_gs_always = 0;    /* debug code? */
-   
    /* _NEW_LIGHT */
    key->pv_first = (ctx->Light.ProvokingVertex == GL_FIRST_VERTEX_CONVENTION);
    if (key->primitive == GL_QUADS && ctx->Light.ShadeModel != GL_FLAT) {
@@ -191,14 +166,11 @@ static void populate_key( struct brw_context *brw,
       key->pv_first = GL_TRUE;
    }
 
-   if (intel->gen == 6)
-       prim_gs_always = 0;
-   else
-       prim_gs_always = brw->primitive == GL_QUADS ||
-                       brw->primitive == GL_QUAD_STRIP ||
-                       brw->primitive == GL_LINE_LOOP;
-
-   key->need_gs_prog = (key->hint_gs_always || prim_gs_always);
+   key->need_gs_prog = (intel->gen == 6)
+      ? 0
+      : (brw->primitive == GL_QUADS ||
+        brw->primitive == GL_QUAD_STRIP ||
+        brw->primitive == GL_LINE_LOOP);
 }
 
 /* Calculate interpolants for triangle and line rasterization.
index 7e3531086f98beec196d9a5d2ac846a661472a86..c33528e4577687d964d44f6164a35c66d279d36a 100644 (file)
 struct brw_gs_prog_key {
    GLbitfield64 attrs;
    GLuint primitive:4;
-   GLuint hint_gs_always:1;
    GLuint pv_first:1;
    GLuint need_gs_prog:1;
-   GLuint pad:25;
+   GLuint pad:26;
 };
 
 struct brw_gs_compile {
@@ -70,8 +69,6 @@ struct brw_gs_compile {
 
 void brw_gs_quads( struct brw_gs_compile *c, struct brw_gs_prog_key *key );
 void brw_gs_quad_strip( struct brw_gs_compile *c, struct brw_gs_prog_key *key );
-void brw_gs_tris( struct brw_gs_compile *c );
 void brw_gs_lines( struct brw_gs_compile *c );
-void brw_gs_points( struct brw_gs_compile *c );
 
 #endif
index e1f751fdaa44973915233b97519fdb85085bc475..3bb526b63af364a43b001b51f20c658769ce5b61 100644 (file)
@@ -193,19 +193,6 @@ void brw_gs_quad_strip( struct brw_gs_compile *c, struct brw_gs_prog_key *key )
    }
 }
 
-void brw_gs_tris( struct brw_gs_compile *c )
-{
-   struct intel_context *intel = &c->func.brw->intel;
-
-   brw_gs_alloc_regs(c, 3);
-
-   if (intel->needs_ff_sync)
-          brw_gs_ff_sync(c, 1);      
-   brw_gs_emit_vue(c, c->reg.vertex[0], 0, ((_3DPRIM_TRILIST << 2) | R02_PRIM_START));
-   brw_gs_emit_vue(c, c->reg.vertex[1], 0, (_3DPRIM_TRILIST << 2));
-   brw_gs_emit_vue(c, c->reg.vertex[2], 1, ((_3DPRIM_TRILIST << 2) | R02_PRIM_END));
-}
-
 void brw_gs_lines( struct brw_gs_compile *c )
 {
    struct intel_context *intel = &c->func.brw->intel;
@@ -217,22 +204,3 @@ void brw_gs_lines( struct brw_gs_compile *c )
    brw_gs_emit_vue(c, c->reg.vertex[0], 0, ((_3DPRIM_LINESTRIP << 2) | R02_PRIM_START));
    brw_gs_emit_vue(c, c->reg.vertex[1], 1, ((_3DPRIM_LINESTRIP << 2) | R02_PRIM_END));
 }
-
-void brw_gs_points( struct brw_gs_compile *c )
-{
-   struct intel_context *intel = &c->func.brw->intel;
-
-   brw_gs_alloc_regs(c, 1);
-
-   if (intel->needs_ff_sync)
-          brw_gs_ff_sync(c, 1);      
-   brw_gs_emit_vue(c, c->reg.vertex[0], 1, ((_3DPRIM_POINTLIST << 2) | R02_PRIM_START | R02_PRIM_END));
-}
-
-
-
-
-
-
-
-
index c768be23fa745df7e12213aa4911949e5fbac7b8..19eea07ebc6e90d94a19fc0755fe090f1e70da9e 100644 (file)
@@ -149,7 +149,8 @@ static void upload_pipelined_state_pointers(struct brw_context *brw )
    else
       OUT_BATCH(0);
    OUT_RELOC(brw->clip.state_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
-   OUT_RELOC(brw->sf.state_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
+   OUT_RELOC(brw->intel.batch.bo, I915_GEM_DOMAIN_INSTRUCTION, 0,
+            brw->sf.state_offset);
    OUT_RELOC(brw->wm.state_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
    OUT_RELOC(brw->intel.batch.bo, I915_GEM_DOMAIN_INSTRUCTION, 0,
             brw->cc.state_offset);
@@ -247,8 +248,7 @@ static void emit_depthbuffer(struct brw_context *brw)
       }
 
       assert(region->tiling != I915_TILING_X);
-      if (intel->gen >= 6)
-        assert(region->tiling != I915_TILING_NONE);
+      assert(intel->gen < 6 || region->tiling == I915_TILING_Y);
 
       BEGIN_BATCH(len);
       OUT_BATCH(_3DSTATE_DEPTH_BUFFER << 16 | (len - 2));
@@ -283,6 +283,9 @@ static void emit_depthbuffer(struct brw_context *brw)
    }
 }
 
+/**
+ * \see brw_context.state.depth_region
+ */
 const struct brw_tracked_state brw_depthbuffer = {
    .dirty = {
       .mesa = 0,
index ee68095fcebb5e7a7bed7f6b3fa3dab4206e7b2d..6674f1640c83eb72cd680b40bfe7266925bb77be 100644 (file)
@@ -134,11 +134,6 @@ static GLboolean brwProgramStringNotify( struct gl_context *ctx,
          brw_fragment_program_const(brw->fragment_program);
       struct gl_shader_program *shader_program;
 
-      if (fprog->FogOption) {
-         _mesa_append_fog_code(ctx, fprog);
-         fprog->FogOption = GL_NONE;
-      }
-
       if (newFP == curFP)
         brw->state.dirty.brw |= BRW_NEW_FRAGMENT_PROGRAM;
       newFP->id = brw->program_id++;      
index bd3a21ed9e2fc9b968c083fc6eeff16c47bb0ab2..66d91a0bde7b6a49f43d8cdb7bc08bcc21ae6c22 100644 (file)
 
 static void upload_sf_vp(struct brw_context *brw)
 {
+   struct intel_context *intel = &brw->intel;
    struct gl_context *ctx = &brw->intel.ctx;
    const GLfloat depth_scale = 1.0F / ctx->DrawBuffer->_DepthMaxF;
-   struct brw_sf_viewport sfv;
+   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));
+   sfv = brw_state_batch(brw, sizeof(*sfv), 32, &brw->sf.vp_offset);
+   memset(sfv, 0, sizeof(*sfv));
 
    if (render_to_fbo) {
       y_scale = 1.0;
@@ -58,12 +60,12 @@ static void upload_sf_vp(struct brw_context *brw)
 
    /* _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;
+   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;
 
    /* _NEW_SCISSOR | _NEW_BUFFERS | _NEW_VIEWPORT
     * for DrawBuffer->_[XY]{min,max}
@@ -85,27 +87,31 @@ static void upload_sf_vp(struct brw_context *brw)
        * anything.  Instead, just provide a min > max scissor inside
        * the bounds, which produces the expected no rendering.
        */
-      sfv.scissor.xmin = 1;
-      sfv.scissor.xmax = 0;
-      sfv.scissor.ymin = 1;
-      sfv.scissor.ymax = 0;
+      sfv->scissor.xmin = 1;
+      sfv->scissor.xmax = 0;
+      sfv->scissor.ymin = 1;
+      sfv->scissor.ymax = 0;
    } else if (render_to_fbo) {
       /* texmemory: Y=0=bottom */
-      sfv.scissor.xmin = ctx->DrawBuffer->_Xmin;
-      sfv.scissor.xmax = ctx->DrawBuffer->_Xmax - 1;
-      sfv.scissor.ymin = ctx->DrawBuffer->_Ymin;
-      sfv.scissor.ymax = ctx->DrawBuffer->_Ymax - 1;
+      sfv->scissor.xmin = ctx->DrawBuffer->_Xmin;
+      sfv->scissor.xmax = ctx->DrawBuffer->_Xmax - 1;
+      sfv->scissor.ymin = ctx->DrawBuffer->_Ymin;
+      sfv->scissor.ymax = ctx->DrawBuffer->_Ymax - 1;
    }
    else {
       /* memory: Y=0=top */
-      sfv.scissor.xmin = ctx->DrawBuffer->_Xmin;
-      sfv.scissor.xmax = ctx->DrawBuffer->_Xmax - 1;
-      sfv.scissor.ymin = ctx->DrawBuffer->Height - ctx->DrawBuffer->_Ymax;
-      sfv.scissor.ymax = ctx->DrawBuffer->Height - ctx->DrawBuffer->_Ymin - 1;
+      sfv->scissor.xmin = ctx->DrawBuffer->_Xmin;
+      sfv->scissor.xmax = ctx->DrawBuffer->_Xmax - 1;
+      sfv->scissor.ymin = ctx->DrawBuffer->Height - ctx->DrawBuffer->_Ymax;
+      sfv->scissor.ymax = ctx->DrawBuffer->Height - ctx->DrawBuffer->_Ymin - 1;
    }
 
+   /* Keep a pointer to it for brw_state_dump.c */
    drm_intel_bo_unreference(brw->sf.vp_bo);
-   brw->sf.vp_bo = brw_cache_data(&brw->cache, BRW_SF_VP, &sfv, sizeof(sfv));
+   drm_intel_bo_reference(intel->batch.bo);
+   brw->sf.vp_bo = intel->batch.bo;
+
+   brw->state.dirty.cache |= CACHE_NEW_SF_VP;
 }
 
 const struct brw_tracked_state brw_sf_vp = {
@@ -113,92 +119,44 @@ const struct brw_tracked_state brw_sf_vp = {
       .mesa  = (_NEW_VIEWPORT | 
                _NEW_SCISSOR |
                _NEW_BUFFERS),
-      .brw   = 0,
+      .brw   = BRW_NEW_BATCH,
       .cache = 0
    },
    .prepare = upload_sf_vp
 };
 
-struct brw_sf_unit_key {
-   unsigned int total_grf;
-   unsigned int urb_entry_read_length;
-
-   unsigned int nr_urb_entries, urb_size, sfsize;
-
-   GLenum front_face, cull_face;
-   unsigned pv_first:1;
-   unsigned scissor:1;
-   unsigned line_smooth:1;
-   unsigned point_sprite:1;
-   unsigned use_vs_point_size:1;
-   unsigned render_to_fbo:1;
-   float line_width;
-   float point_size;
-};
-
-static void
-sf_unit_populate_key(struct brw_context *brw, struct brw_sf_unit_key *key)
-{
-   struct gl_context *ctx = &brw->intel.ctx;
-   memset(key, 0, sizeof(*key));
-
-   /* CACHE_NEW_SF_PROG */
-   key->total_grf = brw->sf.prog_data->total_grf;
-   key->urb_entry_read_length = brw->sf.prog_data->urb_read_length;
-
-   /* BRW_NEW_URB_FENCE */
-   key->nr_urb_entries = brw->urb.nr_sf_entries;
-   key->urb_size = brw->urb.vsize;
-   key->sfsize = brw->urb.sfsize;
-
-   key->scissor = ctx->Scissor.Enabled;
-   key->front_face = ctx->Polygon.FrontFace;
-
-   if (ctx->Polygon.CullFlag)
-      key->cull_face = ctx->Polygon.CullFaceMode;
-   else
-      key->cull_face = GL_NONE;
-
-   key->line_width = ctx->Line.Width;
-   key->line_smooth = ctx->Line.SmoothFlag;
-
-   key->point_sprite = ctx->Point.PointSprite;
-   key->point_size = CLAMP(ctx->Point.Size, ctx->Point.MinSize, ctx->Point.MaxSize);
-   key->use_vs_point_size = (ctx->VertexProgram.PointSizeEnabled ||
-                            ctx->Point._Attenuated);
-
-   /* _NEW_LIGHT */
-   key->pv_first = (ctx->Light.ProvokingVertex == GL_FIRST_VERTEX_CONVENTION);
-
-   key->render_to_fbo = brw->intel.ctx.DrawBuffer->Name != 0;
-}
-
-static drm_intel_bo *
-sf_unit_create_from_key(struct brw_context *brw, struct brw_sf_unit_key *key,
-                       drm_intel_bo **reloc_bufs)
+static void upload_sf_unit( struct brw_context *brw )
 {
    struct intel_context *intel = &brw->intel;
-   struct brw_sf_unit_state sf;
-   drm_intel_bo *bo;
+   struct gl_context *ctx = &intel->ctx;
+   struct brw_sf_unit_state *sf;
+   drm_intel_bo *bo = intel->batch.bo;
    int chipset_max_threads;
-   memset(&sf, 0, sizeof(sf));
+   bool render_to_fbo = brw->intel.ctx.DrawBuffer->Name != 0;
+
+   sf = brw_state_batch(brw, sizeof(*sf), 64, &brw->sf.state_offset);
 
-   sf.thread0.grf_reg_count = ALIGN(key->total_grf, 16) / 16 - 1;
-   sf.thread0.kernel_start_pointer = brw->sf.prog_bo->offset >> 6; /* reloc */
+   memset(sf, 0, sizeof(*sf));
+
+   /* CACHE_NEW_SF_PROG */
+   sf->thread0.grf_reg_count = ALIGN(brw->sf.prog_data->total_grf, 16) / 16 - 1;
+   sf->thread0.kernel_start_pointer = brw->sf.prog_bo->offset >> 6; /* reloc */
 
-   sf.thread1.floating_point_mode = BRW_FLOATING_POINT_NON_IEEE_754;
+   sf->thread1.floating_point_mode = BRW_FLOATING_POINT_NON_IEEE_754;
 
-   sf.thread3.dispatch_grf_start_reg = 3;
+   sf->thread3.dispatch_grf_start_reg = 3;
 
    if (intel->gen == 5)
-       sf.thread3.urb_entry_read_offset = 3;
+       sf->thread3.urb_entry_read_offset = 3;
    else
-       sf.thread3.urb_entry_read_offset = 1;
+       sf->thread3.urb_entry_read_offset = 1;
 
-   sf.thread3.urb_entry_read_length = key->urb_entry_read_length;
+   /* CACHE_NEW_SF_PROG */
+   sf->thread3.urb_entry_read_length = brw->sf.prog_data->urb_read_length;
 
-   sf.thread4.nr_urb_entries = key->nr_urb_entries;
-   sf.thread4.urb_entry_allocation_size = key->sfsize - 1;
+   /* BRW_NEW_URB_FENCE */
+   sf->thread4.nr_urb_entries = brw->urb.nr_sf_entries;
+   sf->thread4.urb_entry_allocation_size = brw->urb.sfsize - 1;
 
    /* Each SF thread produces 1 PUE, and there can be up to 24 (Pre-Ironlake) or
     * 48 (Ironlake) threads.
@@ -208,46 +166,51 @@ sf_unit_create_from_key(struct brw_context *brw, struct brw_sf_unit_key *key,
    else
       chipset_max_threads = 24;
 
-   sf.thread4.max_threads = MIN2(chipset_max_threads, key->nr_urb_entries) - 1;
+   /* BRW_NEW_URB_FENCE */
+   sf->thread4.max_threads = MIN2(chipset_max_threads,
+                                 brw->urb.nr_sf_entries) - 1;
 
    if (unlikely(INTEL_DEBUG & DEBUG_SINGLE_THREAD))
-      sf.thread4.max_threads = 0;
+      sf->thread4.max_threads = 0;
 
    if (unlikely(INTEL_DEBUG & DEBUG_STATS))
-      sf.thread4.stats_enable = 1;
+      sf->thread4.stats_enable = 1;
 
    /* CACHE_NEW_SF_VP */
-   sf.sf5.sf_viewport_state_offset = brw->sf.vp_bo->offset >> 5; /* reloc */
+   sf->sf5.sf_viewport_state_offset = (brw->sf.vp_bo->offset +
+                                      brw->sf.vp_offset) >> 5; /* reloc */
 
-   sf.sf5.viewport_transform = 1;
+   sf->sf5.viewport_transform = 1;
 
    /* _NEW_SCISSOR */
-   if (key->scissor)
-      sf.sf6.scissor = 1;
+   if (ctx->Scissor.Enabled)
+      sf->sf6.scissor = 1;
 
    /* _NEW_POLYGON */
-   if (key->front_face == GL_CCW)
-      sf.sf5.front_winding = BRW_FRONTWINDING_CCW;
+   if (ctx->Polygon.FrontFace == GL_CCW)
+      sf->sf5.front_winding = BRW_FRONTWINDING_CCW;
    else
-      sf.sf5.front_winding = BRW_FRONTWINDING_CW;
+      sf->sf5.front_winding = BRW_FRONTWINDING_CW;
 
-   /* The viewport is inverted for rendering to a FBO, and that inverts
+   /* _NEW_BUFFERS
+    * The viewport is inverted for rendering to a FBO, and that inverts
     * polygon front/back orientation.
     */
-   sf.sf5.front_winding ^= key->render_to_fbo;
+   sf->sf5.front_winding ^= render_to_fbo;
 
-   switch (key->cull_face) {
+   /* _NEW_POLYGON */
+   switch (ctx->Polygon.CullFlag ? ctx->Polygon.CullFaceMode : GL_NONE) {
    case GL_FRONT:
-      sf.sf6.cull_mode = BRW_CULLMODE_FRONT;
+      sf->sf6.cull_mode = BRW_CULLMODE_FRONT;
       break;
    case GL_BACK:
-      sf.sf6.cull_mode = BRW_CULLMODE_BACK;
+      sf->sf6.cull_mode = BRW_CULLMODE_BACK;
       break;
    case GL_FRONT_AND_BACK:
-      sf.sf6.cull_mode = BRW_CULLMODE_BOTH;
+      sf->sf6.cull_mode = BRW_CULLMODE_BOTH;
       break;
    case GL_NONE:
-      sf.sf6.cull_mode = BRW_CULLMODE_NONE;
+      sf->sf6.cull_mode = BRW_CULLMODE_NONE;
       break;
    default:
       assert(0);
@@ -256,19 +219,18 @@ sf_unit_create_from_key(struct brw_context *brw, struct brw_sf_unit_key *key,
 
    /* _NEW_LINE */
    /* XXX use ctx->Const.Min/MaxLineWidth here */
-   sf.sf6.line_width = CLAMP(key->line_width, 1.0, 5.0) * (1<<1);
+   sf->sf6.line_width = CLAMP(ctx->Line.Width, 1.0, 5.0) * (1<<1);
 
-   sf.sf6.line_endcap_aa_region_width = 1;
-   if (key->line_smooth)
-      sf.sf6.aa_enable = 1;
-   else if (sf.sf6.line_width <= 0x2)
-       sf.sf6.line_width = 0;
+   sf->sf6.line_endcap_aa_region_width = 1;
+   if (ctx->Line.SmoothFlag)
+      sf->sf6.aa_enable = 1;
+   else if (sf->sf6.line_width <= 0x2)
+       sf->sf6.line_width = 0;
 
    /* _NEW_BUFFERS */
-   key->render_to_fbo = brw->intel.ctx.DrawBuffer->Name != 0;
-   if (!key->render_to_fbo) {
+   if (!render_to_fbo) {
       /* Rendering to an OpenGL window */
-      sf.sf6.point_rast_rule = BRW_RASTRULE_UPPER_RIGHT;
+      sf->sf6.point_rast_rule = BRW_RASTRULE_UPPER_RIGHT;
    }
    else {
       /* If rendering to an FBO, the pixel coordinate system is
@@ -290,74 +252,56 @@ sf_unit_create_from_key(struct brw_context *brw, struct brw_sf_unit_key *key,
        * incorrectly, which is no worse than occurs without
        * the value, so we're using it here.
        */
-      sf.sf6.point_rast_rule = BRW_RASTRULE_LOWER_RIGHT;
+      sf->sf6.point_rast_rule = BRW_RASTRULE_LOWER_RIGHT;
    }
    /* XXX clamp max depends on AA vs. non-AA */
 
    /* _NEW_POINT */
-   sf.sf7.sprite_point = key->point_sprite;
-   sf.sf7.point_size = CLAMP(rint(key->point_size), 1, 255) * (1<<3);
-   sf.sf7.use_point_size_state = !key->use_vs_point_size;
-   sf.sf7.aa_line_distance_mode = 0;
+   sf->sf7.sprite_point = ctx->Point.PointSprite;
+   sf->sf7.point_size = CLAMP(rint(CLAMP(ctx->Point.Size,
+                                        ctx->Point.MinSize,
+                                        ctx->Point.MaxSize)), 1, 255) * (1<<3);
+   sf->sf7.use_point_size_state = !(ctx->VertexProgram.PointSizeEnabled ||
+                                   ctx->Point._Attenuated);
+   sf->sf7.aa_line_distance_mode = 0;
 
    /* might be BRW_NEW_PRIMITIVE if we have to adjust pv for polygons:
+    * _NEW_LIGHT
     */
-   if (!key->pv_first) {
-      sf.sf7.trifan_pv = 2;
-      sf.sf7.linestrip_pv = 1;
-      sf.sf7.tristrip_pv = 2;
+   if (ctx->Light.ProvokingVertex != GL_FIRST_VERTEX_CONVENTION) {
+      sf->sf7.trifan_pv = 2;
+      sf->sf7.linestrip_pv = 1;
+      sf->sf7.tristrip_pv = 2;
    } else {
-      sf.sf7.trifan_pv = 1;
-      sf.sf7.linestrip_pv = 0;
-      sf.sf7.tristrip_pv = 0;
+      sf->sf7.trifan_pv = 1;
+      sf->sf7.linestrip_pv = 0;
+      sf->sf7.tristrip_pv = 0;
    }
-   sf.sf7.line_last_pixel_enable = 0;
+   sf->sf7.line_last_pixel_enable = 0;
 
    /* Set bias for OpenGL rasterization rules:
     */
-   sf.sf6.dest_org_vbias = 0x8;
-   sf.sf6.dest_org_hbias = 0x8;
-
-   bo = brw_upload_cache(&brw->cache, BRW_SF_UNIT,
-                        key, sizeof(*key),
-                        reloc_bufs, 2,
-                        &sf, sizeof(sf));
+   sf->sf6.dest_org_vbias = 0x8;
+   sf->sf6.dest_org_hbias = 0x8;
 
    /* STATE_PREFETCH command description describes this state as being
     * something loaded through the GPE (L2 ISC), so it's INSTRUCTION domain.
     */
    /* Emit SF program relocation */
-   drm_intel_bo_emit_reloc(bo, offsetof(struct brw_sf_unit_state, thread0),
-                          brw->sf.prog_bo, sf.thread0.grf_reg_count << 1,
+   drm_intel_bo_emit_reloc(bo, (brw->sf.state_offset +
+                               offsetof(struct brw_sf_unit_state, thread0)),
+                          brw->sf.prog_bo, sf->thread0.grf_reg_count << 1,
                           I915_GEM_DOMAIN_INSTRUCTION, 0);
 
    /* Emit SF viewport relocation */
-   drm_intel_bo_emit_reloc(bo, offsetof(struct brw_sf_unit_state, sf5),
-                          brw->sf.vp_bo, (sf.sf5.front_winding |
-                                          (sf.sf5.viewport_transform << 1)),
+   drm_intel_bo_emit_reloc(bo, (brw->sf.state_offset +
+                               offsetof(struct brw_sf_unit_state, sf5)),
+                          intel->batch.bo, (brw->sf.vp_offset |
+                                            sf->sf5.front_winding |
+                                            (sf->sf5.viewport_transform << 1)),
                           I915_GEM_DOMAIN_INSTRUCTION, 0);
 
-   return bo;
-}
-
-static void upload_sf_unit( struct brw_context *brw )
-{
-   struct brw_sf_unit_key key;
-   drm_intel_bo *reloc_bufs[2];
-
-   sf_unit_populate_key(brw, &key);
-
-   reloc_bufs[0] = brw->sf.prog_bo;
-   reloc_bufs[1] = brw->sf.vp_bo;
-
-   drm_intel_bo_unreference(brw->sf.state_bo);
-   brw->sf.state_bo = brw_search_cache(&brw->cache, BRW_SF_UNIT,
-                                      &key, sizeof(key),
-                                      reloc_bufs, 2,
-                                      NULL);
-   if (brw->sf.state_bo == NULL) {
-      brw->sf.state_bo = sf_unit_create_from_key(brw, &key, reloc_bufs);
-   }
+   brw->state.dirty.cache |= CACHE_NEW_SF_UNIT;
 }
 
 const struct brw_tracked_state brw_sf_unit = {
@@ -368,7 +312,8 @@ const struct brw_tracked_state brw_sf_unit = {
                _NEW_POINT | 
                _NEW_SCISSOR |
                _NEW_BUFFERS),
-      .brw   = BRW_NEW_URB_FENCE,
+      .brw   = (BRW_NEW_BATCH |
+               BRW_NEW_URB_FENCE),
       .cache = (CACHE_NEW_SF_VP |
                CACHE_NEW_SF_PROG)
    },
index fdce79da2f4a0ba72bdbcc9fde44cfcc4980fc91..b393259c915d315f6cbeb1db8bce3aa093ee4c06 100644 (file)
@@ -195,8 +195,8 @@ static void dump_sf_viewport_state(struct brw_context *brw)
 
    drm_intel_bo_map(brw->sf.vp_bo, GL_FALSE);
 
-   vp = brw->sf.vp_bo->virtual;
-   vp_off = brw->sf.vp_bo->offset;
+   vp = brw->sf.vp_bo->virtual + brw->sf.vp_offset;
+   vp_off = brw->sf.vp_bo->offset + brw->sf.vp_offset;
 
    state_out(name, vp, vp_off, 0, "m00 = %f\n", vp->viewport.m00);
    state_out(name, vp, vp_off, 1, "m11 = %f\n", vp->viewport.m11);
index 6687a89e80ad6bc8a09459542c69f8fcc23518ce..8d4797fb6752a9ec7dee2bbc2ff0d5774daf3003 100644 (file)
@@ -80,25 +80,6 @@ struct brw_3d_control
    GLuint dword3;   
 };
 
-
-struct brw_3d_primitive
-{
-   struct
-   {
-      GLuint length:8; 
-      GLuint pad:2;
-      GLuint topology:5; 
-      GLuint indexed:1; 
-      GLuint opcode:16; 
-   } header;
-
-   GLuint verts_per_instance;  
-   GLuint start_vert_location;  
-   GLuint instance_count;  
-   GLuint start_instance_location;  
-   GLuint base_vert_location;  
-};
-
 /* These seem to be passed around as function args, so it works out
  * better to keep them as #defines:
  */
@@ -1247,31 +1228,6 @@ struct brw_surface_state
 };
 
 
-
-struct brw_vertex_buffer_state
-{
-   struct {
-      GLuint pitch:11; 
-      GLuint pad:15;
-      GLuint access_type:1; 
-      GLuint vb_index:5; 
-   } vb0;
-   
-   GLuint start_addr; 
-   GLuint max_index;   
-#if 1
-   GLuint instance_data_step_rate; /* not included for sequential/random vertices? */
-#endif
-};
-
-#define BRW_VBP_MAX 17
-
-struct brw_vb_array_state {
-   struct header header;
-   struct brw_vertex_buffer_state vb[BRW_VBP_MAX];
-};
-
-
 struct brw_vertex_element_state
 {
    struct
index 6ae75d22c149e6dc2e92c3afe3ef0fa9c1cc34ff..63ae13191f991d4be9901c46fffefe74624cae58 100644 (file)
@@ -132,6 +132,9 @@ static void brw_upload_vs_prog(struct brw_context *brw)
                        ctx->Polygon.BackMode != GL_FILL);
    key.two_side_color = (ctx->Light.Enabled && ctx->Light.Model.TwoSide);
 
+   /* _NEW_LIGHT | _NEW_BUFFERS */
+   key.clamp_vertex_color = ctx->Light._ClampVertexColor;
+
    /* _NEW_POINT */
    if (ctx->Point.PointSprite) {
       for (i = 0; i < 8; i++) {
@@ -158,7 +161,8 @@ static void brw_upload_vs_prog(struct brw_context *brw)
  */
 const struct brw_tracked_state brw_vs_prog = {
    .dirty = {
-      .mesa  = _NEW_TRANSFORM | _NEW_POLYGON | _NEW_POINT | _NEW_LIGHT,
+      .mesa  = (_NEW_TRANSFORM | _NEW_POLYGON | _NEW_POINT | _NEW_LIGHT |
+               _NEW_BUFFERS),
       .brw   = BRW_NEW_VERTEX_PROGRAM,
       .cache = 0
    },
index 0b88cc1ec76453fb512243f75941c7edc12182b4..7ca84a54b01b1fd0d5ffad69bb1484a12b8aaa2a 100644 (file)
@@ -45,6 +45,7 @@ struct brw_vs_prog_key {
    GLuint copy_edgeflag:1;
    GLuint point_coord_replace:8;
    GLuint two_side_color: 1;
+   GLuint clamp_vertex_color:1;
 };
 
 
index acacf374b75e977eed43c9b99b195bd9836b5ce2..dd4e1e6c6ad93c3287e0a2ca430ab3efeccbff61 100644 (file)
@@ -437,8 +437,14 @@ static void brw_vs_alloc_regs( struct brw_vs_compile *c )
       if (c->key.nr_userclip)
         header_regs += 2;
 
+      /* Each attribute is 16 bytes (1 vec4), so dividing by 8 gives us the
+       * number of 128-byte (1024-bit) units.
+       */
       c->prog_data.urb_entry_size = (attributes_in_vue + header_regs + 7) / 8;
    } else if (intel->gen == 5)
+      /* Each attribute is 16 bytes (1 vec4), so dividing by 4 gives us the
+       * number of 64-byte (512-bit) units.
+       */
       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;
@@ -2215,7 +2221,8 @@ void brw_vs_emit(struct brw_vs_compile *c )
        * instructions. Instead, we directly modify the header
        * of the last (already stored) instruction.
        */
-      if (inst->DstReg.File == PROGRAM_OUTPUT) {
+      if (inst->DstReg.File == PROGRAM_OUTPUT &&
+         c->key.clamp_vertex_color) {
          if ((inst->DstReg.Index == VERT_RESULT_COL0)
              || (inst->DstReg.Index == VERT_RESULT_COL1)
              || (inst->DstReg.Index == VERT_RESULT_BFC0)
index 152ee141568d6ad7062c27ec0da7ba4a06fc4595..ce8712a260f0c3a56fb723fcca75b8de0543fe29 100644 (file)
@@ -115,13 +115,11 @@ static void brw_set_draw_region( struct intel_context *intel,
 {
    struct brw_context *brw = brw_context(&intel->ctx);
 
-   /* release old color/depth regions */
-   if (brw->state.depth_region != depth_region)
+   if (brw->state.depth_region != depth_region) {
       brw->state.dirty.brw |= BRW_NEW_DEPTH_BUFFER;
-   intel_region_release(&brw->state.depth_region);
-
-   /* reference new color/depth regions */
-   intel_region_reference(&brw->state.depth_region, depth_region);
+      intel_region_release(&brw->state.depth_region);
+      intel_region_reference(&brw->state.depth_region, depth_region);
+   }
 }
 
 
index ca51d1599a4a372479682c80b46a6070f3f8b84b..65af227d83178d81b3b36769cddb434fd4d85dc2 100644 (file)
@@ -185,6 +185,7 @@ static void do_wm_prog( struct brw_context *brw,
                        struct brw_fragment_program *fp, 
                        struct brw_wm_prog_key *key)
 {
+   struct intel_context *intel = &brw->intel;
    struct brw_wm_compile *c;
    const GLuint *program;
    GLuint program_size;
@@ -238,12 +239,26 @@ static void do_wm_prog( struct brw_context *brw,
 
    /* Scratch space is used for register spilling */
    if (c->last_scratch) {
+      uint32_t total_scratch;
+
       /* Per-thread scratch space is power-of-two sized. */
       for (c->prog_data.total_scratch = 1024;
           c->prog_data.total_scratch <= c->last_scratch;
           c->prog_data.total_scratch *= 2) {
         /* empty */
       }
+      total_scratch = c->prog_data.total_scratch * brw->wm_max_threads;
+
+      if (brw->wm.scratch_bo && total_scratch > brw->wm.scratch_bo->size) {
+        drm_intel_bo_unreference(brw->wm.scratch_bo);
+        brw->wm.scratch_bo = NULL;
+      }
+      if (brw->wm.scratch_bo == NULL) {
+        brw->wm.scratch_bo = drm_intel_bo_alloc(intel->bufmgr,
+                                                "wm scratch",
+                                                total_scratch,
+                                                4096);
+      }
    }
    else {
       c->prog_data.total_scratch = 0;
@@ -348,6 +363,9 @@ static void brw_wm_populate_key( struct brw_context *brw,
    /* _NEW_HINT */
    key->linear_color = (ctx->Hint.PerspectiveCorrection == GL_FASTEST);
 
+   /* _NEW_FRAG_CLAMP | _NEW_BUFFERS */
+   key->clamp_fragment_color = ctx->Color._ClampFragmentColor;
+
    /* _NEW_TEXTURE */
    for (i = 0; i < BRW_MAX_TEX_UNIT; i++) {
       const struct gl_texture_unit *unit = &ctx->Texture.Unit[i];
@@ -370,14 +388,14 @@ static void brw_wm_populate_key( struct brw_context *brw,
          * well and our shadow compares always return the result in
          * all 4 channels.
          */
-        if (t->CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB) {
-           if (t->DepthMode == GL_ALPHA) {
+        if (t->Sampler.CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB) {
+           if (t->Sampler.DepthMode == GL_ALPHA) {
               swizzles[0] = SWIZZLE_ZERO;
               swizzles[1] = SWIZZLE_ZERO;
               swizzles[2] = SWIZZLE_ZERO;
-           } else if (t->DepthMode == GL_LUMINANCE) {
+           } else if (t->Sampler.DepthMode == GL_LUMINANCE) {
               swizzles[3] = SWIZZLE_ONE;
-           } else if (t->DepthMode == GL_RED) {
+           } else if (t->Sampler.DepthMode == GL_RED) {
               /* See table 3.23 of the GL 3.0 spec. */
               swizzles[1] = SWIZZLE_ZERO;
               swizzles[2] = SWIZZLE_ZERO;
@@ -471,6 +489,7 @@ const struct brw_tracked_state brw_wm_prog = {
                _NEW_POLYGON |
                _NEW_LINE |
                _NEW_LIGHT |
+               _NEW_FRAG_CLAMP |
                _NEW_BUFFERS |
                _NEW_TEXTURE),
       .brw   = (BRW_NEW_FRAGMENT_PROGRAM |
index c40d7bfae0ace73cc1e1cf8c970a150468212065..40659f2602532905f2176f6bbb209f7a29bb6a00 100644 (file)
@@ -65,6 +65,7 @@ struct brw_wm_prog_key {
    GLuint nr_color_regions:5;
    GLuint render_to_fbo:1;
    GLuint alpha_test:1;
+   GLuint clamp_fragment_color:1;
 
    GLbitfield proj_attrib_mask; /**< one bit per fragment program attribute */
    GLuint shadowtex_mask:16;
index ecfd21d439961440478747cf2849a9ed4a01fe1a..cdc1f367e5c3aab092c9a064c5d2e48f78cf8a7d 100644 (file)
@@ -1408,6 +1408,9 @@ void emit_fb_write(struct brw_wm_compile *c,
     */
    brw_push_insn_state(p);
 
+   if (c->key.clamp_fragment_color)
+      brw_set_saturate(p, 1);
+
    for (channel = 0; channel < 4; channel++) {
       if (intel->gen >= 6) {
         /* gen6 SIMD16 single source DP write looks like:
@@ -1459,6 +1462,9 @@ void emit_fb_write(struct brw_wm_compile *c,
         }
       }
    }
+
+   brw_set_saturate(p, 0);
+
    /* skip over the regs populated above:
     */
    if (c->dispatch_width == 16)
index 30672b4251beecb4aea7edd73a22cb3562d40b19..cfc30d8613f8c2243d2a1fd570a0ea7a4b49dbed 100644 (file)
@@ -288,26 +288,26 @@ brw_wm_sampler_populate_key(struct brw_context *brw,
         entry->seamless_cube_map = (texObj->Target == GL_TEXTURE_CUBE_MAP)
            ? ctx->Texture.CubeMapSeamless : GL_FALSE;
 
-        entry->wrap_r = texObj->WrapR;
-        entry->wrap_s = texObj->WrapS;
-        entry->wrap_t = texObj->WrapT;
-
-        entry->maxlod = texObj->MaxLod;
-        entry->minlod = texObj->MinLod;
-        entry->lod_bias = texUnit->LodBias + texObj->LodBias;
-        entry->max_aniso = texObj->MaxAnisotropy;
-        entry->minfilter = texObj->MinFilter;
-        entry->magfilter = texObj->MagFilter;
-        entry->comparemode = texObj->CompareMode;
-         entry->comparefunc = texObj->CompareFunc;
+        entry->wrap_r = texObj->Sampler.WrapR;
+        entry->wrap_s = texObj->Sampler.WrapS;
+        entry->wrap_t = texObj->Sampler.WrapT;
+
+        entry->maxlod = texObj->Sampler.MaxLod;
+        entry->minlod = texObj->Sampler.MinLod;
+        entry->lod_bias = texUnit->LodBias + texObj->Sampler.LodBias;
+        entry->max_aniso = texObj->Sampler.MaxAnisotropy;
+        entry->minfilter = texObj->Sampler.MinFilter;
+        entry->magfilter = texObj->Sampler.MagFilter;
+        entry->comparemode = texObj->Sampler.CompareMode;
+         entry->comparefunc = texObj->Sampler.CompareFunc;
 
         drm_intel_bo_unreference(brw->wm.sdc_bo[unit]);
         if (firstImage->_BaseFormat == GL_DEPTH_COMPONENT) {
            float bordercolor[4] = {
-              texObj->BorderColor.f[0],
-              texObj->BorderColor.f[0],
-              texObj->BorderColor.f[0],
-              texObj->BorderColor.f[0]
+              texObj->Sampler.BorderColor.f[0],
+              texObj->Sampler.BorderColor.f[0],
+              texObj->Sampler.BorderColor.f[0],
+              texObj->Sampler.BorderColor.f[0]
            };
            /* GL specs that border color for depth textures is taken from the
             * R channel, while the hardware uses A.  Spam R into all the
@@ -316,7 +316,7 @@ brw_wm_sampler_populate_key(struct brw_context *brw,
            brw->wm.sdc_bo[unit] = upload_default_color(brw, bordercolor);
         } else {
            brw->wm.sdc_bo[unit] = upload_default_color(brw,
-                                                       texObj->BorderColor.f);
+                                                       texObj->Sampler.BorderColor.f);
         }
         key->sampler_count = unit + 1;
       }
index 5b5afc4626b5b02c7f665bfdd6d761f27ef9e522..be4b260a5ff881c0de884d3edb58b996ca37d797 100644 (file)
@@ -278,30 +278,10 @@ wm_unit_create_from_key(struct brw_context *brw, struct brw_wm_unit_key *key,
 
 static void upload_wm_unit( struct brw_context *brw )
 {
-   struct intel_context *intel = &brw->intel;
    struct brw_wm_unit_key key;
    drm_intel_bo *reloc_bufs[3];
    wm_unit_populate_key(brw, &key);
 
-   /* Allocate the necessary scratch space if we haven't already.  Don't
-    * bother reducing the allocation later, since we use scratch so
-    * rarely.
-    */
-   if (key.total_scratch) {
-      GLuint total = key.total_scratch * brw->wm_max_threads;
-
-      if (brw->wm.scratch_bo && total > brw->wm.scratch_bo->size) {
-        drm_intel_bo_unreference(brw->wm.scratch_bo);
-        brw->wm.scratch_bo = NULL;
-      }
-      if (brw->wm.scratch_bo == NULL) {
-        brw->wm.scratch_bo = drm_intel_bo_alloc(intel->bufmgr,
-                                                "wm scratch",
-                                                total,
-                                                4096);
-      }
-   }
-
    reloc_bufs[0] = brw->wm.prog_bo;
    reloc_bufs[1] = brw->wm.scratch_bo;
    reloc_bufs[2] = brw->wm.sampler_bo;
index 1010d9f6f9c23781ef374554e00eee3d07d4a5d0..e3396a3cbd45cc5885bcb973a5861331f428ca0d 100644 (file)
@@ -100,18 +100,37 @@ static uint32_t brw_format_for_mesa_format[MESA_FORMAT_COUNT] =
    [MESA_FORMAT_SLA8] = BRW_SURFACEFORMAT_L8A8_UNORM_SRGB,
    [MESA_FORMAT_SL8] = BRW_SURFACEFORMAT_L8_UNORM_SRGB,
    [MESA_FORMAT_DUDV8] = BRW_SURFACEFORMAT_R8G8_SNORM,
+   [MESA_FORMAT_SIGNED_R8] = BRW_SURFACEFORMAT_R8_SNORM,
+   [MESA_FORMAT_SIGNED_RG88_REV] = BRW_SURFACEFORMAT_R8G8_SNORM,
    [MESA_FORMAT_SIGNED_RGBA8888_REV] = BRW_SURFACEFORMAT_R8G8B8A8_SNORM,
+   [MESA_FORMAT_SIGNED_R16] = BRW_SURFACEFORMAT_R16_SNORM,
+   [MESA_FORMAT_SIGNED_GR1616] = BRW_SURFACEFORMAT_R16G16_SNORM,
+   [MESA_FORMAT_RGBA_FLOAT32] = BRW_SURFACEFORMAT_R32G32B32A32_FLOAT,
+   [MESA_FORMAT_RG_FLOAT32] = BRW_SURFACEFORMAT_R32G32_FLOAT,
+   [MESA_FORMAT_R_FLOAT32] = BRW_SURFACEFORMAT_R32_FLOAT,
+   [MESA_FORMAT_INTENSITY_FLOAT32] = BRW_SURFACEFORMAT_I32_FLOAT,
+   [MESA_FORMAT_LUMINANCE_FLOAT32] = BRW_SURFACEFORMAT_L32_FLOAT,
+   [MESA_FORMAT_ALPHA_FLOAT32] = BRW_SURFACEFORMAT_A32_FLOAT,
+   [MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32] = BRW_SURFACEFORMAT_L32A32_FLOAT,
 };
 
 bool
 brw_render_target_supported(gl_format format)
 {
+   /* These are not color render targets like the table holds, but we
+    * ask the question for FBO completeness.
+    */
    if (format == MESA_FORMAT_S8_Z24 ||
        format == MESA_FORMAT_X8_Z24 ||
        format == MESA_FORMAT_Z16) {
       return true;
    }
 
+   /* The value of this BRW_SURFACEFORMAT is 0, so hardcode it.
+    */
+   if (format == MESA_FORMAT_RGBA_FLOAT32)
+      return true;
+
    /* Not exactly true, as some of those formats are not renderable.
     * But at least we know how to translate them.
     */
@@ -155,6 +174,13 @@ static GLuint translate_tex_format( gl_format mesa_format,
         return brw_format_for_mesa_format[mesa_format];
       else if (srgb_decode == GL_SKIP_DECODE_EXT)
         return brw_format_for_mesa_format[_mesa_get_srgb_format_linear(mesa_format)];
+
+   case MESA_FORMAT_RGBA_FLOAT32:
+      /* The value of this BRW_SURFACEFORMAT is 0, which tricks the
+       * assertion below.
+       */
+      return BRW_SURFACEFORMAT_R32G32B32A32_FLOAT;
+
    default:
       assert(brw_format_for_mesa_format[mesa_format] != 0);
       return brw_format_for_mesa_format[mesa_format];
@@ -197,8 +223,9 @@ brw_update_texture_surface( struct gl_context *ctx, GLuint unit )
    surf->ss0.mipmap_layout_mode = BRW_SURFACE_MIPMAPLAYOUT_BELOW;
    surf->ss0.surface_type = translate_tex_target(tObj->Target);
    surf->ss0.surface_format = translate_tex_format(firstImage->TexFormat,
-                                                 firstImage->InternalFormat,
-                                                 tObj->DepthMode, tObj->sRGBDecode);
+                                                   firstImage->InternalFormat,
+                                                   tObj->Sampler.DepthMode,
+                                                   tObj->Sampler.sRGBDecode);
 
    /* This is ok for all textures with channel width 8bit or less:
     */
@@ -425,6 +452,14 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
        */
       surf->ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
       break;
+   case MESA_FORMAT_INTENSITY_FLOAT32:
+   case MESA_FORMAT_LUMINANCE_FLOAT32:
+      /* For these formats, we just need to read/write the first
+       * channel into R, which is to say that we just treat them as
+       * GL_RED.
+       */
+      surf->ss0.surface_format = BRW_SURFACEFORMAT_R32_FLOAT;
+      break;
    case MESA_FORMAT_SARGB8:
       /* without GL_EXT_framebuffer_sRGB we shouldn't bind sRGB
         surfaces to the blend/update as sRGB */
@@ -434,8 +469,8 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
         surf->ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
       break;
    default:
+      assert(brw_render_target_supported(irb->Base.Format));
       surf->ss0.surface_format = brw_format_for_mesa_format[irb->Base.Format];
-      assert(surf->ss0.surface_format != 0);
    }
 
    surf->ss0.surface_type = BRW_SURFACE_2D;
index d1648a102d4690f63f2f63dd191159db67699c24..1b935fb5e700a42c89a6f8378f003df7a97e8de1 100644 (file)
@@ -210,10 +210,10 @@ color_calc_state_populate_key(struct brw_context *brw,
    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];
+   key->blend_constant_color[0] = ctx->Color.BlendColorUnclamped[0];
+   key->blend_constant_color[1] = ctx->Color.BlendColorUnclamped[1];
+   key->blend_constant_color[2] = ctx->Color.BlendColorUnclamped[2];
+   key->blend_constant_color[3] = ctx->Color.BlendColorUnclamped[3];
 }
 
 /**
index 7296c7cd1b04268c988840f0235c4e1fa2b2c6ae..c1d0a7393944720e5a54031b58b385acc1f616cf 100644 (file)
@@ -44,38 +44,22 @@ upload_gs_state(struct brw_context *brw)
    OUT_BATCH(0);
    ADVANCE_BATCH();
 
-   if (brw->gs.prog_bo) {
-      BEGIN_BATCH(7);
-      OUT_BATCH(_3DSTATE_GS << 16 | (7 - 2));
-      OUT_RELOC(brw->gs.prog_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
-      OUT_BATCH(GEN6_GS_SPF_MODE |
-               (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 |
-               GEN6_GS_RENDERING_ENABLE);
-      OUT_BATCH(GEN6_GS_ENABLE);
-      ADVANCE_BATCH();
-   } else {
-      BEGIN_BATCH(7);
-      OUT_BATCH(_3DSTATE_GS << 16 | (7 - 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 |
-               GEN6_GS_RENDERING_ENABLE);
-      OUT_BATCH(0);
-      ADVANCE_BATCH();
-   }
+   // GS should never be used on Gen6.  Disable it.
+   assert(brw->gs.prog_bo == NULL);
+   BEGIN_BATCH(7);
+   OUT_BATCH(_3DSTATE_GS << 16 | (7 - 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 |
+            GEN6_GS_RENDERING_ENABLE);
+   OUT_BATCH(0);
+   ADVANCE_BATCH();
 }
 
 const struct brw_tracked_state gen6_gs_state = {
index c3819f9b360a0e34703e390b2165f193be457045..909e1bbe9ba8b5e85492adcee0ab068d8c131caa 100644 (file)
 static void
 prepare_urb( struct brw_context *brw )
 {
-   int urb_size, max_urb_entry;
-   struct intel_context *intel = &brw->intel;
-
-   if (IS_GT1(intel->intelScreen->deviceID)) {
-       urb_size = 32 * 1024;
-       max_urb_entry = 128;
-   } else {
-       urb_size = 64 * 1024;
-       max_urb_entry = 256;
-   }
-
-   brw->urb.nr_vs_entries = max_urb_entry;
-   brw->urb.nr_gs_entries = max_urb_entry;
+   int nr_vs_entries;
 
    /* CACHE_NEW_VS_PROG */
    brw->urb.vs_size = MAX2(brw->vs.prog_data->urb_entry_size, 1);
 
-   if (2 * brw->urb.vs_size > urb_size)
-          brw->urb.nr_vs_entries = brw->urb.nr_gs_entries = 
-               (urb_size ) / (2 * brw->urb.vs_size);
+   /* Calculate how many VS URB entries fit in the total URB size */
+   nr_vs_entries = (brw->urb.size * 1024) / (brw->urb.vs_size * 128);
+
+   if (nr_vs_entries > brw->urb.max_vs_handles)
+      nr_vs_entries = brw->urb.max_vs_handles;
+
+   /* According to volume 2a, nr_vs_entries must be a multiple of 4. */
+   brw->urb.nr_vs_entries = ROUND_DOWN_TO(nr_vs_entries, 4);
+
+   /* Since we currently don't support Geometry Shaders, we always put the
+    * GS unit in passthrough mode and don't allocate it any URB space.
+    */
+   brw->urb.nr_gs_entries = 0;
+   brw->urb.gs_size = 1; /* Incorrect, but with 0 GS entries it doesn't matter. */
 }
 
 static void
@@ -61,6 +60,7 @@ upload_urb(struct brw_context *brw)
 {
    struct intel_context *intel = &brw->intel;
 
+   assert(brw->urb.nr_vs_entries >= 24);
    assert(brw->urb.nr_vs_entries % 4 == 0);
    assert(brw->urb.nr_gs_entries % 4 == 0);
    /* GS requirement */
@@ -70,7 +70,7 @@ upload_urb(struct brw_context *brw)
    OUT_BATCH(_3DSTATE_URB << 16 | (3 - 2));
    OUT_BATCH(((brw->urb.vs_size - 1) << 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) |
+   OUT_BATCH(((brw->urb.gs_size - 1) << GEN6_URB_GS_SIZE_SHIFT) |
             ((brw->urb.nr_gs_entries) << GEN6_URB_GS_ENTRIES_SHIFT));
    ADVANCE_BATCH();
 }
index ce0b8ea7eaa13bc5e7d70eedbf6b13e1cb18550e..a10cec318d647f8f7a77049f3ea40995d30d1f3a 100644 (file)
@@ -137,7 +137,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(((60 - 1) << GEN6_VS_MAX_THREADS_SHIFT) | /* max 60 threads for gen6 */
+   OUT_BATCH(((brw->vs_max_threads - 1) << GEN6_VS_MAX_THREADS_SHIFT) |
             GEN6_VS_STATISTICS_ENABLE |
             GEN6_VS_ENABLE);
    ADVANCE_BATCH();
index 78901ecac576232a7752f71ddffa7b13808a8d32..8215cb15a9c22dbc7707fff986bec3089385fb71 100644 (file)
@@ -144,7 +144,7 @@ upload_wm_state(struct brw_context *brw)
    dw4 |= (brw->wm.prog_data->first_curbe_grf <<
           GEN6_WM_DISPATCH_START_GRF_SHIFT_0);
 
-   dw5 |= (40 - 1) << GEN6_WM_MAX_THREADS_SHIFT;
+   dw5 |= (brw->wm_max_threads - 1) << GEN6_WM_MAX_THREADS_SHIFT;
 
    /* CACHE_NEW_WM_PROG */
    if (brw->wm.prog_data->dispatch_width == 8)
@@ -184,7 +184,12 @@ upload_wm_state(struct brw_context *brw)
    OUT_BATCH(_3DSTATE_WM << 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 */
+   if (brw->wm.prog_data->total_scratch) {
+      OUT_RELOC(brw->wm.scratch_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,
+               ffs(brw->wm.prog_data->total_scratch) - 11);
+   } else {
+      OUT_BATCH(0);
+   }
    OUT_BATCH(dw4);
    OUT_BATCH(dw5);
    OUT_BATCH(dw6);
index 42b4f923e0cbb0df6d39d03352ce849b63e56c56..53d6e7c6acc10da141f04129e4ee1ce60f22b2e4 100644 (file)
@@ -176,8 +176,6 @@ intel_batchbuffer_emit_reloc(struct intel_context *intel,
 {
    int ret;
 
-   assert(delta < buffer->size);
-
    ret = drm_intel_bo_emit_reloc(intel->batch.bo, 4*intel->batch.used,
                                 buffer, delta,
                                 read_domains, write_domain);
@@ -203,8 +201,6 @@ intel_batchbuffer_emit_reloc_fenced(struct intel_context *intel,
 {
    int ret;
 
-   assert(delta < buffer->size);
-
    ret = drm_intel_bo_emit_reloc_fence(intel->batch.bo, 4*intel->batch.used,
                                       buffer, delta,
                                       read_domains, write_domain);
index e1ab7f163718f0208cdaa463d0a370c519490c56..5aac1f6fa246ef333f1ca0dda54ea1632b5b3845 100644 (file)
@@ -146,6 +146,17 @@ intelEmitCopyBlit(struct intel_context *intel,
    src_pitch *= cpp;
    dst_pitch *= cpp;
 
+   /* For big formats (such as floating point), do the copy using 32bpp and
+    * multiply the coordinates.
+    */
+   if (cpp > 4) {
+      assert(cpp % 4 == 0);
+      dst_x *= cpp / 4;
+      dst_x2 *= cpp / 4;
+      src_x *= cpp / 4;
+      cpp = 4;
+   }
+
    BR13 = br13_for_cpp(cpp) | translate_raster_op(logic_op) << 16;
 
    switch (cpp) {
@@ -211,7 +222,7 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask)
 {
    struct intel_context *intel = intel_context(ctx);
    struct gl_framebuffer *fb = ctx->DrawBuffer;
-   GLuint clear_depth;
+   GLuint clear_depth_value, clear_depth_mask;
    GLboolean all;
    GLint cx, cy, cw, ch;
    GLbitfield fail_mask = 0;
@@ -220,12 +231,15 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask)
    /*
     * Compute values for clearing the buffers.
     */
-   clear_depth = 0;
+   clear_depth_value = 0;
+   clear_depth_mask = 0;
    if (mask & BUFFER_BIT_DEPTH) {
-      clear_depth = (GLuint) (fb->_DepthMax * ctx->Depth.Clear);
+      clear_depth_value = (GLuint) (fb->_DepthMax * ctx->Depth.Clear);
+      clear_depth_mask = XY_BLT_WRITE_RGB;
    }
    if (mask & BUFFER_BIT_STENCIL) {
-      clear_depth |= (ctx->Stencil.Clear & 0xff) << 24;
+      clear_depth_value |= (ctx->Stencil.Clear & 0xff) << 24;
+      clear_depth_mask |= XY_BLT_WRITE_ALPHA;
    }
 
    cx = fb->_Xmin;
@@ -239,12 +253,13 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask)
    if (cw == 0 || ch == 0)
       return 0;
 
-   GLuint buf;
    all = (cw == fb->Width && ch == fb->Height);
 
    /* Loop over all renderbuffers */
-   for (buf = 0; buf < BUFFER_COUNT && mask; buf++) {
-      const GLbitfield bufBit = 1 << buf;
+   mask &= (1 << BUFFER_COUNT) - 1;
+   while (mask) {
+      GLuint buf = _mesa_ffs(mask) - 1;
+      GLboolean is_depth_stencil = buf == BUFFER_DEPTH || buf == BUFFER_STENCIL;
       struct intel_renderbuffer *irb;
       drm_intel_bo *write_buffer;
       int x1, y1, x2, y2;
@@ -253,11 +268,15 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask)
       int pitch, cpp;
       drm_intel_bo *aper_array[2];
 
-      if (!(mask & bufBit))
-        continue;
+      mask &= ~(1 << buf);
 
-      /* OK, clear this renderbuffer */
       irb = intel_get_renderbuffer(fb, buf);
+      if (irb == NULL || irb->region == NULL || irb->region->buffer == NULL) {
+         fail_mask |= 1 << buf;
+         continue;
+      }
+
+      /* OK, clear this renderbuffer */
       write_buffer = intel_region_buffer(intel, irb->region,
                                         all ? INTEL_WRITE_FULL :
                                         INTEL_WRITE_PART);
@@ -274,16 +293,13 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask)
          irb->region->buffer, (pitch * cpp),
          x1, y1, x2 - x1, y2 - y1);
 
-      BR13 = br13_for_cpp(cpp) | 0xf0 << 16;
+      BR13 = 0xf0 << 16;
       CMD = XY_COLOR_BLT_CMD;
 
       /* Setup the blit command */
       if (cpp == 4) {
-        if (buf == BUFFER_DEPTH || buf == BUFFER_STENCIL) {
-           if (mask & BUFFER_BIT_DEPTH)
-              CMD |= XY_BLT_WRITE_RGB;
-           if (mask & BUFFER_BIT_STENCIL)
-              CMD |= XY_BLT_WRITE_ALPHA;
+        if (is_depth_stencil) {
+           CMD |= clear_depth_mask;
         } else {
            /* clearing RGBA */
            CMD |= XY_BLT_WRITE_ALPHA | XY_BLT_WRITE_RGB;
@@ -300,8 +316,8 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask)
 #endif
       BR13 |= (pitch * cpp);
 
-      if (buf == BUFFER_DEPTH || buf == BUFFER_STENCIL) {
-        clear_val = clear_depth;
+      if (is_depth_stencil) {
+        clear_val = clear_depth_value;
       } else {
         uint8_t clear[4];
         GLclampf *color = ctx->Color.ClearColor;
@@ -333,12 +349,13 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask)
                                        clear[3], clear[3]);
            break;
         default:
-           fail_mask |= bufBit;
-           mask &= ~bufBit;
+           fail_mask |= 1 << buf;
            continue;
         }
       }
 
+      BR13 |= br13_for_cpp(cpp);
+
       assert(x1 < x2);
       assert(y1 < y2);
 
@@ -367,8 +384,6 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask)
 
       if (buf == BUFFER_DEPTH || buf == BUFFER_STENCIL)
         mask &= ~(BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL);
-      else
-        mask &= ~bufBit;    /* turn off bit, for faster loop exit */
    }
 
    return fail_mask;
index 4ff9140d56e1e2d0800fb6f9ebea778ac1f8f1d0..a3f40effc352c59950f8755c65cafa5349bcb3a0 100644 (file)
 /* Compat macro for intel_decode.c */
 #define IS_IRONLAKE(devid)     IS_GEN5(devid)
 
-#define IS_GEN6(devid)         (devid == PCI_CHIP_SANDYBRIDGE_GT1 || \
-                                devid == PCI_CHIP_SANDYBRIDGE_GT2 || \
-                                devid == PCI_CHIP_SANDYBRIDGE_GT2_PLUS || \
-                                devid == PCI_CHIP_SANDYBRIDGE_M_GT1 || \
-                                devid == PCI_CHIP_SANDYBRIDGE_M_GT2 || \
-                                devid == PCI_CHIP_SANDYBRIDGE_M_GT2_PLUS || \
-                                devid == PCI_CHIP_SANDYBRIDGE_S)
-
 #define IS_GT1(devid)          (devid == PCI_CHIP_SANDYBRIDGE_GT1 || \
                                 devid == PCI_CHIP_SANDYBRIDGE_M_GT1 || \
                                 devid == PCI_CHIP_SANDYBRIDGE_S)
 
+#define IS_GT2(devid)          (devid == PCI_CHIP_SANDYBRIDGE_GT2 || \
+                                devid == PCI_CHIP_SANDYBRIDGE_GT2_PLUS || \
+                                devid == PCI_CHIP_SANDYBRIDGE_M_GT2 || \
+                                devid == PCI_CHIP_SANDYBRIDGE_M_GT2_PLUS)
+
+#define IS_GEN6(devid)         (IS_GT1(devid) || IS_GT2(devid))
+
 #define IS_965(devid)          (IS_GEN4(devid) || \
                                 IS_G4X(devid) || \
                                 IS_GEN5(devid) || \
index c2e2a98af5e26db8e6b7df4bf06725271293f706..02e7f7717fcae359a311691ffc588dc650ea4bef 100644 (file)
@@ -62,10 +62,6 @@ int INTEL_DEBUG = (0);
 #endif
 
 
-#define DRIVER_DATE                     "20100330 DEVELOPMENT"
-#define DRIVER_DATE_GEM                 "GEM " DRIVER_DATE
-
-
 static const GLubyte *
 intelGetString(struct gl_context * ctx, GLenum name)
 {
@@ -182,7 +178,7 @@ intelGetString(struct gl_context * ctx, GLenum name)
          break;
       }
 
-      (void) driGetRendererString(buffer, chipset, DRIVER_DATE_GEM, 0);
+      (void) driGetRendererString(buffer, chipset, 0);
       return (GLubyte *) buffer;
 
    default:
@@ -728,8 +724,13 @@ intelInitContext(struct intel_context *intel,
    ctx->TextureFormatSupported[MESA_FORMAT_RG88] = GL_TRUE;
    ctx->TextureFormatSupported[MESA_FORMAT_RG1616] = GL_TRUE;
 
+   /* GL_MESA_texture_signed_rgba / GL_EXT_texture_snorm */
    ctx->TextureFormatSupported[MESA_FORMAT_DUDV8] = GL_TRUE;
    ctx->TextureFormatSupported[MESA_FORMAT_SIGNED_RGBA8888_REV] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_SIGNED_R8] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_SIGNED_RG88_REV] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_SIGNED_R16] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_SIGNED_GR1616] = GL_TRUE;
 
    /* GL_EXT_texture_sRGB */
    ctx->TextureFormatSupported[MESA_FORMAT_SARGB8] = GL_TRUE;
@@ -742,8 +743,19 @@ intelInitContext(struct intel_context *intel,
       ctx->TextureFormatSupported[MESA_FORMAT_SL8] = GL_TRUE;
       ctx->TextureFormatSupported[MESA_FORMAT_SLA8] = GL_TRUE;
    }
+
+#ifdef TEXTURE_FLOAT_ENABLED
+   ctx->TextureFormatSupported[MESA_FORMAT_RGBA_FLOAT32] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_RG_FLOAT32] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_R_FLOAT32] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_INTENSITY_FLOAT32] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_LUMINANCE_FLOAT32] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_ALPHA_FLOAT32] = GL_TRUE;
+   ctx->TextureFormatSupported[MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32] = GL_TRUE;
 #endif
 
+#endif /* !I915 */
+
    driParseConfigFiles(&intel->optionCache, &intelScreen->optionCache,
                        sPriv->myNum, (intel->gen >= 4) ? "i965" : "i915");
    if (intel->gen < 4)
index 772b2fba5a83512fd1448411ea40dd93320bdc34..c59119373dad80edd705ba7928d787c581fbfa95 100644 (file)
@@ -295,9 +295,33 @@ extern char *__progname;
 #define SUBPIXEL_Y 0.125
 
 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
-#define ALIGN(value, alignment)  ((value + alignment - 1) & ~(alignment - 1))
-#define ROUND_DOWN_TO(value, alignment) (ALIGN(value - alignment - 1, \
-                                              alignment))
+
+/**
+ * Align a value up to an alignment value
+ *
+ * If \c value is not already aligned to the requested alignment value, it
+ * will be rounded up.
+ *
+ * \param value  Value to be rounded
+ * \param alignment  Alignment value to be used.  This must be a power of two.
+ *
+ * \sa ROUND_DOWN_TO()
+ */
+#define ALIGN(value, alignment)  (((value) + alignment - 1) & ~(alignment - 1))
+
+/**
+ * Align a value down to an alignment value
+ *
+ * If \c value is not already aligned to the requested alignment value, it
+ * will be rounded down.
+ *
+ * \param value  Value to be rounded
+ * \param alignment  Alignment value to be used.  This must be a power of two.
+ *
+ * \sa ALIGN()
+ */
+#define ROUND_DOWN_TO(value, alignment) ((value) & ~(alignment - 1))
+
 #define IS_POWER_OF_TWO(val) (((val) & (val - 1)) == 0)
 
 static INLINE uint32_t
index febc1d4f859d8112256f42ae562c8e9aa755244f..e107534a4dae3b7eb54bd838e0fa4685e66afd39 100644 (file)
@@ -160,6 +160,7 @@ static const struct dri_extension i915_extensions[] = {
 
 /** i965-only extensions */
 static const struct dri_extension brw_extensions[] = {
+   { "GL_ARB_color_buffer_float",         NULL },
    { "GL_ARB_depth_clamp",                NULL },
    { "GL_ARB_depth_texture",              NULL },
    { "GL_ARB_fragment_coord_conventions", NULL },
@@ -171,6 +172,9 @@ static const struct dri_extension brw_extensions[] = {
    { "GL_ARB_point_sprite",              NULL },
    { "GL_ARB_seamless_cube_map",          NULL },
    { "GL_ARB_shadow",                     NULL },
+#ifdef TEXTURE_FLOAT_ENABLED
+   { "GL_ARB_texture_float",              NULL },
+#endif
    { "GL_MESA_texture_signed_rgba",       NULL },
    { "GL_ARB_texture_non_power_of_two",   NULL },
    { "GL_ARB_texture_rg",                 NULL },
index 8b57eb19f562fb9b11837cfb2519b091fc127d32..ad2468a3237e048eeb8f369dca2dbb809c6e1d41 100644 (file)
@@ -385,7 +385,7 @@ intel_update_wrapper(struct gl_context *ctx, struct intel_renderbuffer *irb,
    irb->Base.Format = texImage->TexFormat;
    irb->Base.DataType = intel_mesa_format_to_rb_datatype(texImage->TexFormat);
    irb->Base.InternalFormat = texImage->InternalFormat;
-   irb->Base._BaseFormat = _mesa_base_fbo_format(ctx, irb->Base.InternalFormat);
+   irb->Base._BaseFormat = _mesa_base_tex_format(ctx, irb->Base.InternalFormat);
    irb->Base.Width = texImage->Width;
    irb->Base.Height = texImage->Height;
 
index 1f41518535c05f787acde9d55c067ebbf21129d2..16bce20317e05457d001cb23a9958b6b519bfe43 100644 (file)
@@ -30,6 +30,7 @@
 #include "main/macros.h"
 #include "main/mtypes.h"
 #include "main/colormac.h"
+#include "main/renderbuffer.h"
 
 #include "intel_buffers.h"
 #include "intel_fbo.h"
@@ -114,57 +115,6 @@ intel_set_span_functions(struct intel_context *intel,
 #define TAG2(x,y) intel_##x##y##_A8
 #include "spantmp2.h"
 
-#define SPANTMP_MESA_FMT MESA_FORMAT_R8
-#define TAG(x) intel_##x##_R8
-#define TAG2(x,y) intel_##x##y##_R8
-#include "spantmp2.h"
-
-#define SPANTMP_MESA_FMT MESA_FORMAT_RG88
-#define TAG(x) intel_##x##_RG88
-#define TAG2(x,y) intel_##x##y##_RG88
-#include "spantmp2.h"
-
-#define SPANTMP_MESA_FMT MESA_FORMAT_R16
-#define TAG(x) intel_##x##_R16
-#define TAG2(x,y) intel_##x##y##_R16
-#include "spantmp2.h"
-
-#define SPANTMP_MESA_FMT MESA_FORMAT_RG1616
-#define TAG(x) intel_##x##_RG1616
-#define TAG2(x,y) intel_##x##y##_RG1616
-#include "spantmp2.h"
-
-#define LOCAL_DEPTH_VARS                                               \
-   struct intel_renderbuffer *irb = intel_renderbuffer(rb);            \
-   const GLint yScale = rb->Name ? 1 : -1;                             \
-   const GLint yBias = rb->Name ? 0 : rb->Height - 1;                  \
-   int minx = 0, miny = 0;                                             \
-   int maxx = rb->Width;                                               \
-   int maxy = rb->Height;                                              \
-   int pitch = irb->region->pitch * irb->region->cpp;                  \
-   void *buf = irb->region->buffer->virtual;                           \
-   (void)buf; (void)pitch; /* unused for non-gttmap. */                        \
-
-#define LOCAL_STENCIL_VARS LOCAL_DEPTH_VARS
-
-/* z16 depthbuffer functions. */
-#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_s8
-#include "depthtmp.h"
-
 void
 intel_renderbuffer_map(struct intel_context *intel, struct gl_renderbuffer *rb)
 {
@@ -175,6 +125,15 @@ intel_renderbuffer_map(struct intel_context *intel, struct gl_renderbuffer *rb)
 
    drm_intel_gem_bo_map_gtt(irb->region->buffer);
 
+   rb->Data = irb->region->buffer->virtual;
+   rb->RowStride = irb->region->pitch;
+
+   /* Flip orientation if it's the window system buffer */
+   if (!rb->Name) {
+      rb->Data += rb->RowStride * (irb->region->height - 1) * irb->region->cpp;
+      rb->RowStride = -rb->RowStride;
+   }
+
    intel_set_span_functions(intel, rb);
 }
 
@@ -191,6 +150,8 @@ intel_renderbuffer_unmap(struct intel_context *intel,
 
    rb->GetRow = NULL;
    rb->PutRow = NULL;
+   rb->Data = NULL;
+   rb->RowStride = 0;
 }
 
 /**
@@ -371,13 +332,18 @@ static span_init_func intel_span_init_funcs[MESA_FORMAT_COUNT] =
    [MESA_FORMAT_XRGB8888] = intel_InitPointers_xRGB8888,
    [MESA_FORMAT_ARGB8888] = intel_InitPointers_ARGB8888,
    [MESA_FORMAT_SARGB8] = intel_InitPointers_ARGB8888,
-   [MESA_FORMAT_Z16] = intel_InitDepthPointers_z16,
-   [MESA_FORMAT_X8_Z24] = intel_InitDepthPointers_z24_s8,
-   [MESA_FORMAT_S8_Z24] = intel_InitDepthPointers_z24_s8,
-   [MESA_FORMAT_R8] = intel_InitPointers_R8,
-   [MESA_FORMAT_RG88] = intel_InitPointers_RG88,
-   [MESA_FORMAT_R16] = intel_InitPointers_R16,
-   [MESA_FORMAT_RG1616] = intel_InitPointers_RG1616,
+   [MESA_FORMAT_Z16] = _mesa_set_renderbuffer_accessors,
+   [MESA_FORMAT_X8_Z24] = _mesa_set_renderbuffer_accessors,
+   [MESA_FORMAT_S8_Z24] = _mesa_set_renderbuffer_accessors,
+   [MESA_FORMAT_R8] = _mesa_set_renderbuffer_accessors,
+   [MESA_FORMAT_RG88] = _mesa_set_renderbuffer_accessors,
+   [MESA_FORMAT_R16] = _mesa_set_renderbuffer_accessors,
+   [MESA_FORMAT_RG1616] = _mesa_set_renderbuffer_accessors,
+   [MESA_FORMAT_RGBA_FLOAT32] = _mesa_set_renderbuffer_accessors,
+   [MESA_FORMAT_RG_FLOAT32] = _mesa_set_renderbuffer_accessors,
+   [MESA_FORMAT_R_FLOAT32] = _mesa_set_renderbuffer_accessors,
+   [MESA_FORMAT_INTENSITY_FLOAT32] = _mesa_set_renderbuffer_accessors,
+   [MESA_FORMAT_LUMINANCE_FLOAT32] = _mesa_set_renderbuffer_accessors,
 };
 
 bool
index 87745bc66d4b528c2fbaa62daecb4a964f2c7c33..befa615d1e66c2154195e8a725fce37c17956acf 100644 (file)
@@ -16,6 +16,8 @@ intel_mesa_format_to_rb_datatype(gl_format format)
    case MESA_FORMAT_R8:
    case MESA_FORMAT_RG88:
    case MESA_FORMAT_A8:
+   case MESA_FORMAT_I8:
+   case MESA_FORMAT_L8:
    case MESA_FORMAT_AL88:
    case MESA_FORMAT_RGB565:
    case MESA_FORMAT_ARGB1555:
@@ -29,6 +31,15 @@ intel_mesa_format_to_rb_datatype(gl_format format)
       return GL_UNSIGNED_INT;
    case MESA_FORMAT_S8_Z24:
       return GL_UNSIGNED_INT_24_8_EXT;
+   case MESA_FORMAT_RGBA_FLOAT32:
+   case MESA_FORMAT_RG_FLOAT32:
+   case MESA_FORMAT_R_FLOAT32:
+   case MESA_FORMAT_INTENSITY_FLOAT32:
+   case MESA_FORMAT_LUMINANCE_FLOAT32:
+   case MESA_FORMAT_ALPHA_FLOAT32:
+   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32:
+      return GL_FLOAT;
+
    default:
       _mesa_problem(NULL, "unexpected MESA_FORMAT for renderbuffer");
       return GL_UNSIGNED_BYTE;
index 906f8a62710b5bf28e34a33039e1cd3c2109854f..775fd1008f95d5956aa903f3cd0efb034670d3c9 100644 (file)
@@ -112,8 +112,8 @@ intel_miptree_create_for_teximage(struct intel_context *intel,
        * resizable buffers, or require that buffers implement lazy
        * pagetable arrangements.
        */
-      if ((intelObj->base.MinFilter == GL_NEAREST ||
-          intelObj->base.MinFilter == GL_LINEAR) &&
+      if ((intelObj->base.Sampler.MinFilter == GL_NEAREST ||
+          intelObj->base.Sampler.MinFilter == GL_LINEAR) &&
          intelImage->level == firstLevel &&
          (intel->gen < 4 || firstLevel == 0)) {
         lastLevel = firstLevel;
@@ -370,8 +370,10 @@ intelTexImage(struct gl_context * ctx,
        * whole object since our level didn't fit what was there
        * before, and any lower levels would fit into our miptree.
        */
-      if (intelImage->mt)
+      if (intelImage->mt) {
+        intel_miptree_release(intel, &intelObj->mt);
         intel_miptree_reference(&intelObj->mt, intelImage->mt);
+      }
    }
 
    /* PBO fastpaths:
index d0f8294113a278c2f028f88031a2ad32639ca20e..8b43c406cf98e2e066856e9541668b522586cf32 100644 (file)
@@ -90,10 +90,17 @@ intelTexSubimage(struct gl_context * ctx,
          intel->gen < 6 && target == GL_TEXTURE_2D &&
          drm_intel_bo_busy(dst_bo))
       {
-        dstRowStride = width * intelImage->mt->cpp;
-         temp_bo = drm_intel_bo_alloc(intel->bufmgr, "subimage blit bo",
-                                      dstRowStride * height, 0);
-         if (!temp_bo)
+        unsigned long pitch;
+        uint32_t tiling_mode = I915_TILING_NONE;
+
+        temp_bo = drm_intel_bo_alloc_tiled(intel->bufmgr,
+                                           "subimage blit bo",
+                                           width, height,
+                                           intelImage->mt->cpp,
+                                           &tiling_mode,
+                                           &pitch,
+                                           0);
+         if (temp_bo == NULL)
             return;
 
         if (drm_intel_gem_bo_map_gtt(temp_bo)) {
@@ -103,6 +110,7 @@ intelTexSubimage(struct gl_context * ctx,
 
         texImage->Data = temp_bo->virtual;
         texImage->ImageOffsets[0] = 0;
+        dstRowStride = pitch;
 
         intel_miptree_get_image_offset(intelImage->mt, level,
                                        intelImage->face, 0,
index a11b07ed09d71111fc5e04ab3dfbabec683cd865..5e705c936198dd3d95ad43662747ea966b08c7df 100644 (file)
@@ -18,7 +18,7 @@ intel_update_max_level(struct intel_context *intel,
 {
    struct gl_texture_object *tObj = &intelObj->base;
 
-   if (tObj->MinFilter == GL_NEAREST || tObj->MinFilter == GL_LINEAR) {
+   if (tObj->Sampler.MinFilter == GL_NEAREST || tObj->Sampler.MinFilter == GL_LINEAR) {
       intelObj->_MaxLevel = tObj->BaseLevel;
    } else {
       intelObj->_MaxLevel = tObj->_MaxLevel;
index 9cb2c107597218c1c765de842a8839192312459e..2b557a702022cf779808d681b7ea5ac4d73dc301 100644 (file)
@@ -37,8 +37,6 @@
 
 #include "utils.h"
 
-#define DRIVER_DATE    "20051019"
-
 /* Return the current color buffer size.
  */
 static void mach64DDGetBufferSize( struct gl_framebuffer *buffer,
@@ -70,8 +68,7 @@ static const GLubyte *mach64DDGetString( struct gl_context *ctx, GLenum name )
 
    case GL_RENDERER:
  
-      offset = driGetRendererString( buffer, card_name, DRIVER_DATE,
-                                    agp_mode );
+      offset = driGetRendererString( buffer, card_name, agp_mode );
       return (GLubyte *)buffer;
 
    default:
index 68d273a3e7556c825bdcda15bbea3ad6f64763f0..8e10b314b647fd775d2a04d4cfee3af67525e558 100644 (file)
@@ -123,9 +123,9 @@ mach64AllocTexObj( struct gl_texture_object *texObj )
 
    make_empty_list( (driTextureObject *) t );
 
-   mach64SetTexWrap( t, texObj->WrapS, texObj->WrapT );
-   mach64SetTexFilter( t, texObj->MinFilter, texObj->MagFilter );
-   mach64SetTexBorderColor( t, texObj->BorderColor.f );
+   mach64SetTexWrap( t, texObj->Sampler.WrapS, texObj->Sampler.WrapT );
+   mach64SetTexFilter( t, texObj->Sampler.MinFilter, texObj->Sampler.MagFilter );
+   mach64SetTexBorderColor( t, texObj->Sampler.BorderColor.f );
 
    return t;
 }
@@ -454,18 +454,18 @@ static void mach64DDTexParameter( struct gl_context *ctx, GLenum target,
    case GL_TEXTURE_MIN_FILTER:
    case GL_TEXTURE_MAG_FILTER:
       if ( t->base.bound ) FLUSH_BATCH( mmesa );
-      mach64SetTexFilter( t, tObj->MinFilter, tObj->MagFilter );
+      mach64SetTexFilter( t, tObj->Sampler.MinFilter, tObj->Sampler.MagFilter );
       break;
 
    case GL_TEXTURE_WRAP_S:
    case GL_TEXTURE_WRAP_T:
       if ( t->base.bound ) FLUSH_BATCH( mmesa );
-      mach64SetTexWrap( t, tObj->WrapS, tObj->WrapT );
+      mach64SetTexWrap( t, tObj->Sampler.WrapS, tObj->Sampler.WrapT );
       break;
 
    case GL_TEXTURE_BORDER_COLOR:
       if ( t->base.bound ) FLUSH_BATCH( mmesa );
-      mach64SetTexBorderColor( t, tObj->BorderColor.f );
+      mach64SetTexBorderColor( t, tObj->Sampler.BorderColor.f );
       break;
 
    case GL_TEXTURE_BASE_LEVEL:
index 1b39813e37965b0fb72e27191a31e65c420429e3..2e3e9f2c43ccf7c712c71fd3377efa10eb261da8 100644 (file)
@@ -35,9 +35,6 @@
 #include "mga_xmesa.h"
 #include "utils.h"
 
-#define DRIVER_DATE    "20071017"
-
-
 /***************************************
  * Mesa's Driver Functions
  ***************************************/
@@ -57,7 +54,6 @@ static const GLubyte *mgaGetString( struct gl_context *ctx, GLenum name )
       offset = driGetRendererString( buffer, 
                                     MGA_IS_G400(mmesa) ? "G400" :
                                     MGA_IS_G200(mmesa) ? "G200" : "MGA",
-                                    DRIVER_DATE,
                                     mmesa->mgaScreen->agpMode );
 
       return (GLubyte *)buffer;
index 11ab9b6117d3b40fb4e549e2f57ff91310d93293..ebbfec3655632902ef5b3ef2a3a0ce080957b0df 100644 (file)
@@ -327,9 +327,9 @@ mgaAllocTexObj( struct gl_texture_object *tObj )
 
       make_empty_list( & t->base );
 
-      mgaSetTexWrapping( t, tObj->WrapS, tObj->WrapT );
-      mgaSetTexFilter( t, tObj->MinFilter, tObj->MagFilter );
-      mgaSetTexBorderColor( t, tObj->BorderColor.f );
+      mgaSetTexWrapping( t, tObj->Sampler.WrapS, tObj->Sampler.WrapT );
+      mgaSetTexFilter( t, tObj->Sampler.MinFilter, tObj->Sampler.MagFilter );
+      mgaSetTexBorderColor( t, tObj->Sampler.BorderColor.f );
    }
 
    return( t );
@@ -447,18 +447,18 @@ mgaTexParameter( struct gl_context *ctx, GLenum target,
       /* FALLTHROUGH */
    case GL_TEXTURE_MAG_FILTER:
       FLUSH_BATCH(mmesa);
-      mgaSetTexFilter( t, tObj->MinFilter, tObj->MagFilter );
+      mgaSetTexFilter( t, tObj->Sampler.MinFilter, tObj->Sampler.MagFilter );
       break;
 
    case GL_TEXTURE_WRAP_S:
    case GL_TEXTURE_WRAP_T:
       FLUSH_BATCH(mmesa);
-      mgaSetTexWrapping(t,tObj->WrapS,tObj->WrapT);
+      mgaSetTexWrapping(t,tObj->Sampler.WrapS,tObj->Sampler.WrapT);
       break;
 
    case GL_TEXTURE_BORDER_COLOR:
       FLUSH_BATCH(mmesa);
-      mgaSetTexBorderColor(t, tObj->BorderColor.f);
+      mgaSetTexBorderColor(t, tObj->Sampler.BorderColor.f);
       break;
 
    case GL_TEXTURE_BASE_LEVEL:
index 45630be7f6eb80db6b3d904c2dfcd89f0013fa8b..8b6aa820434ec29e6191441b9ae99a9e4f1906eb 100644 (file)
@@ -45,7 +45,7 @@ nouveau_get_string(struct gl_context *ctx, GLenum name)
 
                case GL_RENDERER:
                        sprintf(hardware_name, "nv%02X", context_chipset(ctx));
-                       driGetRendererString(buffer, hardware_name, DRIVER_DATE, 0);
+                       driGetRendererString(buffer, hardware_name, 0);
 
                        return (GLubyte *)buffer;
                default:
index 158aec820aa6d4f260483823779c41b7920848c1..0018eec021f72a907dba4f6dd330c69fe2f84f2b 100644 (file)
@@ -48,7 +48,6 @@
 #include "nouveau_surface.h"
 #include "nv04_pushbuf.h"
 
-#define DRIVER_DATE    "20091015"
 #define DRIVER_AUTHOR  "Nouveau"
 
 struct nouveau_driver {
index 1a1e10e0b3a428464038597008c300cba603d6c1..36e68c991812635d6a02ba162d78bcec27c8cc5b 100644 (file)
@@ -270,8 +270,8 @@ 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)
+       if (t->Sampler.MinFilter == GL_NEAREST ||
+           t->Sampler.MinFilter == GL_LINEAR || !base)
                return t->BaseLevel;
        else
                return MIN2(t->BaseLevel + base->MaxLog2, t->MaxLevel);
index 5ed8b147559bb9974774362cb90fa16f87e28857..648d6b18cf5b4e260a4b2eb59130469993b9e53e 100644 (file)
@@ -80,26 +80,26 @@ nv04_emit_tex_obj(struct gl_context *ctx, int emit)
 
                s = &to_nouveau_texture(t)->surfaces[t->BaseLevel];
 
-               if (t->MinFilter != GL_NEAREST &&
-                   t->MinFilter != GL_LINEAR) {
-                       lod_max = CLAMP(MIN2(t->MaxLod, t->_MaxLambda),
+               if (t->Sampler.MinFilter != GL_NEAREST &&
+                   t->Sampler.MinFilter != GL_LINEAR) {
+                       lod_max = CLAMP(MIN2(t->Sampler.MaxLod, t->_MaxLambda),
                                        0, 15) + 1;
 
                        lod_bias = CLAMP(ctx->Texture.Unit[i].LodBias +
-                                        t->LodBias, -16, 15) * 8;
+                                        t->Sampler.LodBias, -16, 15) * 8;
                }
 
-               format |= nvgl_wrap_mode(t->WrapT) << 28 |
-                       nvgl_wrap_mode(t->WrapS) << 24 |
+               format |= nvgl_wrap_mode(t->Sampler.WrapT) << 28 |
+                       nvgl_wrap_mode(t->Sampler.WrapS) << 24 |
                        ti->HeightLog2 << 20 |
                        ti->WidthLog2 << 16 |
                        lod_max << 12 |
                        get_tex_format(ti);
 
-               filter |= log2i(t->MaxAnisotropy) << 31 |
-                       nvgl_filter_mode(t->MagFilter) << 28 |
-                       log2i(t->MaxAnisotropy) << 27 |
-                       nvgl_filter_mode(t->MinFilter) << 24 |
+               filter |= log2i(t->Sampler.MaxAnisotropy) << 31 |
+                       nvgl_filter_mode(t->Sampler.MagFilter) << 28 |
+                       log2i(t->Sampler.MaxAnisotropy) << 27 |
+                       nvgl_filter_mode(t->Sampler.MinFilter) << 24 |
                        (lod_bias & 0xff) << 16;
 
        } else {
index fda67b15073c5e90c8395eda2b498574ed29c321..620a686aea0a7b76e9b9e021c9d90479c1c64e2b 100644 (file)
@@ -173,17 +173,17 @@ nv10_emit_tex_obj(struct gl_context *ctx, int emit)
                return;
 
        /* Recompute the texturing registers. */
-       tx_format = nvgl_wrap_mode(t->WrapT) << 28
-               | nvgl_wrap_mode(t->WrapS) << 24
+       tx_format = nvgl_wrap_mode(t->Sampler.WrapT) << 28
+               | nvgl_wrap_mode(t->Sampler.WrapS) << 24
                | ti->HeightLog2 << 20
                | ti->WidthLog2 << 16
                | 5 << 4 | 1 << 12;
 
-       tx_filter = nvgl_filter_mode(t->MagFilter) << 28
-               | nvgl_filter_mode(t->MinFilter) << 24;
+       tx_filter = nvgl_filter_mode(t->Sampler.MagFilter) << 28
+               | nvgl_filter_mode(t->Sampler.MinFilter) << 24;
 
        tx_enable = NV10_3D_TEX_ENABLE_ENABLE
-               | log2i(t->MaxAnisotropy) << 4;
+               | log2i(t->Sampler.MaxAnisotropy) << 4;
 
        if (t->Target == GL_TEXTURE_RECTANGLE) {
                BEGIN_RING(chan, celsius, NV10_3D_TEX_NPOT_PITCH(i), 1);
@@ -196,11 +196,11 @@ nv10_emit_tex_obj(struct gl_context *ctx, int emit)
                tx_format |= get_tex_format_pot(ti);
        }
 
-       if (t->MinFilter != GL_NEAREST &&
-           t->MinFilter != GL_LINEAR) {
-               int lod_min = t->MinLod;
-               int lod_max = MIN2(t->MaxLod, t->_MaxLambda);
-               int lod_bias = t->LodBias
+       if (t->Sampler.MinFilter != GL_NEAREST &&
+           t->Sampler.MinFilter != GL_LINEAR) {
+               int lod_min = t->Sampler.MinLod;
+               int lod_max = MIN2(t->Sampler.MaxLod, t->_MaxLambda);
+               int lod_bias = t->Sampler.LodBias
                        + ctx->Texture.Unit[i].LodBias;
 
                lod_max = CLAMP(lod_max, 0, 15);
index c362aca0fdb5b8936aa936086dd21809fef03246..eab74aed5c23d3d58282f5a80ffdb221b2e18bd3 100644 (file)
@@ -186,16 +186,16 @@ nv20_emit_tex_obj(struct gl_context *ctx, int emit)
                | NV20_3D_TEX_FORMAT_NO_BORDER
                | 1 << 16;
 
-       tx_wrap = nvgl_wrap_mode(t->WrapR) << 16
-               | nvgl_wrap_mode(t->WrapT) << 8
-               | nvgl_wrap_mode(t->WrapS) << 0;
+       tx_wrap = nvgl_wrap_mode(t->Sampler.WrapR) << 16
+               | nvgl_wrap_mode(t->Sampler.WrapT) << 8
+               | nvgl_wrap_mode(t->Sampler.WrapS) << 0;
 
-       tx_filter = nvgl_filter_mode(t->MagFilter) << 24
-               | nvgl_filter_mode(t->MinFilter) << 16
+       tx_filter = nvgl_filter_mode(t->Sampler.MagFilter) << 24
+               | nvgl_filter_mode(t->Sampler.MinFilter) << 16
                | 2 << 12;
 
        tx_enable = NV20_3D_TEX_ENABLE_ENABLE
-               | log2i(t->MaxAnisotropy) << 4;
+               | log2i(t->Sampler.MaxAnisotropy) << 4;
 
        if (t->Target == GL_TEXTURE_RECTANGLE) {
                BEGIN_RING(chan, kelvin, NV20_3D_TEX_NPOT_PITCH(i), 1);
@@ -208,11 +208,11 @@ nv20_emit_tex_obj(struct gl_context *ctx, int emit)
                tx_format |= get_tex_format_pot(ti);
        }
 
-       if (t->MinFilter != GL_NEAREST &&
-           t->MinFilter != GL_LINEAR) {
-               int lod_min = t->MinLod;
-               int lod_max = MIN2(t->MaxLod, t->_MaxLambda);
-               int lod_bias = t->LodBias
+       if (t->Sampler.MinFilter != GL_NEAREST &&
+           t->Sampler.MinFilter != GL_LINEAR) {
+               int lod_min = t->Sampler.MinLod;
+               int lod_max = MIN2(t->Sampler.MaxLod, t->_MaxLambda);
+               int lod_bias = t->Sampler.LodBias
                        + ctx->Texture.Unit[i].LodBias;
 
                lod_max = CLAMP(lod_max, 0, 15);
index 0b7005eba69f4ed651436967f88999132d5ff3f3..cfe2387948d618fc77e274512beab04a832a1541 100644 (file)
@@ -40,9 +40,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "utils.h"
 
-#define DRIVER_DATE    "20051027"
-
-
 /* Return the width and height of the current color buffer.
  */
 static void r128GetBufferSize( struct gl_framebuffer *buffer,
@@ -82,8 +79,7 @@ static const GLubyte *r128GetString( struct gl_context *ctx, GLenum name )
         card_name = "Rage 128 Mobility";
       }
 
-      offset = driGetRendererString( buffer, card_name, DRIVER_DATE,
-                                    agp_mode );
+      offset = driGetRendererString( buffer, card_name, agp_mode );
 
       return (GLubyte *)buffer;
 
index 307de56ee13d3f7d55907cd0de672dc7bc509447..04bdbe612e528597581de09a3e104967d32b21bf 100644 (file)
@@ -135,7 +135,7 @@ do {                                                                        \
    r128WriteDepthSpanLocked( rmesa, n,                                 \
                             x + dPriv->x,                              \
                             y + dPriv->y,                              \
-                            depth, mask );                             \
+                            (const GLuint *) depth, mask );            \
 } while (0)
 
 #define WRITE_DEPTH_PIXELS()                                           \
@@ -146,7 +146,7 @@ do {                                                                        \
       ox[i] = x[i] + dPriv->x;                                         \
       oy[i] = Y_FLIP( y[i] ) + dPriv->y;                               \
    }                                                                   \
-   r128WriteDepthPixelsLocked( rmesa, n, ox, oy, depth, mask );                \
+   r128WriteDepthPixelsLocked( rmesa, n, ox, oy, (const GLuint *) depth, mask ); \
 } while (0)
 
 #define READ_DEPTH_SPAN()                                              \
index ba3305e076e4db4c95f1f38ce8ac0d80406b32e8..a3f6ce8edeb0f0fa3c1c276d2e2feb642e60bd8a 100644 (file)
@@ -162,9 +162,9 @@ static r128TexObjPtr r128AllocTexObj( struct gl_texture_object *texObj )
   
       make_empty_list( (driTextureObject *) t );
 
-      r128SetTexWrap( t, texObj->WrapS, texObj->WrapT );
-      r128SetTexFilter( t, texObj->MinFilter, texObj->MagFilter );
-      r128SetTexBorderColor( t, texObj->BorderColor.f );
+      r128SetTexWrap( t, texObj->Sampler.WrapS, texObj->Sampler.WrapT );
+      r128SetTexFilter( t, texObj->Sampler.MinFilter, texObj->Sampler.MagFilter );
+      r128SetTexBorderColor( t, texObj->Sampler.BorderColor.f );
    }
 
    return t;
@@ -519,18 +519,18 @@ static void r128TexParameter( struct gl_context *ctx, GLenum target,
    case GL_TEXTURE_MIN_FILTER:
    case GL_TEXTURE_MAG_FILTER:
       if ( t->base.bound ) FLUSH_BATCH( rmesa );
-      r128SetTexFilter( t, tObj->MinFilter, tObj->MagFilter );
+      r128SetTexFilter( t, tObj->Sampler.MinFilter, tObj->Sampler.MagFilter );
       break;
 
    case GL_TEXTURE_WRAP_S:
    case GL_TEXTURE_WRAP_T:
       if ( t->base.bound ) FLUSH_BATCH( rmesa );
-      r128SetTexWrap( t, tObj->WrapS, tObj->WrapT );
+      r128SetTexWrap( t, tObj->Sampler.WrapS, tObj->Sampler.WrapT );
       break;
 
    case GL_TEXTURE_BORDER_COLOR:
       if ( t->base.bound ) FLUSH_BATCH( rmesa );
-      r128SetTexBorderColor( t, tObj->BorderColor.f );
+      r128SetTexBorderColor( t, tObj->Sampler.BorderColor.f );
       break;
 
    case GL_TEXTURE_BASE_LEVEL:
index 9c045b73accd2404739c1b6575be0d3b93aad474..4e08d3431bf3b4da5f53a7676e123034cc3caa29 100644 (file)
@@ -62,13 +62,16 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "radeon_span.h"
 
 #define need_GL_ARB_occlusion_query
+#define need_GL_ARB_vertex_array_object
 #define need_GL_ARB_vertex_program
+#define need_GL_APPLE_vertex_array_object
 #define need_GL_ATI_fragment_shader
 #define need_GL_EXT_blend_minmax
 #define need_GL_EXT_fog_coord
 #define need_GL_EXT_secondary_color
 #define need_GL_EXT_blend_equation_separate
 #define need_GL_EXT_blend_func_separate
+#define need_GL_EXT_gpu_program_parameters
 #define need_GL_NV_vertex_program
 #define need_GL_ARB_point_parameters
 #define need_GL_EXT_framebuffer_object
@@ -76,8 +79,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "main/remap_helper.h"
 
-#define DRIVER_DATE    "20060602"
-
 #include "utils.h"
 #include "xmlpool.h" /* for symbolic values of enum-type options */
 
@@ -96,8 +97,7 @@ static const GLubyte *r200GetString( struct gl_context *ctx, GLenum name )
       return (GLubyte *)"Tungsten Graphics, Inc.";
 
    case GL_RENDERER:
-      offset = driGetRendererString( buffer, "R200", DRIVER_DATE,
-                                    agp_mode );
+      offset = driGetRendererString( buffer, "R200", agp_mode );
 
       sprintf( & buffer[ offset ], " %sTCL",
               !(rmesa->radeon.TclFallback & R200_TCL_FALLBACK_TCL_DISABLE)
@@ -115,6 +115,7 @@ static const GLubyte *r200GetString( struct gl_context *ctx, GLenum name )
  */
 static const struct dri_extension card_extensions[] =
 {
+    { "GL_ARB_half_float_pixel",           NULL },
     { "GL_ARB_multitexture",               NULL },
     { "GL_ARB_occlusion_query",                   GL_ARB_occlusion_query_functions},
     { "GL_ARB_texture_border_clamp",       NULL },
@@ -123,6 +124,7 @@ static const struct dri_extension card_extensions[] =
     { "GL_ARB_texture_env_dot3",           NULL },
     { "GL_ARB_texture_env_crossbar",       NULL },
     { "GL_ARB_texture_mirrored_repeat",    NULL },
+    { "GL_ARB_vertex_array_object",        GL_ARB_vertex_array_object_functions},
     { "GL_EXT_blend_minmax",               GL_EXT_blend_minmax_functions },
     { "GL_EXT_blend_subtract",             NULL },
     { "GL_EXT_fog_coord",                  GL_EXT_fog_coord_functions },
@@ -136,6 +138,7 @@ static const struct dri_extension card_extensions[] =
     { "GL_EXT_texture_lod_bias",           NULL },
     { "GL_EXT_texture_mirror_clamp",       NULL },
     { "GL_EXT_texture_rectangle",          NULL },
+    { "GL_APPLE_vertex_array_object",      GL_APPLE_vertex_array_object_functions },
     { "GL_ATI_texture_env_combine3",       NULL },
     { "GL_ATI_texture_mirror_once",        NULL },
     { "GL_MESA_pack_invert",               NULL },
@@ -153,7 +156,9 @@ static const struct dri_extension blend_extensions[] = {
 };
 
 static const struct dri_extension ARB_vp_extension[] = {
-    { "GL_ARB_vertex_program",             GL_ARB_vertex_program_functions }
+    { "GL_ARB_vertex_program",             GL_ARB_vertex_program_functions },
+    { "GL_EXT_gpu_program_parameters",     GL_EXT_gpu_program_parameters_functions},
+    { NULL,                                NULL }
 };
 
 static const struct dri_extension NV_vp_extension[] = {
@@ -458,7 +463,7 @@ GLboolean r200CreateContext( gl_api api,
        driInitExtensions( ctx, blend_extensions, GL_FALSE );
    }
    if(rmesa->radeon.radeonScreen->drmSupportsVertexProgram)
-      driInitSingleExtension( ctx, ARB_vp_extension );
+      driInitExtensions( ctx, ARB_vp_extension, GL_FALSE );
    if(driQueryOptionb(&rmesa->radeon.optionCache, "nv_vertex_program"))
       driInitSingleExtension( ctx, NV_vp_extension );
 
index 092b7575831fc4cf0c89162871613d5b0de4c223..d42e8f1204188ddc65473e223ea4b45bdb358c65 100644 (file)
@@ -383,18 +383,18 @@ static void r200TexParameter( struct gl_context *ctx, GLenum target,
    case GL_TEXTURE_MIN_FILTER:
    case GL_TEXTURE_MAG_FILTER:
    case GL_TEXTURE_MAX_ANISOTROPY_EXT:
-      r200SetTexMaxAnisotropy( t, texObj->MaxAnisotropy );
-      r200SetTexFilter( t, texObj->MinFilter, texObj->MagFilter );
+      r200SetTexMaxAnisotropy( t, texObj->Sampler.MaxAnisotropy );
+      r200SetTexFilter( t, texObj->Sampler.MinFilter, texObj->Sampler.MagFilter );
       break;
 
    case GL_TEXTURE_WRAP_S:
    case GL_TEXTURE_WRAP_T:
    case GL_TEXTURE_WRAP_R:
-      r200SetTexWrap( t, texObj->WrapS, texObj->WrapT, texObj->WrapR );
+      r200SetTexWrap( t, texObj->Sampler.WrapS, texObj->Sampler.WrapT, texObj->Sampler.WrapR );
       break;
 
    case GL_TEXTURE_BORDER_COLOR:
-      r200SetTexBorderColor( t, texObj->BorderColor.f );
+      r200SetTexBorderColor( t, texObj->Sampler.BorderColor.f );
       break;
 
    case GL_TEXTURE_BASE_LEVEL:
@@ -479,13 +479,13 @@ static struct gl_texture_object *r200NewTextureObject(struct gl_context * ctx,
           _mesa_lookup_enum_by_nr(target), t);
 
    _mesa_initialize_texture_object(&t->base, name, target);
-   t->base.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
+   t->base.Sampler.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
 
    /* Initialize hardware state */
-   r200SetTexWrap( t, t->base.WrapS, t->base.WrapT, t->base.WrapR );
-   r200SetTexMaxAnisotropy( t, t->base.MaxAnisotropy );
-   r200SetTexFilter(t, t->base.MinFilter, t->base.MagFilter);
-   r200SetTexBorderColor(t, t->base.BorderColor.f);
+   r200SetTexWrap( t, t->base.Sampler.WrapS, t->base.Sampler.WrapT, t->base.Sampler.WrapR );
+   r200SetTexMaxAnisotropy( t, t->base.Sampler.MaxAnisotropy );
+   r200SetTexFilter(t, t->base.Sampler.MinFilter, t->base.Sampler.MagFilter);
+   r200SetTexBorderColor(t, t->base.Sampler.BorderColor.f);
 
    return &t->base;
 }
index 28d132a5fe3ec42b1a2e73152d09c7fdd8ee6c3f..8b73409136f401ab552f34948f3c88963e18fa95 100644 (file)
@@ -34,8 +34,6 @@
  * \author Ben Skeggs <darktama@iinet.net.au>
  *
  * \author Jerome Glisse <j.glisse@gmail.com>
- *
- * \todo FogOption
  */
 
 #include "r300_fragprog.h"
@@ -108,6 +106,7 @@ static unsigned int translate_rgb_opcode(struct r300_fragment_program_compiler *
 {
        switch(opcode) {
        case RC_OPCODE_CMP: return R300_ALU_OUTC_CMP;
+       case RC_OPCODE_CND: return R300_ALU_OUTC_CND;
        case RC_OPCODE_DP3: return R300_ALU_OUTC_DP3;
        case RC_OPCODE_DP4: return R300_ALU_OUTC_DP4;
        case RC_OPCODE_FRC: return R300_ALU_OUTC_FRC;
@@ -127,6 +126,7 @@ static unsigned int translate_alpha_opcode(struct r300_fragment_program_compiler
 {
        switch(opcode) {
        case RC_OPCODE_CMP: return R300_ALU_OUTA_CMP;
+       case RC_OPCODE_CND: return R300_ALU_OUTA_CND;
        case RC_OPCODE_DP3: return R300_ALU_OUTA_DP4;
        case RC_OPCODE_DP4: return R300_ALU_OUTA_DP4;
        case RC_OPCODE_EX2: return R300_ALU_OUTA_EX2;
index 8ad2175eadf25615ca5c3fd04d7269b1738367e8..654f9a070d57bc9c9deb306e9dc4ceade71c8e21 100644 (file)
@@ -273,6 +273,7 @@ static void ei_mad(struct r300_vertex_program_code *vp,
                                      struct rc_sub_instruction *vpi,
                                      unsigned int * inst)
 {
+       unsigned int i;
        /* Remarks about hardware limitations of MAD
         * (please preserve this comment, as this information is _NOT_
         * in the documentation provided by AMD).
@@ -318,6 +319,23 @@ static void ei_mad(struct r300_vertex_program_code *vp,
                                t_dst_index(vp, &vpi->DstReg),
                                t_dst_mask(vpi->DstReg.WriteMask),
                                t_dst_class(vpi->DstReg.File));
+
+               /* Arguments with constant swizzles still count as a unique
+                * temporary, so we should make sure these arguments share a
+                * register index with one of the other arguments. */
+               for (i = 0; i < 3; i++) {
+                       unsigned int j;
+                       if (vpi->SrcReg[i].File != RC_FILE_NONE)
+                               continue;
+
+                       for (j = 0; j < 3; j++) {
+                               if (i != j) {
+                                       vpi->SrcReg[i].Index =
+                                               vpi->SrcReg[j].Index;
+                                       break;
+                               }
+                       }
+               }
        }
        inst[1] = t_src(vp, &vpi->SrcReg[0]);
        inst[2] = t_src(vp, &vpi->SrcReg[1]);
index 301b4446693207a6dd2eb20f65817c7987dd7d92..c7f79bc53c7bb56bcac2f96b95582c041f8dd62b 100644 (file)
@@ -93,6 +93,7 @@ static unsigned int translate_rgb_op(struct r300_fragment_program_compiler *c, r
 {
        switch(opcode) {
        case RC_OPCODE_CMP: return R500_ALU_RGBA_OP_CMP;
+       case RC_OPCODE_CND: return R500_ALU_RGBA_OP_CND;
        case RC_OPCODE_DDX: return R500_ALU_RGBA_OP_MDH;
        case RC_OPCODE_DDY: return R500_ALU_RGBA_OP_MDV;
        case RC_OPCODE_DP3: return R500_ALU_RGBA_OP_DP3;
@@ -114,6 +115,7 @@ static unsigned int translate_alpha_op(struct r300_fragment_program_compiler *c,
 {
        switch(opcode) {
        case RC_OPCODE_CMP: return R500_ALPHA_OP_CMP;
+       case RC_OPCODE_CND: return R500_ALPHA_OP_CND;
        case RC_OPCODE_COS: return R500_ALPHA_OP_COS;
        case RC_OPCODE_DDX: return R500_ALPHA_OP_MDH;
        case RC_OPCODE_DDY: return R500_ALPHA_OP_MDV;
@@ -197,11 +199,14 @@ static void use_temporary(struct r500_fragment_program_code* code, unsigned int
 
 static unsigned int use_source(struct r500_fragment_program_code* code, struct rc_pair_instruction_source src)
 {
+       /* From docs:
+        *   Note that inline constants set the MSB of ADDR0 and clear ADDR0_CONST.
+        * MSB = 1 << 7 */
        if (!src.Used)
-               return 0;
+               return 1 << 7;
 
        if (src.File == RC_FILE_CONSTANT) {
-               return src.Index | 0x100;
+               return src.Index | R500_RGB_ADDR0_CONST;
        } else if (src.File == RC_FILE_TEMPORARY) {
                use_temporary(code, src.Index);
                return src.Index;
@@ -259,7 +264,8 @@ static void emit_paired(struct r300_fragment_program_compiler *c, struct rc_pair
        }
        code->inst[ip].inst0 |= R500_INST_TEX_SEM_WAIT;
 
-       code->inst[ip].inst0 |= (inst->RGB.WriteMask << 11) | (inst->Alpha.WriteMask << 14);
+       code->inst[ip].inst0 |= (inst->RGB.WriteMask << 11);
+       code->inst[ip].inst0 |= inst->Alpha.WriteMask ? 1 << 14 : 0;
        code->inst[ip].inst0 |= (inst->RGB.OutputWriteMask << 15) | (inst->Alpha.OutputWriteMask << 18);
        if (inst->Nop) {
                code->inst[ip].inst0 |= R500_INST_NOP;
index 35360aa70f07033368568552bcb4fa0a9be574e2..67e6acf8b108e70b8a1e3dcff46f80d8c882e84e 100644 (file)
@@ -132,10 +132,10 @@ typedef enum {
 struct r300_fragment_program_external_state {
        struct {
                /**
-                * If the sampler is used as a shadow sampler,
-                * this field contains swizzle depending on the depth texture mode.
+                * This field contains swizzle for some lowering passes
+                * (shadow comparison, unorm->snorm conversion)
                 */
-               unsigned depth_texture_swizzle:12;
+               unsigned texture_swizzle:12;
 
                /**
                 * If the sampler is used as a shadow sampler,
@@ -172,6 +172,12 @@ struct r300_fragment_program_external_state {
                 * and right before texture fetch. The scaling factor is given by
                 * RC_STATE_R300_TEXSCALE_FACTOR. */
                unsigned clamp_and_scale_before_fetch : 1;
+
+               /**
+                * Fetch RGTC1_SNORM or LATC1_SNORM as UNORM and convert UNORM -> SNORM
+                * in the shader.
+                */
+               unsigned convert_unorm_to_snorm:1;
        } unit[16];
 
        unsigned frag_clamp:1;
index 79cd7996f78aaa56b64f4b8772460bf0535aae36..b7936725d8514e7c856b5b2e6ee26531666f240c 100644 (file)
@@ -483,7 +483,7 @@ void rc_validate_final_shader(struct radeon_compiler *c, void *user)
 {
        /* Check the number of constants. */
        if (c->Program.Constants.Count > c->max_constants) {
-               rc_error(c, "Too many constants. Max: 256, Got: %i\n",
-                        c->Program.Constants.Count);
+               rc_error(c, "Too many constants. Max: %i, Got: %i\n",
+                        c->max_constants, c->Program.Constants.Count);
        }
 }
index c080d5aecc6eb9c99fad7cd34f8aa6632309d0f0..d1a7eab50f7e58cf86889b0c8d0582acaee416e1 100644 (file)
@@ -704,9 +704,16 @@ static void get_readers_for_single_write(
                                        &d->BranchMasks[branch_depth];
 
                                if (masks->HasElse) {
+                                       /* Abort on read for components that
+                                        * were written in the IF block. */
                                        d->ReaderData->AbortOnRead |=
                                                masks->IfWriteMask
                                                        & ~masks->ElseWriteMask;
+                                       /* Abort on read for components that
+                                        * were written in the ELSE block. */
+                                       d->ReaderData->AbortOnRead |=
+                                               masks->ElseWriteMask
+                                                       & ~d->AliveWriteMask;
                                        d->AliveWriteMask = masks->IfWriteMask
                                                ^ ((masks->IfWriteMask ^
                                                        masks->ElseWriteMask)
index 25afd272beefd397326c360882ddeeb3311a171c..e3e498e8fb4f0ec098fbe64f196d0f0c22984296 100644 (file)
@@ -80,6 +80,13 @@ struct rc_opcode_info rc_opcodes[MAX_RC_OPCODE] = {
                .HasDstReg = 1,
                .IsComponentwise = 1
        },
+       {
+               .Opcode = RC_OPCODE_CND,
+               .Name = "CND",
+               .NumSrcRegs = 3,
+               .HasDstReg = 1,
+               .IsComponentwise = 1
+       },
        {
                .Opcode = RC_OPCODE_COS,
                .Name = "COS",
index 7e666101276a2ed96269e324f91777281bbcf5f9..b58688206116b7785b9aefc581d23fbda8e9ae18 100644 (file)
@@ -56,6 +56,9 @@ typedef enum {
        /** vec4 instruction: dst.c = src0.c < 0.0 ? src1.c : src2.c */
        RC_OPCODE_CMP,
 
+       /** vec4 instruction: dst.c = src2.c > 0.5 ? src0.c : src1.c */
+       RC_OPCODE_CND,
+
        /** scalar instruction: dst = cos(src0.x) */
        RC_OPCODE_COS,
 
index c4e6a5e0a1fc2743b4325b77f2874d7c40eb9dd6..79898e1047eabff254eae71421d27e4ab8692ba2 100644 (file)
@@ -509,10 +509,34 @@ static int is_presub_candidate(
 {
        const struct rc_opcode_info * info = rc_get_opcode_info(inst->U.I.Opcode);
        unsigned int i;
+       unsigned int is_constant[2] = {0, 0};
+
+       assert(inst->U.I.Opcode == RC_OPCODE_ADD);
 
        if (inst->U.I.PreSub.Opcode != RC_PRESUB_NONE || inst->U.I.SaturateMode)
                return 0;
 
+       /* If both sources use a constant swizzle, then we can't convert it to
+        * a presubtract operation.  In fact for the ADD and SUB presubtract
+        * operations neither source can contain a constant swizzle.  This
+        * specific case is checked in peephole_add_presub_add() when
+        * we make sure the swizzles for both sources are equal, so we
+        * don't need to worry about it here. */
+       for (i = 0; i < 2; i++) {
+               int chan;
+               for (chan = 0; chan < 4; chan++) {
+                       rc_swizzle swz =
+                               get_swz(inst->U.I.SrcReg[i].Swizzle, chan);
+                       if (swz == RC_SWIZZLE_ONE
+                                       || swz == RC_SWIZZLE_ZERO
+                                       || swz == RC_SWIZZLE_HALF) {
+                               is_constant[i] = 1;
+                       }
+               }
+       }
+       if (is_constant[0] && is_constant[1])
+               return 0;
+
        for(i = 0; i < info->NumSrcRegs; i++) {
                struct rc_src_register src = inst->U.I.SrcReg[i];
                if (src_reads_dst_mask(src, inst->U.I.DstReg))
index 9e03eb1aca890323b421ec43f57e61a6bfbcf9bf..2dae56a2428dce38624bc0e5994b1ba494dccea8 100644 (file)
@@ -99,6 +99,7 @@ static void classify_instruction(struct rc_sub_instruction * inst,
        switch(inst->Opcode) {
        case RC_OPCODE_ADD:
        case RC_OPCODE_CMP:
+       case RC_OPCODE_CND:
        case RC_OPCODE_DDX:
        case RC_OPCODE_DDY:
        case RC_OPCODE_FRC:
@@ -289,7 +290,7 @@ static void set_pair_instruction(struct r300_fragment_program_compiler *c,
                }
 
                if (needalpha) {
-                       pair->Alpha.WriteMask |= GET_BIT(inst->DstReg.WriteMask, 3);
+                       pair->Alpha.WriteMask |= (GET_BIT(inst->DstReg.WriteMask, 3) << 3);
                        if (pair->Alpha.WriteMask) {
                                pair->Alpha.DestIndex = inst->DstReg.Index;
                        }
index 6708b16d29a560b63577f1c0fe67e2f6672d3d4d..d1a435fc5303b3ed36521c8117b562cd8824464a 100644 (file)
@@ -71,7 +71,7 @@ struct rc_pair_instruction_arg {
 struct rc_pair_sub_instruction {
        unsigned int Opcode:8;
        unsigned int DestIndex:RC_REGISTER_INDEX_BITS;
-       unsigned int WriteMask:3;
+       unsigned int WriteMask:4;
        unsigned int Target:2;
        unsigned int OutputWriteMask:3;
        unsigned int DepthWriteMask:1;
index 1cf77d9cf735241dc8ec9f7b45ad98ed4004a100..cef448ee4e12f1d6c925700ca305dfab5072f06e 100644 (file)
@@ -32,8 +32,8 @@
 
 /* Series of transformations to be done on textures. */
 
-static struct rc_src_register shadow_ambient(struct r300_fragment_program_compiler *compiler,
-                                            int tmu)
+static struct rc_src_register shadow_fail_value(struct r300_fragment_program_compiler *compiler,
+                                               int tmu)
 {
        struct rc_src_register reg = { 0, };
 
@@ -46,6 +46,20 @@ static struct rc_src_register shadow_ambient(struct r300_fragment_program_compil
                reg.File = RC_FILE_NONE;
                reg.Swizzle = RC_SWIZZLE_0000;
        }
+
+       reg.Swizzle = combine_swizzles(reg.Swizzle,
+                               compiler->state.unit[tmu].texture_swizzle);
+       return reg;
+}
+
+static struct rc_src_register shadow_pass_value(struct r300_fragment_program_compiler *compiler,
+                                               int tmu)
+{
+       struct rc_src_register reg = { 0, };
+
+       reg.File = RC_FILE_NONE;
+       reg.Swizzle = combine_swizzles(RC_SWIZZLE_1111,
+                               compiler->state.unit[tmu].texture_swizzle);
        return reg;
 }
 
@@ -141,10 +155,9 @@ int radeonTransformTEX(
                        inst->U.I.Opcode = RC_OPCODE_MOV;
 
                        if (comparefunc == RC_COMPARE_FUNC_ALWAYS) {
-                               inst->U.I.SrcReg[0].File = RC_FILE_NONE;
-                               inst->U.I.SrcReg[0].Swizzle = RC_SWIZZLE_1111;
+                               inst->U.I.SrcReg[0] = shadow_pass_value(compiler, inst->U.I.TexSrcUnit);
                        } else {
-                               inst->U.I.SrcReg[0] = shadow_ambient(compiler, inst->U.I.TexSrcUnit);
+                               inst->U.I.SrcReg[0] = shadow_fail_value(compiler, inst->U.I.TexSrcUnit);
                        }
 
                        return 1;
@@ -157,9 +170,11 @@ int radeonTransformTEX(
 
                        /* Save the output register. */
                        struct rc_dst_register output_reg = inst->U.I.DstReg;
+                       unsigned saturate_mode = inst->U.I.SaturateMode;
 
                        /* Redirect TEX to a new temp. */
                        tmp_texsample = rc_find_free_temporary(c);
+                       inst->U.I.SaturateMode = 0;
                        inst->U.I.DstReg.File = RC_FILE_TEMPORARY;
                        inst->U.I.DstReg.Index = tmp_texsample;
                        inst->U.I.DstReg.WriteMask = RC_MASK_XYZW;
@@ -235,15 +250,15 @@ int radeonTransformTEX(
 
                        inst_cmp = rc_insert_new_instruction(c, inst_add);
                        inst_cmp->U.I.Opcode = RC_OPCODE_CMP;
+                       inst_cmp->U.I.SaturateMode = saturate_mode;
                        inst_cmp->U.I.DstReg = output_reg;
                        inst_cmp->U.I.SrcReg[0].File = RC_FILE_TEMPORARY;
                        inst_cmp->U.I.SrcReg[0].Index = tmp_sum;
                        inst_cmp->U.I.SrcReg[0].Swizzle =
                                        combine_swizzles(RC_SWIZZLE_WWWW,
-                                                        compiler->state.unit[inst->U.I.TexSrcUnit].depth_texture_swizzle);
-                       inst_cmp->U.I.SrcReg[pass].File = RC_FILE_NONE;
-                       inst_cmp->U.I.SrcReg[pass].Swizzle = RC_SWIZZLE_1111;
-                       inst_cmp->U.I.SrcReg[fail] = shadow_ambient(compiler, inst->U.I.TexSrcUnit);
+                                                        compiler->state.unit[inst->U.I.TexSrcUnit].texture_swizzle);
+                       inst_cmp->U.I.SrcReg[pass] = shadow_pass_value(compiler, inst->U.I.TexSrcUnit);
+                       inst_cmp->U.I.SrcReg[fail] = shadow_fail_value(compiler, inst->U.I.TexSrcUnit);
 
                        assert(tmp_texsample != tmp_sum);
                }
@@ -396,6 +411,7 @@ int radeonTransformTEX(
                inst->U.I.SrcReg[0].Index = temp;
        }
 
+       /* NPOT -> POT conversion for 3D textures. */
        if (inst->U.I.Opcode != RC_OPCODE_KIL &&
            compiler->state.unit[inst->U.I.TexSrcUnit].clamp_and_scale_before_fetch) {
                struct rc_instruction *inst_mov;
@@ -425,6 +441,53 @@ int radeonTransformTEX(
                scale_texcoords(compiler, inst, RC_STATE_R300_TEXSCALE_FACTOR);
        }
 
+       /* Convert SNORM-encoded ATI1N sampled as UNORM to SNORM.
+        * Formula: dst = tex > 0.5 ? tex*2-2 : tex*2
+        */
+       if (inst->U.I.Opcode != RC_OPCODE_KIL &&
+           compiler->state.unit[inst->U.I.TexSrcUnit].convert_unorm_to_snorm) {
+               unsigned two, two_swizzle;
+               struct rc_instruction *inst_mul, *inst_mad, *inst_cnd;
+
+               two = rc_constants_add_immediate_scalar(&c->Program.Constants, 2.35, &two_swizzle);
+
+               inst_mul = rc_insert_new_instruction(c, inst);
+               inst_mul->U.I.Opcode = RC_OPCODE_MUL;
+               inst_mul->U.I.DstReg.File = RC_FILE_TEMPORARY;
+               inst_mul->U.I.DstReg.Index = rc_find_free_temporary(c);
+               inst_mul->U.I.SrcReg[0].File = RC_FILE_TEMPORARY;
+               inst_mul->U.I.SrcReg[0].Index = rc_find_free_temporary(c); /* redirected TEX output */
+               inst_mul->U.I.SrcReg[1].File = RC_FILE_CONSTANT; /* 2 */
+               inst_mul->U.I.SrcReg[1].Index = two;
+               inst_mul->U.I.SrcReg[1].Swizzle = two_swizzle;
+
+               inst_mad = rc_insert_new_instruction(c, inst_mul);
+               inst_mad->U.I.Opcode = RC_OPCODE_MAD;
+               inst_mad->U.I.DstReg.File = RC_FILE_TEMPORARY;
+               inst_mad->U.I.DstReg.Index = rc_find_free_temporary(c);
+               inst_mad->U.I.SrcReg[0] = inst_mul->U.I.SrcReg[0]; /* redirected TEX output */
+               inst_mad->U.I.SrcReg[1] = inst_mul->U.I.SrcReg[1]; /* 2 */
+               inst_mad->U.I.SrcReg[2] = inst_mul->U.I.SrcReg[1]; /* 2 */
+               inst_mad->U.I.SrcReg[2].Negate = RC_MASK_XYZW;
+
+               inst_cnd = rc_insert_new_instruction(c, inst_mad);
+               inst_cnd->U.I.Opcode = RC_OPCODE_CND;
+               inst_cnd->U.I.SaturateMode = inst->U.I.SaturateMode;
+               inst_cnd->U.I.DstReg = inst->U.I.DstReg;
+               inst_cnd->U.I.SrcReg[0].File = RC_FILE_TEMPORARY;
+               inst_cnd->U.I.SrcReg[0].Index = inst_mad->U.I.DstReg.Index;
+               inst_cnd->U.I.SrcReg[0].Swizzle = compiler->state.unit[inst->U.I.TexSrcUnit].texture_swizzle;
+               inst_cnd->U.I.SrcReg[1].File = RC_FILE_TEMPORARY;
+               inst_cnd->U.I.SrcReg[1].Index = inst_mul->U.I.DstReg.Index;
+               inst_cnd->U.I.SrcReg[1].Swizzle = compiler->state.unit[inst->U.I.TexSrcUnit].texture_swizzle;
+               inst_cnd->U.I.SrcReg[2] = inst_mul->U.I.SrcReg[0]; /* redirected TEX output */
+
+               inst->U.I.SaturateMode = 0;
+               inst->U.I.DstReg.File = RC_FILE_TEMPORARY;
+               inst->U.I.DstReg.Index = inst_mul->U.I.SrcReg[0].Index;
+               inst->U.I.DstReg.WriteMask = RC_MASK_XYZW;
+       }
+
        /* Cannot write texture to output registers or with saturate (all chips),
         * or with masks (non-r500). */
        if (inst->U.I.Opcode != RC_OPCODE_KIL &&
index 0d8bd4fc706d4cd29c60610aaad63098f5f950a4..213d3c060a689bfe980ed1e8a16534ec7e235e6a 100644 (file)
@@ -133,7 +133,6 @@ static const struct dri_extension card_extensions[] = {
   {"GL_ATI_texture_mirror_once",       NULL},
   {"GL_MESA_pack_invert",              NULL},
   {"GL_MESA_ycbcr_texture",            NULL},
-  {"GL_MESAX_texture_float",           NULL},
   {"GL_NV_blend_square",               NULL},
   {"GL_NV_vertex_program",             GL_NV_vertex_program_functions},
 #if FEATURE_OES_EGL_image
index a0a26f1b38d732b2d3207a9c8361ee2a606d274a..f0d960dca540955a539f1f90bb1a83f0d38f62c7 100644 (file)
@@ -77,8 +77,8 @@ static void build_state(
                if (fp->Base.ShadowSamplers & (1 << unit)) {
                        struct gl_texture_object* tex = r300->radeon.glCtx->Texture.Unit[unit]._Current;
 
-                       state->unit[unit].depth_texture_swizzle = build_dts(tex->DepthMode);
-                       state->unit[unit].texture_compare_func = build_func(tex->CompareFunc);
+                       state->unit[unit].texture_swizzle = build_dts(tex->Sampler.DepthMode);
+                       state->unit[unit].texture_compare_func = build_func(tex->Sampler.CompareFunc);
                }
        }
 }
index 2b9d85fae8b82312b496d0fb2eb1a44d4c527331..8980bd3dde1df129a22ef2135218168e308a6f45 100644 (file)
@@ -1906,7 +1906,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #       define R300_ALU_OUTC_D2A                (3 << 23)
 #       define R300_ALU_OUTC_MIN                (4 << 23)
 #       define R300_ALU_OUTC_MAX                (5 << 23)
-#       define R300_ALU_OUTC_CMPH               (7 << 23)
+#       define R300_ALU_OUTC_CND                (7 << 23)
 #       define R300_ALU_OUTC_CMP                (8 << 23)
 #       define R300_ALU_OUTC_FRC                (9 << 23)
 #       define R300_ALU_OUTC_REPL_ALPHA         (10 << 23)
index 51989c6b22417c59478844b630c9ae09c05fdc30..da6c8b602e1270c8d2b11624c05be7865a85c6dd 100644 (file)
@@ -1343,7 +1343,7 @@ static void r300SetupTextures(struct gl_context * ctx)
                         */
                        r300->hw.tex.filter_1.cmd[R300_TEX_VALUE_0 + hw_tmu] =
                                t->pp_txfilter_1 |
-                               translate_lod_bias(ctx->Texture.Unit[i].LodBias + t->base.LodBias);
+                               translate_lod_bias(ctx->Texture.Unit[i].LodBias + t->base.Sampler.LodBias);
                        r300->hw.tex.size.cmd[R300_TEX_VALUE_0 + hw_tmu] =
                            t->pp_txsize;
                        r300->hw.tex.format.cmd[R300_TEX_VALUE_0 +
@@ -2014,7 +2014,7 @@ static const GLfloat *get_fragmentprogram_constant(struct gl_context *ctx, GLuin
                                buffer[0] =
                                buffer[1] =
                                buffer[2] =
-                               buffer[3] = texObj->CompareFailValue;
+                               buffer[3] = texObj->Sampler.CompareFailValue;
                        }
                        return buffer;
                }
index f930b4d06bf7e9e62428db8e9a2dc41b1946dc5a..590d9afe14aa8512bfeebceb853de2fe2adcdda6 100644 (file)
@@ -81,13 +81,13 @@ static void r300UpdateTexWrap(radeonTexObjPtr t)
        t->pp_txfilter &=
            ~(R300_TX_WRAP_S_MASK | R300_TX_WRAP_T_MASK | R300_TX_WRAP_R_MASK);
 
-       t->pp_txfilter |= translate_wrap_mode(tObj->WrapS) << R300_TX_WRAP_S_SHIFT;
+       t->pp_txfilter |= translate_wrap_mode(tObj->Sampler.WrapS) << R300_TX_WRAP_S_SHIFT;
 
        if (tObj->Target != GL_TEXTURE_1D) {
-               t->pp_txfilter |= translate_wrap_mode(tObj->WrapT) << R300_TX_WRAP_T_SHIFT;
+               t->pp_txfilter |= translate_wrap_mode(tObj->Sampler.WrapT) << R300_TX_WRAP_T_SHIFT;
 
                if (tObj->Target == GL_TEXTURE_3D)
-                       t->pp_txfilter |= translate_wrap_mode(tObj->WrapR) << R300_TX_WRAP_R_SHIFT;
+                       t->pp_txfilter |= translate_wrap_mode(tObj->Sampler.WrapR) << R300_TX_WRAP_R_SHIFT;
        }
 }
 
@@ -202,7 +202,7 @@ static void r300TexParameter(struct gl_context * ctx, GLenum target,
        case GL_TEXTURE_MIN_FILTER:
        case GL_TEXTURE_MAG_FILTER:
        case GL_TEXTURE_MAX_ANISOTROPY_EXT:
-               r300SetTexFilter(t, texObj->MinFilter, texObj->MagFilter, texObj->MaxAnisotropy);
+               r300SetTexFilter(t, texObj->Sampler.MinFilter, texObj->Sampler.MagFilter, texObj->Sampler.MaxAnisotropy);
                break;
 
        case GL_TEXTURE_WRAP_S:
@@ -212,7 +212,7 @@ static void r300TexParameter(struct gl_context * ctx, GLenum target,
                break;
 
        case GL_TEXTURE_BORDER_COLOR:
-               r300SetTexBorderColor(t, texObj->BorderColor.f);
+               r300SetTexBorderColor(t, texObj->Sampler.BorderColor.f);
                break;
 
        case GL_TEXTURE_BASE_LEVEL:
@@ -299,12 +299,14 @@ static struct gl_texture_object *r300NewTextureObject(struct gl_context * ctx,
        }
 
        _mesa_initialize_texture_object(&t->base, name, target);
-       t->base.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
+       t->base.Sampler.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
 
        /* Initialize hardware state */
        r300UpdateTexWrap(t);
-       r300SetTexFilter(t, t->base.MinFilter, t->base.MagFilter, t->base.MaxAnisotropy);
-       r300SetTexBorderColor(t, t->base.BorderColor.f);
+       r300SetTexFilter(t, t->base.Sampler.MinFilter,
+                         t->base.Sampler.MagFilter,
+                         t->base.Sampler.MaxAnisotropy);
+       r300SetTexBorderColor(t, t->base.Sampler.BorderColor.f);
 
        return &t->base;
 }
index ed9955b05d8dcb2502b892e86d8b9e24cb444658..e24ad6f088d1fee98769dd5ac7f0a37e0d649524 100644 (file)
@@ -216,7 +216,7 @@ void r300SetDepthTexMode(struct gl_texture_object *tObj)
                return;
        }
 
-       switch (tObj->DepthMode) {
+       switch (tObj->Sampler.DepthMode) {
        case GL_LUMINANCE:
                t->pp_txformat = format[0];
                break;
index 32caf32cd2efb7f1537c13b1a4b6ad599fa297c8..75bd61c3cd4454c8e07e7b3f90e35a5b16b0ddf7 100644 (file)
@@ -29,8 +29,8 @@
 #define _DEFINEENDIAN_H_
 
 //We have to choose a reg bits orientation if there is no compile flag for it.
-#if defined(LITTLEENDIAN_CPU)
-#elif defined(BIGENDIAN_CPU)
+#ifdef MESA_BIG_ENDIAN
+#define BIGENDIAN_CPU
 #else
 #define LITTLEENDIAN_CPU
 #endif
index e07da8c15b469d4f77e226845a099791d66f0c44..0e4da5499baf963ea13b6620a675d1221a824831 100644 (file)
@@ -98,10 +98,11 @@ eg_set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_fo
     uint32_t cb_color0_base, cb_color0_info = 0;
     uint32_t cb_color0_pitch = 0, cb_color0_slice = 0, cb_color0_attrib = 0;
     int id = 0;
-    uint32_t comp_swap, format, source_format, number_type;
+    uint32_t endian, comp_swap, format, source_format, number_type;
     BATCH_LOCALS(&context->radeon);
 
     cb_color0_base = dst_offset / 256;
+    endian = ENDIAN_NONE;
 
     /* pitch */
     SETfield(cb_color0_pitch, (nPitchInPixel / 8) - 1,
@@ -118,10 +119,6 @@ eg_set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_fo
     SETbit(cb_color0_attrib,
            EG_CB_COLOR0_ATTRIB__NON_DISP_TILING_ORDER_bit);
 
-    SETfield(cb_color0_info,
-             ENDIAN_NONE,
-             EG_CB_COLOR0_INFO__ENDIAN_shift,
-             EG_CB_COLOR0_INFO__ENDIAN_mask);
     SETfield(cb_color0_info,
              ARRAY_LINEAR_GENERAL,
              EG_CB_COLOR0_INFO__ARRAY_MODE_shift,
@@ -131,24 +128,36 @@ eg_set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_fo
 
     switch(mesa_format) {
     case MESA_FORMAT_RGBA8888:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN32;
+#endif
             format = COLOR_8_8_8_8;
             comp_swap = SWAP_STD_REV;
            number_type = NUMBER_UNORM;
            source_format = 1;
             break;
     case MESA_FORMAT_SIGNED_RGBA8888:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN32;
+#endif
             format = COLOR_8_8_8_8;
             comp_swap = SWAP_STD_REV;
            number_type = NUMBER_SNORM;
            source_format = 1;
             break;
     case MESA_FORMAT_RGBA8888_REV:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN32;
+#endif
             format = COLOR_8_8_8_8;
             comp_swap = SWAP_STD;
            number_type = NUMBER_UNORM;
            source_format = 1;
             break;
     case MESA_FORMAT_SIGNED_RGBA8888_REV:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN32;
+#endif
             format = COLOR_8_8_8_8;
             comp_swap = SWAP_STD;
            number_type = NUMBER_SNORM;
@@ -156,6 +165,9 @@ eg_set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_fo
             break;
     case MESA_FORMAT_ARGB8888:
     case MESA_FORMAT_XRGB8888:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN32;
+#endif
             format = COLOR_8_8_8_8;
             comp_swap = SWAP_ALT;
            number_type = NUMBER_UNORM;
@@ -163,54 +175,81 @@ eg_set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_fo
             break;
     case MESA_FORMAT_ARGB8888_REV:
     case MESA_FORMAT_XRGB8888_REV:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN32;
+#endif
             format = COLOR_8_8_8_8;
             comp_swap = SWAP_ALT_REV;
            number_type = NUMBER_UNORM;
            source_format = 1;
             break;
     case MESA_FORMAT_RGB565:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN16;
+#endif
             format = COLOR_5_6_5;
             comp_swap = SWAP_STD_REV;
            number_type = NUMBER_UNORM;
            source_format = 1;
             break;
     case MESA_FORMAT_RGB565_REV:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN16;
+#endif
             format = COLOR_5_6_5;
             comp_swap = SWAP_STD;
            number_type = NUMBER_UNORM;
            source_format = 1;
             break;
     case MESA_FORMAT_ARGB4444:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN16;
+#endif
             format = COLOR_4_4_4_4;
             comp_swap = SWAP_ALT;
            number_type = NUMBER_UNORM;
            source_format = 1;
             break;
     case MESA_FORMAT_ARGB4444_REV:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN16;
+#endif
             format = COLOR_4_4_4_4;
             comp_swap = SWAP_ALT_REV;
            number_type = NUMBER_UNORM;
            source_format = 1;
             break;
     case MESA_FORMAT_ARGB1555:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN16;
+#endif
             format = COLOR_1_5_5_5;
             comp_swap = SWAP_ALT;
            number_type = NUMBER_UNORM;
            source_format = 1;
             break;
     case MESA_FORMAT_ARGB1555_REV:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN16;
+#endif
             format = COLOR_1_5_5_5;
             comp_swap = SWAP_ALT_REV;
            number_type = NUMBER_UNORM;
            source_format = 1;
             break;
     case MESA_FORMAT_AL88:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN16;
+#endif
             format = COLOR_8_8;
             comp_swap = SWAP_STD;
            number_type = NUMBER_UNORM;
            source_format = 1;
             break;
     case MESA_FORMAT_AL88_REV:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN16;
+#endif
             format = COLOR_8_8;
             comp_swap = SWAP_STD_REV;
            number_type = NUMBER_UNORM;
@@ -242,60 +281,90 @@ eg_set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_fo
            source_format = 1;
             break;
     case MESA_FORMAT_RGBA_FLOAT32:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN32;
+#endif
             format = COLOR_32_32_32_32_FLOAT;
             comp_swap = SWAP_STD;
            number_type = NUMBER_FLOAT;
            source_format = 0;
             break;
     case MESA_FORMAT_RGBA_FLOAT16:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN16;
+#endif
             format = COLOR_16_16_16_16_FLOAT;
             comp_swap = SWAP_STD;
            number_type = NUMBER_FLOAT;
            source_format = 0;
             break;
     case MESA_FORMAT_ALPHA_FLOAT32:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN32;
+#endif
             format = COLOR_32_FLOAT;
             comp_swap = SWAP_ALT_REV;
            number_type = NUMBER_FLOAT;
            source_format = 0;
             break;
     case MESA_FORMAT_ALPHA_FLOAT16:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN16;
+#endif
             format = COLOR_16_FLOAT;
             comp_swap = SWAP_ALT_REV;
            number_type = NUMBER_FLOAT;
            source_format = 0;
             break;
     case MESA_FORMAT_LUMINANCE_FLOAT32:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN32;
+#endif
             format = COLOR_32_FLOAT;
             comp_swap = SWAP_ALT;
            number_type = NUMBER_FLOAT;
            source_format = 0;
             break;
     case MESA_FORMAT_LUMINANCE_FLOAT16:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN16;
+#endif
             format = COLOR_16_FLOAT;
             comp_swap = SWAP_ALT;
            number_type = NUMBER_FLOAT;
            source_format = 0;
             break;
     case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN32;
+#endif
             format = COLOR_32_32_FLOAT;
             comp_swap = SWAP_ALT_REV;
            number_type = NUMBER_FLOAT;
            source_format = 0;
             break;
     case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN16;
+#endif
             format = COLOR_16_16_FLOAT;
             comp_swap = SWAP_ALT_REV;
            number_type = NUMBER_FLOAT;
            source_format = 0;
             break;
     case MESA_FORMAT_INTENSITY_FLOAT32: /* X, X, X, X */
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN32;
+#endif
             format = COLOR_32_FLOAT;
             comp_swap = SWAP_STD;
            number_type = NUMBER_FLOAT;
            source_format = 0;
             break;
     case MESA_FORMAT_INTENSITY_FLOAT16: /* X, X, X, X */
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN16;
+#endif
             format = COLOR_16_FLOAT;
             comp_swap = SWAP_STD;
            number_type = NUMBER_UNORM;
@@ -303,6 +372,9 @@ eg_set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_fo
             break;
     case MESA_FORMAT_X8_Z24:
     case MESA_FORMAT_S8_Z24:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN32;
+#endif
             format = COLOR_8_24;
             comp_swap = SWAP_STD;
            number_type = NUMBER_UNORM;
@@ -313,6 +385,9 @@ eg_set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_fo
            source_format = 0;
             break;
     case MESA_FORMAT_Z24_S8:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN32;
+#endif
             format = COLOR_24_8;
             comp_swap = SWAP_STD;
            number_type = NUMBER_UNORM;
@@ -323,6 +398,9 @@ eg_set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_fo
            source_format = 0;
             break;
     case MESA_FORMAT_Z16:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN16;
+#endif
             format = COLOR_16;
             comp_swap = SWAP_STD;
            number_type = NUMBER_UNORM;
@@ -333,6 +411,9 @@ eg_set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_fo
            source_format = 0;
             break;
     case MESA_FORMAT_Z32:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN32;
+#endif
             format = COLOR_32;
             comp_swap = SWAP_STD;
            number_type = NUMBER_UNORM;
@@ -343,12 +424,18 @@ eg_set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_fo
            source_format = 0;
             break;
     case MESA_FORMAT_SARGB8:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN32;
+#endif
             format = COLOR_8_8_8_8;
             comp_swap = SWAP_ALT;
            number_type = NUMBER_SRGB;
            source_format = 1;
             break;
     case MESA_FORMAT_SLA8:
+#ifdef MESA_BIG_ENDIAN
+           endian = ENDIAN_8IN16;
+#endif
             format = COLOR_8_8;
             comp_swap = SWAP_ALT_REV;
            number_type = NUMBER_SRGB;
@@ -366,6 +453,10 @@ eg_set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_fo
             return;
     }
 
+    SETfield(cb_color0_info,
+            endian,
+            EG_CB_COLOR0_INFO__ENDIAN_shift,
+            EG_CB_COLOR0_INFO__ENDIAN_mask);
     SETfield(cb_color0_info,
             format,
             EG_CB_COLOR0_INFO__FORMAT_shift,
@@ -441,10 +532,10 @@ static inline void eg_load_shaders(struct gl_context * ctx)
     shader = context->blit_bo->ptr;
 
     for(i=0; i<sizeof(evergreen_vs)/4; i++) {
-        shader[128+i] = evergreen_vs[i];
+           shader[128+i] = CPU_TO_LE32(evergreen_vs[i]);
     }
     for(i=0; i<sizeof(evergreen_ps)/4; i++) {
-        shader[256+i] = evergreen_ps[i];
+           shader[256+i] = CPU_TO_LE32(evergreen_ps[i]);
     }
 
     radeon_bo_unmap(context->blit_bo);
@@ -525,6 +616,7 @@ eg_set_vtx_resource(context_t *context)
 {
     struct radeon_bo *bo = context->blit_bo;
     uint32_t sq_vtx_constant_word3 = 0;
+    uint32_t sq_vtx_constant_word2 = 0;
     BATCH_LOCALS(&context->radeon);
 
     BEGIN_BATCH_NO_AUTOSTATE(6);
@@ -555,13 +647,19 @@ eg_set_vtx_resource(context_t *context)
             EG_SQ_VTX_CONSTANT_WORD3_0__DST_SEL_W_shift,
             EG_SQ_VTX_CONSTANT_WORD3_0__DST_SEL_W_mask);
 
+    sq_vtx_constant_word2 = 0
+#ifdef MESA_BIG_ENDIAN
+           | (SQ_ENDIAN_8IN32 << SQ_VTX_CONSTANT_WORD2_0__ENDIAN_SWAP_shift)
+#endif
+           | (16 << SQ_VTX_CONSTANT_WORD2_0__STRIDE_shift);
+
     BEGIN_BATCH_NO_AUTOSTATE(10 + 2);
 
     R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_RESOURCE, 8));
     R600_OUT_BATCH(EG_SQ_FETCH_RESOURCE_VS_OFFSET * EG_FETCH_RESOURCE_STRIDE);
     R600_OUT_BATCH(0);
     R600_OUT_BATCH(48 - 1);
-    R600_OUT_BATCH(16 << SQ_VTX_CONSTANT_WORD2_0__STRIDE_shift);
+    R600_OUT_BATCH(sq_vtx_constant_word2);
     R600_OUT_BATCH(sq_vtx_constant_word3);
     R600_OUT_BATCH(0);
     R600_OUT_BATCH(0);
index eb0252807392d74e7d4608f1655b67a8cad6c2e9..84f20f8cafb9a736c5aa7afb5ff17bdbf078fa3c 100644 (file)
@@ -37,11 +37,19 @@ const uint32_t evergreen_vs[] =
        0x00000000,
        0x3c000000,
        0x67961001,
+#ifdef MESA_BIG_ENDIAN
+       0x000a0000,
+#else
        0x00080000,
+#endif
        0x00000000,
        0x1c000000,
        0x67961000,
+#ifdef MESA_BIG_ENDIAN
+       0x00020008,
+#else
        0x00000008,
+#endif
        0x00000000,
 };
 
index 53dacbfdf391286e04203e5fe37a474956279e92..42566e537a56bc9ba4062c4d957cdeb99a48835a 100644 (file)
@@ -124,7 +124,7 @@ static void evergreenSendTexState(struct gl_context *ctx, struct radeon_state_at
     context_t *context = EVERGREEN_CONTEXT(ctx);
        EVERGREEN_CHIP_CONTEXT *evergreen = GET_EVERGREEN_CHIP(context);
 
-    struct evergreen_vertex_program *vp = context->selected_vp;
+    struct evergreen_vertex_program *vp = (struct evergreen_vertex_program *) context->selected_vp;
 
        struct radeon_bo *bo = NULL;
        unsigned int i;
@@ -307,6 +307,16 @@ static void evergreenSetupVTXConstants(struct gl_context  * ctx,
             SQ_VTX_CONSTANT_WORD2_0__DATA_FORMAT_shift,
             SQ_VTX_CONSTANT_WORD2_0__DATA_FORMAT_mask); // TODO : trace back api for initial data type, not only GL_FLOAT     
     SETfield(uSQ_VTX_CONSTANT_WORD2_0, 0, BASE_ADDRESS_HI_shift, BASE_ADDRESS_HI_mask); // TODO    
+
+       SETfield(uSQ_VTX_CONSTANT_WORD2_0, 
+#ifdef MESA_BIG_ENDIAN 
+                        SQ_ENDIAN_8IN32,
+#else
+                        SQ_ENDIAN_NONE,
+#endif
+             SQ_VTX_CONSTANT_WORD2_0__ENDIAN_SWAP_shift,
+             SQ_VTX_CONSTANT_WORD2_0__ENDIAN_SWAP_mask);
+
     if(GL_TRUE == pStreamDesc->normalize)
     {
         SETfield(uSQ_VTX_CONSTANT_WORD2_0, SQ_NUM_FORMAT_NORM,
@@ -379,6 +389,8 @@ static void evergreenSendVTX(struct gl_context *ctx, struct radeon_state_atom *a
     struct evergreen_vertex_program *vp = (struct evergreen_vertex_program *)(context->selected_vp);
     unsigned int i, j = 0;
     BATCH_LOCALS(&context->radeon);
+    (void) b_l_rmesa;  /* silence unused var warning */
+
        radeon_print(RADEON_STATE, RADEON_VERBOSE, "%s\n", __func__);
 
     if (context->radeon.tcl.aos_count == 0)
index a2a361f32e6a94b6cefa47233cd1ffab91604248..1fd655e85f8f1380a2f2e48a08ec6c1c183c6653 100644 (file)
@@ -42,7 +42,7 @@
 
 static void evergreen_freeVertProgCache(struct gl_context *ctx, struct r700_vertex_program_cont *cache)
 {
-       struct evergreen_vertex_program *tmp, *vp = cache->progs;
+       struct evergreen_vertex_program *tmp, *vp = (struct evergreen_vertex_program *) cache->progs;
 
        while (vp) {
                tmp = vp->next;
@@ -121,7 +121,7 @@ static void evergreenDeleteProgram(struct gl_context * ctx, struct gl_program *p
     {
     case GL_VERTEX_STATE_PROGRAM_NV:
     case GL_VERTEX_PROGRAM_ARB:            
-           evergreen_freeVertProgCache(ctx, vpc);
+           evergreen_freeVertProgCache(ctx, (struct r700_vertex_program_cont *) vpc);
            break;
     case GL_FRAGMENT_PROGRAM_NV:
     case GL_FRAGMENT_PROGRAM_ARB:
@@ -154,7 +154,7 @@ evergreenProgramStringNotify(struct gl_context * ctx, GLenum target, struct gl_p
 
        switch (target) {
        case GL_VERTEX_PROGRAM_ARB:
-               evergreen_freeVertProgCache(ctx, vpc);
+               evergreen_freeVertProgCache(ctx, (struct r700_vertex_program_cont *) vpc);
                vpc->progs = NULL;
                break;
        case GL_FRAGMENT_PROGRAM_ARB:
index 6e51832c87825e23628bcacfabc46069599bdb93..4507be29d86c0abdb36f2fccffcaadb967f6b134 100644 (file)
@@ -180,6 +180,15 @@ static void evergreenRunRenderPrimitive(struct gl_context * ctx, int start, int
             SETfield(vgt_index_type, DI_INDEX_SIZE_16_BIT, INDEX_TYPE_shift, INDEX_TYPE_mask);
     }
 
+       /* 16-bit indexes are packed in a 32-bit value */
+       SETfield(vgt_index_type,
+#if MESA_BIG_ENDIAN
+                       VGT_DMA_SWAP_32_BIT,
+#else
+                       VGT_DMA_SWAP_NONE,
+#endif
+                       SWAP_MODE_shift, SWAP_MODE_mask);
+
     vgt_num_indices = num_indices;
     SETfield(vgt_draw_initiator, DI_SRC_SEL_DMA, SOURCE_SELECT_shift, SOURCE_SELECT_mask);
     SETfield(vgt_draw_initiator, DI_MAJOR_MODE_0, MAJOR_MODE_shift, MAJOR_MODE_mask);
@@ -252,6 +261,15 @@ static void evergreenRunRenderPrimitiveImmediate(struct gl_context * ctx, int st
             SETfield(vgt_index_type, DI_INDEX_SIZE_16_BIT, INDEX_TYPE_shift, INDEX_TYPE_mask);
     }
 
+       /* 16-bit indexes are packed in a 32-bit value */
+       SETfield(vgt_index_type,
+#if MESA_BIG_ENDIAN
+                       VGT_DMA_SWAP_32_BIT,
+#else
+                       VGT_DMA_SWAP_NONE,
+#endif
+                       SWAP_MODE_shift, SWAP_MODE_mask);
+
     vgt_num_indices = num_indices;
     SETfield(vgt_draw_initiator, DI_MAJOR_MODE_0, MAJOR_MODE_shift, MAJOR_MODE_mask);
 
@@ -620,6 +638,7 @@ static void evergreenSetupIndexBuffer(struct gl_context *ctx, const struct _mesa
     }
 }
 
+#if 0 /* unused */
 static void evergreenAlignDataToDword(struct gl_context *ctx, 
                                  const struct gl_client_array *input, 
                                  int count, 
@@ -661,6 +680,7 @@ static void evergreenAlignDataToDword(struct gl_context *ctx,
 
     attr->stride = dst_stride;
 }
+#endif
 
 static void evergreenSetupStreams(struct gl_context *ctx, const struct gl_client_array *input[], int count)
 {
index 3b5448a0e4e4f55c2f9626508c20873f49b0ce75..33a5f27768376d887d01ce39bdd36e8ff2afe8ea 100644 (file)
@@ -97,6 +97,16 @@ static GLboolean evergreenGetTexFormat(struct gl_texture_object *tObj, gl_format
                             EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift, 
                  EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
@@ -105,6 +115,7 @@ static GLboolean evergreenGetTexFormat(struct gl_texture_object *tObj, gl_format
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                if (mesa_format == MESA_FORMAT_SIGNED_RGBA8888) {
                        SETfield(t->SQ_TEX_RESOURCE4, SQ_FORMAT_COMP_SIGNED,
                                 FORMAT_COMP_X_shift, FORMAT_COMP_X_mask);
@@ -122,6 +133,16 @@ static GLboolean evergreenGetTexFormat(struct gl_texture_object *tObj, gl_format
                             EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift, 
                  EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
@@ -130,6 +151,7 @@ static GLboolean evergreenGetTexFormat(struct gl_texture_object *tObj, gl_format
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                if (mesa_format == MESA_FORMAT_SIGNED_RGBA8888_REV) {
                        SETfield(t->SQ_TEX_RESOURCE4, SQ_FORMAT_COMP_SIGNED,
                                 FORMAT_COMP_X_shift, FORMAT_COMP_X_mask);
@@ -146,6 +168,16 @@ static GLboolean evergreenGetTexFormat(struct gl_texture_object *tObj, gl_format
                             EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift, 
                  EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
@@ -154,12 +186,23 @@ static GLboolean evergreenGetTexFormat(struct gl_texture_object *tObj, gl_format
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_XRGB8888:
                SETfield(t->SQ_TEX_RESOURCE7, FMT_8_8_8_8,
                             EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift, 
                  EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
@@ -168,26 +211,48 @@ static GLboolean evergreenGetTexFormat(struct gl_texture_object *tObj, gl_format
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_XRGB8888_REV:
                SETfield(t->SQ_TEX_RESOURCE7, FMT_8_8_8_8,
                             EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift, 
                  EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
-               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_ARGB8888_REV:
                SETfield(t->SQ_TEX_RESOURCE7, FMT_8_8_8_8,
                             EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift, 
                  EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
@@ -196,12 +261,23 @@ static GLboolean evergreenGetTexFormat(struct gl_texture_object *tObj, gl_format
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_RGB888:
                SETfield(t->SQ_TEX_RESOURCE7, FMT_8_8_8,
                             EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift, 
                  EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
@@ -210,12 +286,23 @@ static GLboolean evergreenGetTexFormat(struct gl_texture_object *tObj, gl_format
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_RGB565:
                SETfield(t->SQ_TEX_RESOURCE7, FMT_5_6_5,
                             EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift, 
                  EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
@@ -224,12 +311,23 @@ static GLboolean evergreenGetTexFormat(struct gl_texture_object *tObj, gl_format
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_RGB565_REV:
                SETfield(t->SQ_TEX_RESOURCE7, FMT_5_6_5,
                             EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift, 
                  EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+        SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
@@ -238,12 +336,23 @@ static GLboolean evergreenGetTexFormat(struct gl_texture_object *tObj, gl_format
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_ARGB4444:
                SETfield(t->SQ_TEX_RESOURCE7, FMT_4_4_4_4,
                             EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift, 
                  EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
@@ -252,12 +361,23 @@ static GLboolean evergreenGetTexFormat(struct gl_texture_object *tObj, gl_format
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_ARGB4444_REV:
                SETfield(t->SQ_TEX_RESOURCE7, FMT_4_4_4_4,
                             EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift, 
                  EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
@@ -266,12 +386,23 @@ static GLboolean evergreenGetTexFormat(struct gl_texture_object *tObj, gl_format
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_ARGB1555:
                SETfield(t->SQ_TEX_RESOURCE7, FMT_1_5_5_5,
                             EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift, 
                  EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
@@ -280,12 +411,23 @@ static GLboolean evergreenGetTexFormat(struct gl_texture_object *tObj, gl_format
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_ARGB1555_REV:
                SETfield(t->SQ_TEX_RESOURCE7, FMT_1_5_5_5,
                             EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_shift, 
                  EG_SQ_TEX_RESOURCE_WORD7_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+       SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
@@ -294,6 +436,7 @@ static GLboolean evergreenGetTexFormat(struct gl_texture_object *tObj, gl_format
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_AL88:
        case MESA_FORMAT_AL88_REV: /* TODO : Check this. */
@@ -581,7 +724,7 @@ static GLboolean evergreenGetTexFormat(struct gl_texture_object *tObj, gl_format
                default:
                        break;
                };
-               switch (tObj->DepthMode) {
+               switch (tObj->Sampler.DepthMode) {
                case GL_LUMINANCE:  /* X, X, X, ONE */
                        SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
                                 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
@@ -699,18 +842,18 @@ static void evergreenUpdateTexWrap(radeonTexObjPtr t)
 {
        struct gl_texture_object *tObj = &t->base;
 
-    SETfield(t->SQ_TEX_SAMPLER0, evergreen_translate_wrap_mode(tObj->WrapS),
+    SETfield(t->SQ_TEX_SAMPLER0, evergreen_translate_wrap_mode(tObj->Sampler.WrapS),
              EG_SQ_TEX_SAMPLER_WORD0_0__CLAMP_X_shift, 
              EG_SQ_TEX_SAMPLER_WORD0_0__CLAMP_X_mask);
 
        if (tObj->Target != GL_TEXTURE_1D) 
     {
-               SETfield(t->SQ_TEX_SAMPLER0, evergreen_translate_wrap_mode(tObj->WrapT),
+               SETfield(t->SQ_TEX_SAMPLER0, evergreen_translate_wrap_mode(tObj->Sampler.WrapT),
                             EG_SQ_TEX_SAMPLER_WORD0_0__CLAMP_Y_shift, 
                  EG_SQ_TEX_SAMPLER_WORD0_0__CLAMP_Y_mask);
 
                if (tObj->Target == GL_TEXTURE_3D)
-                       SETfield(t->SQ_TEX_SAMPLER0, evergreen_translate_wrap_mode(tObj->WrapR),
+                       SETfield(t->SQ_TEX_SAMPLER0, evergreen_translate_wrap_mode(tObj->Sampler.WrapR),
                                     EG_SQ_TEX_SAMPLER_WORD0_0__CLAMP_Z_shift, 
                      EG_SQ_TEX_SAMPLER_WORD0_0__CLAMP_Z_mask);
        }
@@ -1022,21 +1165,21 @@ static GLboolean evergreen_setup_hardware_state(struct gl_context * ctx, struct
        SETfield(t->SQ_TEX_RESOURCE5, t->maxLod - t->minLod, LAST_LEVEL_shift, LAST_LEVEL_mask);
     
        SETfield(t->SQ_TEX_SAMPLER1,
-                    EG_S_FIXED(CLAMP(t->base.MinLod - t->minLod, 0, 15), 8),
+                    EG_S_FIXED(CLAMP(t->base.Sampler.MinLod - t->minLod, 0, 15), 8),
                     EG_SQ_TEX_SAMPLER_WORD1_0__MIN_LOD_shift, 
              EG_SQ_TEX_SAMPLER_WORD1_0__MIN_LOD_mask);
        SETfield(t->SQ_TEX_SAMPLER1,
-                    EG_S_FIXED(CLAMP(t->base.MaxLod - t->minLod, 0, 15), 8),
+                    EG_S_FIXED(CLAMP(t->base.Sampler.MaxLod - t->minLod, 0, 15), 8),
                     EG_SQ_TEX_SAMPLER_WORD1_0__MAX_LOD_shift, 
              EG_SQ_TEX_SAMPLER_WORD1_0__MAX_LOD_mask);
        SETfield(t->SQ_TEX_SAMPLER2,
-                    EG_S_FIXED(CLAMP(ctx->Texture.Unit[unit].LodBias + t->base.LodBias, -16, 16), 8),
+                    EG_S_FIXED(CLAMP(ctx->Texture.Unit[unit].LodBias + t->base.Sampler.LodBias, -16, 16), 8),
                     EG_SQ_TEX_SAMPLER_WORD2_0__LOD_BIAS_shift, 
              EG_SQ_TEX_SAMPLER_WORD2_0__LOD_BIAS_mask);
 
-       if(texObj->CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB)
+       if(texObj->Sampler.CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB)
        {
-               SETfield(t->SQ_TEX_SAMPLER0, evergreen_translate_shadow_func(texObj->CompareFunc), 
+               SETfield(t->SQ_TEX_SAMPLER0, evergreen_translate_shadow_func(texObj->Sampler.CompareFunc), 
                  EG_SQ_TEX_SAMPLER_WORD0_0__DCF_shift, 
                  EG_SQ_TEX_SAMPLER_WORD0_0__DCF_mask);
        }
@@ -1420,12 +1563,12 @@ static struct gl_texture_object *evergreenNewTextureObject(struct gl_context * c
                        t, _mesa_lookup_enum_by_nr(target));
 
        _mesa_initialize_texture_object(&t->base, name, target);
-       t->base.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
+       t->base.Sampler.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
     
        evergreenSetTexDefaultState(t);
        evergreenUpdateTexWrap(t);
-       evergreenSetTexFilter(t, t->base.MinFilter, t->base.MagFilter, t->base.MaxAnisotropy);
-       evergreenSetTexBorderColor(t, t->base.BorderColor.f);
+       evergreenSetTexFilter(t, t->base.Sampler.MinFilter, t->base.Sampler.MagFilter, t->base.Sampler.MaxAnisotropy);
+       evergreenSetTexBorderColor(t, t->base.Sampler.BorderColor.f);
 
        return &t->base;
 }
@@ -1475,7 +1618,7 @@ static void evergreenTexParameter(struct gl_context * ctx, GLenum target,
        case GL_TEXTURE_MIN_FILTER:
        case GL_TEXTURE_MAG_FILTER:
        case GL_TEXTURE_MAX_ANISOTROPY_EXT:
-               evergreenSetTexFilter(t, texObj->MinFilter, texObj->MagFilter, texObj->MaxAnisotropy);
+               evergreenSetTexFilter(t, texObj->Sampler.MinFilter, texObj->Sampler.MagFilter, texObj->Sampler.MaxAnisotropy);
                break;
 
        case GL_TEXTURE_WRAP_S:
@@ -1485,7 +1628,7 @@ static void evergreenTexParameter(struct gl_context * ctx, GLenum target,
                break;
 
        case GL_TEXTURE_BORDER_COLOR:
-               evergreenSetTexBorderColor(t, texObj->BorderColor.f);
+               evergreenSetTexBorderColor(t, texObj->Sampler.BorderColor.f);
                break;
 
        case GL_TEXTURE_BASE_LEVEL:
index b3371f20b199d610e14008119a8cb7e3e6e84611..018869b9996a9f0fbc524d40be263d49a75260a8 100644 (file)
@@ -405,7 +405,7 @@ void evergreenSelectVertexShader(struct gl_context *ctx)
        }
        if (match)
        {
-               context->selected_vp = vp;
+               context->selected_vp = (struct r700_vertex_program *) vp;
                return;
        }
     }
@@ -418,7 +418,7 @@ void evergreenSelectVertexShader(struct gl_context *ctx)
     }
     vp->next = vpc->progs;
     vpc->progs = vp;
-    context->selected_vp = vp;
+    context->selected_vp = (struct r700_vertex_program *) vp;
     return;
 }
 
@@ -566,7 +566,7 @@ void evergreenSetVertexFormat(struct gl_context *ctx, const struct gl_client_arr
 void * evergreenGetActiveVpShaderBo(struct gl_context * ctx)
 {
     context_t *context = EVERGREEN_CONTEXT(ctx);
-    struct evergreen_vertex_program *vp = context->selected_vp;;
+    struct evergreen_vertex_program *vp = (struct evergreen_vertex_program *) context->selected_vp;
 
     if (vp)
        return vp->shaderbo;
@@ -577,7 +577,7 @@ void * evergreenGetActiveVpShaderBo(struct gl_context * ctx)
 void * evergreenGetActiveVpShaderConstBo(struct gl_context * ctx)
 {
     context_t *context = EVERGREEN_CONTEXT(ctx);
-    struct evergreen_vertex_program *vp = context->selected_vp;;
+    struct evergreen_vertex_program *vp = (struct evergreen_vertex_program *) context->selected_vp;
 
     if (vp)
        return vp->constbo0;
@@ -589,7 +589,7 @@ GLboolean evergreenSetupVertexProgram(struct gl_context * ctx)
 {
     context_t *context = EVERGREEN_CONTEXT(ctx);
     EVERGREEN_CHIP_CONTEXT *evergreen = GET_EVERGREEN_CHIP(context);
-    struct evergreen_vertex_program *vp = context->selected_vp;
+    struct evergreen_vertex_program *vp = (struct evergreen_vertex_program *) context->selected_vp;
 
     if(GL_FALSE == vp->loaded)
     {
@@ -650,7 +650,7 @@ GLboolean evergreenSetupVPconstants(struct gl_context * ctx)
 {
     context_t *context = EVERGREEN_CONTEXT(ctx);
     EVERGREEN_CHIP_CONTEXT *evergreen = GET_EVERGREEN_CHIP(context);
-    struct evergreen_vertex_program *vp = context->selected_vp;
+    struct evergreen_vertex_program *vp = (struct evergreen_vertex_program *) context->selected_vp;
 
     struct gl_program_parameter_list *paramList;
     unsigned int unNumParamData;
index 31c32d62f9aa6162ae395f7cfc08adc973d7f2c3..2d47afdcbbfe51999d6ad5248ac3131dbe308371 100644 (file)
@@ -94,17 +94,17 @@ set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_forma
 {
     uint32_t cb_color0_base, cb_color0_size = 0, cb_color0_info = 0, cb_color0_view = 0;
     int id = 0;
-    uint32_t comp_swap, format;
+    uint32_t endian, comp_swap, format;
     BATCH_LOCALS(&context->radeon);
 
     cb_color0_base = dst_offset / 256;
+       endian = ENDIAN_NONE;
 
     SETfield(cb_color0_size, (nPitchInPixel / 8) - 1,
              PITCH_TILE_MAX_shift, PITCH_TILE_MAX_mask);
     SETfield(cb_color0_size, ((nPitchInPixel * h) / 64) - 1,
              SLICE_TILE_MAX_shift, SLICE_TILE_MAX_mask);
 
-    SETfield(cb_color0_info, ENDIAN_NONE, ENDIAN_shift, ENDIAN_mask);
     SETfield(cb_color0_info, ARRAY_LINEAR_GENERAL,
              CB_COLOR0_INFO__ARRAY_MODE_shift, CB_COLOR0_INFO__ARRAY_MODE_mask);
 
@@ -112,24 +112,36 @@ set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_forma
 
     switch(mesa_format) {
     case MESA_FORMAT_RGBA8888:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN32;
+#endif
             format = COLOR_8_8_8_8;
             comp_swap = SWAP_STD_REV;
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_SIGNED_RGBA8888:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN32;
+#endif
             format = COLOR_8_8_8_8;
             comp_swap = SWAP_STD_REV;
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
            SETfield(cb_color0_info, NUMBER_SNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_RGBA8888_REV:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN32;
+#endif
             format = COLOR_8_8_8_8;
             comp_swap = SWAP_STD;
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_SIGNED_RGBA8888_REV:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN32;
+#endif
             format = COLOR_8_8_8_8;
             comp_swap = SWAP_STD;
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
@@ -137,6 +149,9 @@ set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_forma
             break;
     case MESA_FORMAT_ARGB8888:
     case MESA_FORMAT_XRGB8888:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN32;
+#endif
             format = COLOR_8_8_8_8;
             comp_swap = SWAP_ALT;
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
@@ -144,54 +159,81 @@ set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_forma
             break;
     case MESA_FORMAT_ARGB8888_REV:
     case MESA_FORMAT_XRGB8888_REV:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN32;
+#endif
             format = COLOR_8_8_8_8;
             comp_swap = SWAP_ALT_REV;
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_RGB565:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN16;
+#endif
+                   comp_swap = SWAP_STD_REV;   
             format = COLOR_5_6_5;
-            comp_swap = SWAP_STD_REV;
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_RGB565_REV:
-            format = COLOR_5_6_5;
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN16;
+#endif
             comp_swap = SWAP_STD;
+            format = COLOR_5_6_5;
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_ARGB4444:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN16;
+#endif
             format = COLOR_4_4_4_4;
             comp_swap = SWAP_ALT;
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_ARGB4444_REV:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN16;
+#endif
             format = COLOR_4_4_4_4;
             comp_swap = SWAP_ALT_REV;
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_ARGB1555:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN16;
+#endif
             format = COLOR_1_5_5_5;
             comp_swap = SWAP_ALT;
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_ARGB1555_REV:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN16;
+#endif
             format = COLOR_1_5_5_5;
             comp_swap = SWAP_ALT_REV;
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_AL88:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN16;
+#endif
             format = COLOR_8_8;
             comp_swap = SWAP_STD;
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_AL88_REV:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN16;
+#endif
             format = COLOR_8_8;
             comp_swap = SWAP_STD_REV;
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
@@ -223,6 +265,9 @@ set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_forma
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_RGBA_FLOAT32:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN32;
+#endif
             format = COLOR_32_32_32_32_FLOAT;
             comp_swap = SWAP_STD;
            SETbit(cb_color0_info, BLEND_FLOAT32_bit);
@@ -230,12 +275,18 @@ set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_forma
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_RGBA_FLOAT16:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN16;
+#endif
             format = COLOR_16_16_16_16_FLOAT;
             comp_swap = SWAP_STD;
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_ALPHA_FLOAT32:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN32;
+#endif
             format = COLOR_32_FLOAT;
             comp_swap = SWAP_ALT_REV;
            SETbit(cb_color0_info, BLEND_FLOAT32_bit);
@@ -243,12 +294,18 @@ set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_forma
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_ALPHA_FLOAT16:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN16;
+#endif
             format = COLOR_16_FLOAT;
             comp_swap = SWAP_ALT_REV;
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_LUMINANCE_FLOAT32:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN32;
+#endif
             format = COLOR_32_FLOAT;
             comp_swap = SWAP_ALT;
            SETbit(cb_color0_info, BLEND_FLOAT32_bit);
@@ -256,12 +313,18 @@ set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_forma
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_LUMINANCE_FLOAT16:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN16;
+#endif
             format = COLOR_16_FLOAT;
             comp_swap = SWAP_ALT;
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN32;
+#endif
             format = COLOR_32_32_FLOAT;
             comp_swap = SWAP_ALT_REV;
            SETbit(cb_color0_info, BLEND_FLOAT32_bit);
@@ -269,12 +332,18 @@ set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_forma
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN16;
+#endif
             format = COLOR_16_16_FLOAT;
             comp_swap = SWAP_ALT_REV;
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_INTENSITY_FLOAT32: /* X, X, X, X */
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN32;
+#endif
             format = COLOR_32_FLOAT;
             comp_swap = SWAP_STD;
            SETbit(cb_color0_info, BLEND_FLOAT32_bit);
@@ -282,6 +351,9 @@ set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_forma
            SETfield(cb_color0_info, NUMBER_FLOAT, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_INTENSITY_FLOAT16: /* X, X, X, X */
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN16;
+#endif
             format = COLOR_16_FLOAT;
             comp_swap = SWAP_STD;
            CLEARbit(cb_color0_info, SOURCE_FORMAT_bit);
@@ -289,6 +361,9 @@ set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_forma
             break;
     case MESA_FORMAT_X8_Z24:
     case MESA_FORMAT_S8_Z24:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN32;
+#endif
             format = COLOR_8_24;
             comp_swap = SWAP_STD;
            SETfield(cb_color0_info, ARRAY_1D_TILED_THIN1,
@@ -297,6 +372,9 @@ set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_forma
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_Z24_S8:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN32;
+#endif
             format = COLOR_24_8;
             comp_swap = SWAP_STD;
            SETfield(cb_color0_info, ARRAY_1D_TILED_THIN1,
@@ -305,6 +383,9 @@ set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_forma
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_Z16:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN16;
+#endif
             format = COLOR_16;
             comp_swap = SWAP_STD;
            SETfield(cb_color0_info, ARRAY_1D_TILED_THIN1,
@@ -313,6 +394,9 @@ set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_forma
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_Z32:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN32;
+#endif
             format = COLOR_32;
             comp_swap = SWAP_STD;
            SETfield(cb_color0_info, ARRAY_1D_TILED_THIN1,
@@ -321,12 +405,18 @@ set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_forma
            SETfield(cb_color0_info, NUMBER_UNORM, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_SARGB8:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN32;
+#endif
             format = COLOR_8_8_8_8;
             comp_swap = SWAP_ALT;
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
            SETfield(cb_color0_info, NUMBER_SRGB, NUMBER_TYPE_shift, NUMBER_TYPE_mask);
             break;
     case MESA_FORMAT_SLA8:
+#ifdef MESA_BIG_ENDIAN
+                       endian = ENDIAN_8IN16;
+#endif
             format = COLOR_8_8;
             comp_swap = SWAP_ALT_REV;
            SETbit(cb_color0_info, SOURCE_FORMAT_bit);
@@ -348,6 +438,7 @@ set_render_target(context_t *context, struct radeon_bo *bo, gl_format mesa_forma
     if (context->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV770)
            CLEARbit(cb_color0_info, BLEND_FLOAT32_bit);
 
+    SETfield(cb_color0_info, endian, ENDIAN_shift, ENDIAN_mask);
     SETfield(cb_color0_info, format, CB_COLOR0_INFO__FORMAT_shift,
              CB_COLOR0_INFO__FORMAT_mask);
     SETfield(cb_color0_info, comp_swap, COMP_SWAP_shift, COMP_SWAP_mask);
@@ -426,10 +517,10 @@ static inline void load_shaders(struct gl_context * ctx)
     shader = context->blit_bo->ptr;
 
     for(i=0; i<sizeof(r6xx_vs)/4; i++) {
-        shader[128+i] = r6xx_vs[i];
+        shader[128+i] = CPU_TO_LE32(r6xx_vs[i]);
     }
     for(i=0; i<sizeof(r6xx_ps)/4; i++) {
-        shader[256+i] = r6xx_ps[i];
+        shader[256+i] = CPU_TO_LE32(r6xx_ps[i]);
     }
 
     radeon_bo_unmap(context->blit_bo);
@@ -521,6 +612,8 @@ static inline void
 set_vtx_resource(context_t *context)
 {
     struct radeon_bo *bo = context->blit_bo;
+       uint32_t sq_vtx_constant_word2 = 0;
+
     BATCH_LOCALS(&context->radeon);
 
     BEGIN_BATCH_NO_AUTOSTATE(6);
@@ -543,13 +636,19 @@ set_vtx_resource(context_t *context)
     else
            r700SyncSurf(context, bo, RADEON_GEM_DOMAIN_GTT, 0, VC_ACTION_ENA_bit);
 
+       sq_vtx_constant_word2 = 0
+#ifdef MESA_BIG_ENDIAN
+               | (SQ_ENDIAN_8IN32 << SQ_VTX_CONSTANT_WORD2_0__ENDIAN_SWAP_shift)
+#endif
+               | (16 << SQ_VTX_CONSTANT_WORD2_0__STRIDE_shift);
+
     BEGIN_BATCH_NO_AUTOSTATE(9 + 2);
 
     R600_OUT_BATCH(CP_PACKET3(R600_IT_SET_RESOURCE, 7));
     R600_OUT_BATCH(SQ_FETCH_RESOURCE_VS_OFFSET * FETCH_RESOURCE_STRIDE);
     R600_OUT_BATCH(0);
     R600_OUT_BATCH(48 - 1);
-    R600_OUT_BATCH(16 << SQ_VTX_CONSTANT_WORD2_0__STRIDE_shift);
+    R600_OUT_BATCH(sq_vtx_constant_word2);
     R600_OUT_BATCH(1 << MEM_REQUEST_SIZE_shift);
     R600_OUT_BATCH(0);
     R600_OUT_BATCH(0);
@@ -670,11 +769,11 @@ set_tex_resource(context_t * context,
            SETfield(sq_tex_resource1, FMT_8_8_8_8,
                     SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
 
-           SETfield(sq_tex_resource4, SQ_SEL_1,
+           SETfield(sq_tex_resource4, SQ_SEL_Y,
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
            SETfield(sq_tex_resource4, SQ_SEL_Z,
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
-           SETfield(sq_tex_resource4, SQ_SEL_W,
+           SETfield(sq_tex_resource4, SQ_SEL_1,
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
            SETfield(sq_tex_resource4, SQ_SEL_X,
                     SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
index 492dde9636817690a4ce5a37fcbb684a72eda775..2124f7673d7de16d66d31f35062180d7e54d0a25 100644 (file)
@@ -10,7 +10,11 @@ const uint32_t r6xx_vs[] =
         0x00000000,
         0x3c000000, // SQ_VTX_INST_FETCH BUFFER_ID(0) MEGA_FETCH_COUNT(16)
         0x68cd1000, // DST_GPR(0) DST_SWZ: XYZW DATA_FORMAT(35) SQ_NUM_FORMAT_SCALED SQ_FORMAT_COMP_SIGNED
+#ifdef MESA_BIG_ENDIAN
+               0x000a0000, // ENDIAN_SWAP(SQ_ENDIAN_8IN32) MEGA_FETCH(1)
+#else
         0x00080000, // ENDIAN_SWAP(SQ_ENDIAN_NONE) MEGA_FETCH(1)
+#endif
         0x00000000, // VTX_DWORD_PAD
 };
 
index 00708be19937dbcc667a49a89447f66df86a7c12..1b9676147ee005761138d644e7070082be702aba 100644 (file)
@@ -145,7 +145,6 @@ static const struct dri_extension card_extensions[] = {
   {"GL_ATI_texture_mirror_once",       NULL},
   {"GL_MESA_pack_invert",              NULL},
   {"GL_MESA_ycbcr_texture",            NULL},
-  {"GL_MESAX_texture_float",           NULL},
   {"GL_NV_blend_square",               NULL},
   {"GL_NV_vertex_program",             GL_NV_vertex_program_functions},
   {"GL_ARB_pixel_buffer_object",        NULL},
index 53ece9a3505ac6a84c66de664cd320a2f1fa915c..c6916ed98a31f49045f539995f282ee20a6d7ffd 100644 (file)
@@ -100,14 +100,17 @@ GLboolean r600EmitShaderConsts(struct gl_context * ctx,
                                int sizeinBYTE)
 {      
        struct radeon_bo * pbo = (struct radeon_bo *)constbo;
-       uint8_t *out;
+       uint32_t *out;
+       int i;
 
        radeon_bo_map(pbo, 1);
 
-       out = (uint8_t*)(pbo->ptr);
-    out = (uint8_t*)ADD_POINTERS(pbo->ptr, bo_offset);
+       out = (uint32_t*)(pbo->ptr);
+    out = (uint32_t*)ADD_POINTERS(pbo->ptr, bo_offset);
 
-       memcpy(out, data, sizeinBYTE);
+       for(i = 0; i < sizeinBYTE / 4; i++) {
+               out[i] = CPU_TO_LE32(*((uint32_t *)data + i));
+       }
 
        radeon_bo_unmap(pbo);
 
@@ -123,6 +126,7 @@ GLboolean r600EmitShader(struct gl_context * ctx,
        radeonContextPtr radeonctx = RADEON_CONTEXT(ctx);
        struct radeon_bo * pbo;
        uint32_t *out;
+       int i;
 shader_again_alloc:
        pbo = radeon_bo_open(radeonctx->radeonScreen->bom,
                        0,
@@ -154,7 +158,9 @@ shader_again_alloc:
 
        out = (uint32_t*)(pbo->ptr);
 
-       memcpy(out, data, sizeinDWORD * 4);
+       for(i = 0; i < sizeinDWORD; i++) {
+               out[i] = CPU_TO_LE32(*((uint32_t *)data + i));
+       }
 
        radeon_bo_unmap(pbo);
 
index fe4f0e486613ef5587fe4a80147d00bf202dcce1..eb7ed30c7a369fa974c3e49152e81de5d582b3eb 100644 (file)
@@ -78,15 +78,15 @@ static void r600UpdateTexWrap(radeonTexObjPtr t)
 {
        struct gl_texture_object *tObj = &t->base;
 
-        SETfield(t->SQ_TEX_SAMPLER0, translate_wrap_mode(tObj->WrapS),
+        SETfield(t->SQ_TEX_SAMPLER0, translate_wrap_mode(tObj->Sampler.WrapS),
                  SQ_TEX_SAMPLER_WORD0_0__CLAMP_X_shift, SQ_TEX_SAMPLER_WORD0_0__CLAMP_X_mask);
 
        if (tObj->Target != GL_TEXTURE_1D) {
-               SETfield(t->SQ_TEX_SAMPLER0, translate_wrap_mode(tObj->WrapT),
+               SETfield(t->SQ_TEX_SAMPLER0, translate_wrap_mode(tObj->Sampler.WrapT),
                         CLAMP_Y_shift, CLAMP_Y_mask);
 
                if (tObj->Target == GL_TEXTURE_3D)
-                       SETfield(t->SQ_TEX_SAMPLER0, translate_wrap_mode(tObj->WrapR),
+                       SETfield(t->SQ_TEX_SAMPLER0, translate_wrap_mode(tObj->Sampler.WrapR),
                                 CLAMP_Z_shift, CLAMP_Z_mask);
        }
 }
@@ -292,7 +292,7 @@ static void r600TexParameter(struct gl_context * ctx, GLenum target,
        case GL_TEXTURE_MIN_FILTER:
        case GL_TEXTURE_MAG_FILTER:
        case GL_TEXTURE_MAX_ANISOTROPY_EXT:
-               r600SetTexFilter(t, texObj->MinFilter, texObj->MagFilter, texObj->MaxAnisotropy);
+               r600SetTexFilter(t, texObj->Sampler.MinFilter, texObj->Sampler.MagFilter, texObj->Sampler.MaxAnisotropy);
                break;
 
        case GL_TEXTURE_WRAP_S:
@@ -302,7 +302,7 @@ static void r600TexParameter(struct gl_context * ctx, GLenum target,
                break;
 
        case GL_TEXTURE_BORDER_COLOR:
-               r600SetTexBorderColor(t, texObj->BorderColor.f);
+               r600SetTexBorderColor(t, texObj->Sampler.BorderColor.f);
                break;
 
        case GL_TEXTURE_BASE_LEVEL:
@@ -382,13 +382,13 @@ static struct gl_texture_object *r600NewTextureObject(struct gl_context * ctx,
                        t, _mesa_lookup_enum_by_nr(target));
 
        _mesa_initialize_texture_object(&t->base, name, target);
-       t->base.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
+       t->base.Sampler.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
 
        /* Initialize hardware state */
        r600SetTexDefaultState(t);
        r600UpdateTexWrap(t);
-       r600SetTexFilter(t, t->base.MinFilter, t->base.MagFilter, t->base.MaxAnisotropy);
-       r600SetTexBorderColor(t, t->base.BorderColor.f);
+       r600SetTexFilter(t, t->base.Sampler.MinFilter, t->base.Sampler.MagFilter, t->base.Sampler.MaxAnisotropy);
+       r600SetTexBorderColor(t, t->base.Sampler.BorderColor.f);
 
        return &t->base;
 }
index aafa6875774b124d90f85f355e8941a345b082df..949db29c1892ee2fd581921b28e6ea8edaf305ca 100644 (file)
@@ -109,6 +109,16 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa
                SETfield(t->SQ_TEX_RESOURCE1, FMT_8_8_8_8,
                         SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
@@ -117,6 +127,7 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                if (mesa_format == MESA_FORMAT_SIGNED_RGBA8888) {
                        SETfield(t->SQ_TEX_RESOURCE4, SQ_FORMAT_COMP_SIGNED,
                                 FORMAT_COMP_X_shift, FORMAT_COMP_X_mask);
@@ -133,6 +144,16 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa
                SETfield(t->SQ_TEX_RESOURCE1, FMT_8_8_8_8,
                         SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
@@ -141,6 +162,7 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                if (mesa_format == MESA_FORMAT_SIGNED_RGBA8888_REV) {
                        SETfield(t->SQ_TEX_RESOURCE4, SQ_FORMAT_COMP_SIGNED,
                                 FORMAT_COMP_X_shift, FORMAT_COMP_X_mask);
@@ -156,6 +178,16 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa
                SETfield(t->SQ_TEX_RESOURCE1, FMT_8_8_8_8,
                         SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
@@ -164,11 +196,22 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_XRGB8888:
                SETfield(t->SQ_TEX_RESOURCE1, FMT_8_8_8_8,
                         SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
@@ -177,24 +220,46 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_XRGB8888_REV:
                SETfield(t->SQ_TEX_RESOURCE1, FMT_8_8_8_8,
                         SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
-               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_ARGB8888_REV:
                SETfield(t->SQ_TEX_RESOURCE1, FMT_8_8_8_8,
                         SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
@@ -203,11 +268,22 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_RGB888:
                SETfield(t->SQ_TEX_RESOURCE1, FMT_8_8_8,
                         SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
@@ -216,11 +292,22 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_RGB565:
                SETfield(t->SQ_TEX_RESOURCE1, FMT_5_6_5,
                         SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
@@ -229,11 +316,23 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
+
                break;
        case MESA_FORMAT_RGB565_REV:
                SETfield(t->SQ_TEX_RESOURCE1, FMT_5_6_5,
                         SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+        SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
@@ -242,11 +341,22 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_1,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_ARGB4444:
                SETfield(t->SQ_TEX_RESOURCE1, FMT_4_4_4_4,
                         SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
 
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
@@ -255,11 +365,21 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_ARGB4444_REV:
                SETfield(t->SQ_TEX_RESOURCE1, FMT_4_4_4_4,
                         SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
-
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
@@ -268,11 +388,21 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_ARGB1555:
                SETfield(t->SQ_TEX_RESOURCE1, FMT_1_5_5_5,
                         SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
-
+#ifdef MESA_BIG_ENDIAN
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
@@ -281,11 +411,21 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_ARGB1555_REV:
                SETfield(t->SQ_TEX_RESOURCE1, FMT_1_5_5_5,
                         SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask);
-
+#ifdef MESA_BIG_ENDIAN
+       SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Y_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
+               SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_W,
+                        SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#else
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Y,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_Z,
@@ -294,6 +434,7 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_Z_mask);
                SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
                         SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_W_mask);
+#endif
                break;
        case MESA_FORMAT_AL88:
        case MESA_FORMAT_AL88_REV: /* TODO : Check this. */
@@ -571,7 +712,7 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa
                default:
                        break;
                };
-               switch (tObj->DepthMode) {
+               switch (tObj->Sampler.DepthMode) {
                case GL_LUMINANCE:  /* X, X, X, ONE */
                        SETfield(t->SQ_TEX_RESOURCE4, SQ_SEL_X,
                                 SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_shift, SQ_TEX_RESOURCE_WORD4_0__DST_SEL_X_mask);
@@ -777,18 +918,18 @@ static GLboolean setup_hardware_state(struct gl_context * ctx, struct gl_texture
        SETfield(t->SQ_TEX_RESOURCE5, t->maxLod - t->minLod, LAST_LEVEL_shift, LAST_LEVEL_mask);
 
        SETfield(t->SQ_TEX_SAMPLER1,
-               S_FIXED(CLAMP(t->base.MinLod - t->minLod, 0, 15), 6),
+               S_FIXED(CLAMP(t->base.Sampler.MinLod - t->minLod, 0, 15), 6),
                MIN_LOD_shift, MIN_LOD_mask);
        SETfield(t->SQ_TEX_SAMPLER1,
-               S_FIXED(CLAMP(t->base.MaxLod - t->minLod, 0, 15), 6),
+               S_FIXED(CLAMP(t->base.Sampler.MaxLod - t->minLod, 0, 15), 6),
                MAX_LOD_shift, MAX_LOD_mask);
        SETfield(t->SQ_TEX_SAMPLER1,
-               S_FIXED(CLAMP(ctx->Texture.Unit[unit].LodBias + t->base.LodBias, -16, 16), 6),
+               S_FIXED(CLAMP(ctx->Texture.Unit[unit].LodBias + t->base.Sampler.LodBias, -16, 16), 6),
                SQ_TEX_SAMPLER_WORD1_0__LOD_BIAS_shift, SQ_TEX_SAMPLER_WORD1_0__LOD_BIAS_mask);
 
-       if(texObj->CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB)
+       if(texObj->Sampler.CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB)
        {
-               SETfield(t->SQ_TEX_SAMPLER0, r600_translate_shadow_func(texObj->CompareFunc), DEPTH_COMPARE_FUNCTION_shift, DEPTH_COMPARE_FUNCTION_mask);
+               SETfield(t->SQ_TEX_SAMPLER0, r600_translate_shadow_func(texObj->Sampler.CompareFunc), DEPTH_COMPARE_FUNCTION_shift, DEPTH_COMPARE_FUNCTION_mask);
        }
        else
        {
index 024853c1beb160a7503a83d7d8b52fb2f17614df..216ff0b941c59097de625b058a928093ceb76f1b 100644 (file)
@@ -259,6 +259,7 @@ GLboolean is_reduction_opcode(PVSDWORD* dest)
     return GL_FALSE;
 }
 
+#if 0 /* unused */
 GLboolean EG_is_reduction_opcode(PVSDWORD* dest)
 {
     if (dest->dst.op3 == 0) 
@@ -270,6 +271,7 @@ GLboolean EG_is_reduction_opcode(PVSDWORD* dest)
     }
     return GL_FALSE;
 }
+#endif
 
 GLuint GetSurfaceFormat(GLenum eType, GLuint nChannels, GLuint * pClient_size)
 {
@@ -1186,7 +1188,12 @@ GLboolean EG_assemble_vfetch_instruction(r700_AssemblerBase* pAsm,
     SETfield(vfetch_instruction_ptr->m_Word2.val, 0,
              EG_VTX_WORD2__OFFSET_shift,
              EG_VTX_WORD2__OFFSET_mask); 
-    SETfield(vfetch_instruction_ptr->m_Word2.val, SQ_ENDIAN_NONE,
+    SETfield(vfetch_instruction_ptr->m_Word2.val, 
+#ifdef MESA_BIG_ENDIAN
+                        SQ_ENDIAN_8IN32,
+#else
+                        SQ_ENDIAN_NONE,
+#endif
              EG_VTX_WORD2__ENDIAN_SWAP_shift,
              EG_VTX_WORD2__ENDIAN_SWAP_mask);
     SETfield(vfetch_instruction_ptr->m_Word2.val, 0,
@@ -1292,7 +1299,11 @@ GLboolean assemble_vfetch_instruction2(r700_AssemblerBase* pAsm,
 
        vfetch_instruction_ptr->m_Word1.f.use_const_fields = 1;
     vfetch_instruction_ptr->m_Word1.f.data_format      = data_format;
+#ifdef MESA_BIG_ENDIAN
+    vfetch_instruction_ptr->m_Word2.f.endian_swap      = SQ_ENDIAN_8IN32;
+#else
     vfetch_instruction_ptr->m_Word2.f.endian_swap      = SQ_ENDIAN_NONE;
+#endif
 
     if(1 == _signed)
     {
index c7c7ab2d4ffecab29faa7443f47f629435dfd8ff..8a9ccd1c4ecab9f33c7702bafc28f1e607b656eb 100644 (file)
@@ -130,6 +130,27 @@ typedef unsigned int BITS;
 
 typedef struct PVSDSTtag 
 {
+#ifdef MESA_BIG_ENDIAN
+       BITS addrmode1:1; //32
+       BITS addrmode0:1; //31   //29
+
+       BITS dualop:1;    // 30  //26
+
+       BITS op3:1;       // 29  Represents *_OP3_* ALU opcode
+
+       BITS writew:1;     //28
+       BITS writez:1;
+       BITS writey:1;
+       BITS writex:1;
+
+       BITS reg:10;       //24   //20
+       BITS rtype:3;
+
+       BITS pred_inv  :1; //11   //8
+       BITS predicated:1; //10   //8
+       BITS math:1;
+       BITS opcode:8;     //(:6)  //@@@ really should be 10 bits for OP2
+#else
        BITS opcode:8;     //(:6)  //@@@ really should be 10 bits for OP2
        BITS math:1;
        BITS predicated:1; //10   //8
@@ -149,17 +170,41 @@ typedef struct PVSDSTtag
 
        BITS addrmode0:1; //31   //29
        BITS addrmode1:1; //32
+#endif
 } PVSDST;
 
 typedef struct PVSINSTtag
 {
+#ifdef MESA_BIG_ENDIAN
+    BITS index_mode   :3;
+    BITS SaturateMode :2; 
+    BITS literal_slots      :2; 
+#else
     BITS literal_slots      :2; 
     BITS SaturateMode :2; 
     BITS index_mode   :3;
+#endif
 } PVSINST;
 
 typedef struct PVSSRCtag 
 {
+#ifdef MESA_BIG_ENDIAN
+       BITS addrmode1:1; //32
+       //BITS addrsel:2;
+       BITS negw:1;      //31
+       BITS negz:1;
+       BITS negy:1;
+       BITS negx:1;
+       BITS abs:1;
+
+       BITS swizzlew:3;  //26        
+       BITS swizzlez:3;
+       BITS swizzley:3;
+       BITS swizzlex:3;
+       BITS reg:10;      //14     (8)
+       BITS addrmode0:1;        
+       BITS rtype:3;            
+#else
        BITS rtype:3;            
        BITS addrmode0:1;        
        BITS reg:10;      //14     (8)
@@ -175,10 +220,24 @@ typedef struct PVSSRCtag
        BITS negw:1;      //31
        //BITS addrsel:2;
        BITS addrmode1:1; //32
+#endif
 } PVSSRC;
 
 typedef struct PVSMATHtag 
 {
+#ifdef MESA_BIG_ENDIAN
+       BITS spare2:3;
+       BITS dstcomp:2; // select dest component
+       BITS negy:1;
+       BITS negx:1;
+       BITS opcode:4;
+       BITS dstoff:2; // 2 bits of dest offset into alt ram
+       BITS swizzley:3;
+       BITS swizzlex:3;
+       BITS reg:8;
+       BITS spare:1;
+       BITS rtype:4;
+#else
        BITS rtype:4;
        BITS spare:1;
        BITS reg:8;
@@ -190,6 +249,7 @@ typedef struct PVSMATHtag
        BITS negy:1;
        BITS dstcomp:2; // select dest component
        BITS spare2:3;
+#endif
 } PVSMATH;
 
 typedef union PVSDWORDtag 
@@ -204,6 +264,34 @@ typedef union PVSDWORDtag
 
 typedef struct VAP_OUT_VTX_FMT_0tag 
 {
+#ifdef MESA_BIG_ENDIAN
+       BITS resvd1:12;        // 20
+
+       BITS viewport_index:1; // 19   
+       BITS kill_flag:1;
+       BITS rta_index:1;      //     shares same channel as kill_flag
+       BITS edge_flag:1;      
+       BITS point_size:1;     // 15   
+
+       BITS depth:1;          // 14
+
+       BITS normal:1;    
+
+       BITS color7:1;
+       BITS color6:1;
+       BITS color5:1;
+       BITS color4:1;
+       BITS color3:1;
+       BITS color2:1;
+       BITS color1:1;
+       BITS color0:1;
+
+       BITS pos_param:1; // 4
+       BITS clip_dist1:1;
+       BITS clip_dist0:1;
+       BITS misc:1;
+       BITS pos:1;      // 0
+#else
        BITS pos:1;      // 0
        BITS misc:1;
        BITS clip_dist0:1;
@@ -230,10 +318,23 @@ typedef struct VAP_OUT_VTX_FMT_0tag
        BITS viewport_index:1; // 19   
 
        BITS resvd1:12;        // 20
+#endif
 } VAP_OUT_VTX_FMT_0;
 
 typedef struct VAP_OUT_VTX_FMT_1tag 
 {
+#ifdef MESA_BIG_ENDIAN
+       BITS resvd:8;
+
+       BITS tex7comp:3;
+       BITS tex6comp:3;
+       BITS tex5comp:3;
+       BITS tex4comp:3;
+       BITS tex3comp:3;
+       BITS tex2comp:3;
+       BITS tex1comp:3;
+       BITS tex0comp:3;
+#else
        BITS tex0comp:3;
        BITS tex1comp:3;
        BITS tex2comp:3;
@@ -244,10 +345,23 @@ typedef struct VAP_OUT_VTX_FMT_1tag
        BITS tex7comp:3;
 
        BITS resvd:8;
+#endif
 } VAP_OUT_VTX_FMT_1;
 
 typedef struct VAP_OUT_VTX_FMT_2tag 
 {
+#ifdef MESA_BIG_ENDIAN
+       BITS resvd:8;
+
+       BITS tex15comp:3;
+       BITS tex14comp:3;
+       BITS tex13comp:3;
+       BITS tex12comp:3;
+       BITS tex11comp:3;
+       BITS tex10comp:3;
+       BITS tex9comp:3;
+       BITS tex8comp:3;
+#else
        BITS tex8comp :3;
        BITS tex9comp :3;
        BITS tex10comp:3;
@@ -258,10 +372,28 @@ typedef struct VAP_OUT_VTX_FMT_2tag
        BITS tex15comp:3;
 
        BITS resvd:8;
+#endif
 } VAP_OUT_VTX_FMT_2;
 
 typedef struct OUT_FRAGMENT_FMT_0tag 
 {
+#ifdef MESA_BIG_ENDIAN
+       BITS resvd1:20;
+
+       BITS mask:1;
+       BITS coverage_to_mask:1;
+       BITS stencil_ref:1;
+       BITS depth:1;
+
+       BITS color7:1;
+       BITS color6:1;
+       BITS color5:1;
+       BITS color4:1;
+       BITS color3:1;
+       BITS color2:1;
+       BITS color1:1;
+       BITS color0:1;
+#else
        BITS color0:1;
        BITS color1:1;
        BITS color2:1;
@@ -277,6 +409,7 @@ typedef struct OUT_FRAGMENT_FMT_0tag
        BITS mask:1;
 
        BITS resvd1:20;
+#endif
 } OUT_FRAGMENT_FMT_0;
 
 typedef enum  CF_CLAUSE_TYPE 
index 4ec2845ab443a7fc53aa81d20985b929fab0da48..10fa3f9762bef0489fe37ced6e8256599b5281cb 100644 (file)
@@ -202,7 +202,15 @@ static void r700SetupVTXConstants(struct gl_context  * ctx,
     SETfield(uSQ_VTX_CONSTANT_WORD2_0, GetSurfaceFormat(pStreamDesc->type, pStreamDesc->size, NULL),
             SQ_VTX_CONSTANT_WORD2_0__DATA_FORMAT_shift,
             SQ_VTX_CONSTANT_WORD2_0__DATA_FORMAT_mask); /* TODO : trace back api for initial data type, not only GL_FLOAT */
-    
+       SETfield(uSQ_VTX_CONSTANT_WORD2_0, 
+#ifdef MESA_BIG_ENDIAN 
+                        SQ_ENDIAN_8IN32,
+#else
+                        SQ_ENDIAN_NONE,
+#endif
+             SQ_VTX_CONSTANT_WORD2_0__ENDIAN_SWAP_shift,
+             SQ_VTX_CONSTANT_WORD2_0__ENDIAN_SWAP_mask);
+
     if(GL_TRUE == pStreamDesc->normalize)
     {
         SETfield(uSQ_VTX_CONSTANT_WORD2_0, SQ_NUM_FORMAT_NORM,
@@ -249,6 +257,7 @@ static void r700SendVTXState(struct gl_context *ctx, struct radeon_state_atom *a
     struct r700_vertex_program *vp = context->selected_vp;
     unsigned int i, j = 0;
     BATCH_LOCALS(&context->radeon);
+    (void) b_l_rmesa; /* silence unused var warning */
        radeon_print(RADEON_STATE, RADEON_VERBOSE, "%s\n", __func__);
 
     if (context->radeon.tcl.aos_count == 0)
index bb14a239b774e78937cba1c9f476e738225c4ed0..2bd3b62bfdbf24dee011ed9649f360ac14536930 100644 (file)
@@ -276,6 +276,16 @@ static void r700RunRenderPrimitive(struct gl_context * ctx, int start, int end,
             SETfield(vgt_index_type, DI_INDEX_SIZE_16_BIT, INDEX_TYPE_shift, INDEX_TYPE_mask);
     }
 
+       /* 16-bit indexes are packed in a 32-bit value */
+       SETfield(vgt_index_type,
+#if MESA_BIG_ENDIAN
+                       VGT_DMA_SWAP_32_BIT,
+#else
+                       VGT_DMA_SWAP_NONE,
+#endif
+                       SWAP_MODE_shift, SWAP_MODE_mask);
+
+
     vgt_num_indices = num_indices;
     SETfield(vgt_draw_initiator, DI_SRC_SEL_DMA, SOURCE_SELECT_shift, SOURCE_SELECT_mask);
     SETfield(vgt_draw_initiator, DI_MAJOR_MODE_0, MAJOR_MODE_shift, MAJOR_MODE_mask);
@@ -348,6 +358,15 @@ static void r700RunRenderPrimitiveImmediate(struct gl_context * ctx, int start,
             SETfield(vgt_index_type, DI_INDEX_SIZE_16_BIT, INDEX_TYPE_shift, INDEX_TYPE_mask);
     }
 
+       /* 16-bit indexes are packed in a 32-bit value */
+       SETfield(vgt_index_type,
+#if MESA_BIG_ENDIAN
+                       VGT_DMA_SWAP_32_BIT,
+#else
+                       VGT_DMA_SWAP_NONE,
+#endif
+                       SWAP_MODE_shift, SWAP_MODE_mask);
+
     vgt_num_indices = num_indices;
     SETfield(vgt_draw_initiator, DI_MAJOR_MODE_0, MAJOR_MODE_shift, MAJOR_MODE_mask);
 
@@ -580,6 +599,7 @@ static void r700ConvertAttrib(struct gl_context *ctx, int count,
     }
 }
 
+#if 0 /* unused */
 static void r700AlignDataToDword(struct gl_context *ctx, 
                                  const struct gl_client_array *input, 
                                  int count, 
@@ -621,6 +641,7 @@ static void r700AlignDataToDword(struct gl_context *ctx,
 
     attr->stride = dst_stride;
 }
+#endif
 
 static void r700SetupStreams(struct gl_context *ctx, const struct gl_client_array *input[], int count)
 {
index 60f104960261a283433b005df608ab338d0ef0a1..607b7470d4b03367e64192896d590126df53e9a1 100644 (file)
@@ -1,6 +1,10 @@
 #ifndef RADEON_CS_WRAPPER_H
 #define RADEON_CS_WRAPPER_H
 
+/* to be used to build locally in mesa with no libdrm bits */
+#include "../radeon/radeon_bo_drm.h"
+#include "../radeon/radeon_cs_drm.h"
+
 #ifdef HAVE_LIBDRM_RADEON
 
 #include "radeon_bo.h"
                                   * when mapped - i.e. front buffer */
 #endif
 
-/* to be used to build locally in mesa with no libdrm bits */
-#include "../radeon/radeon_bo_drm.h"
-#include "../radeon/radeon_cs_drm.h"
-
 #ifndef DRM_RADEON_GEM_INFO
 #define DRM_RADEON_GEM_INFO 0x1c
 
index bd6f1c79504663c9bff1fe855d6c8f64131b4b00..88b68e3d191093f7498e91d07b78e6c7db852e5e 100644 (file)
 #define PCI_CHIP_PALM_9803              0x9803
 #define PCI_CHIP_PALM_9804              0x9804
 #define PCI_CHIP_PALM_9805              0x9805
+#define PCI_CHIP_PALM_9806              0x9806
+#define PCI_CHIP_PALM_9807              0x9807
 
 #define PCI_CHIP_BARTS_6720             0x6720
 #define PCI_CHIP_BARTS_6721             0x6721
index 0d73c0e3b1ba49404d46f8a86860f9ae78c6a5f8..bfc307ca98783113af12ee9289100498afc54c90 100644 (file)
@@ -966,7 +966,7 @@ static void radeon_print_state_atom(radeonContextPtr radeon, struct radeon_state
 
        fprintf(stderr, "  emit %s %d/%d\n", state->name, dwords, state->cmd_size);
 
-       if (radeon_is_debug_enabled(RADEON_STATE, RADEON_TRACE)) {
+       if (state->cmd && radeon_is_debug_enabled(RADEON_STATE, RADEON_TRACE)) {
                if (dwords > state->cmd_size)
                        dwords = state->cmd_size;
                for (i = 0; i < dwords;) {
index 405aecb19ecd242d70fedad113b82c8f2dd89253..5d7b3973d57d487c5836f4c086ea7c7f5e7c236c 100644 (file)
@@ -47,8 +47,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "swrast_setup/swrast_setup.h"
 #include "tnl/tnl.h"
 
-#define DRIVER_DATE "20090101"
-
 #ifndef RADEON_DEBUG
 int RADEON_DEBUG = (0);
 #endif
@@ -146,8 +144,7 @@ static const GLubyte *radeonGetString(struct gl_context * ctx, GLenum name)
                        get_chip_family_name(radeon->radeonScreen->chip_family),
                        radeon->radeonScreen->device_id);
 
-               offset = driGetRendererString(buffer, hardwarename, DRIVER_DATE,
-                                             agp_mode);
+               offset = driGetRendererString(buffer, hardwarename, agp_mode);
 
                if (IS_R600_CLASS(radeon->radeonScreen)) {
                        sprintf(&buffer[offset], " TCL");
index 154a8815e4a6c958ea1f4d251fa938a0c6b27e60..4d41e99df5d0f0585a53b3f161d42057f476a021 100644 (file)
@@ -70,8 +70,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define need_GL_OES_EGL_image
 #include "main/remap_helper.h"
 
-#define DRIVER_DATE    "20061018"
-
 #include "utils.h"
 #include "xmlpool.h" /* for symbolic values of enum-type options */
 
index ef8b9671ac96835758cb3a977553171eaf40ef3d..449c27a3fe104bffd115cda5b62b3ca318721bff 100644 (file)
@@ -110,30 +110,30 @@ extern void _radeon_print(const radeon_debug_type_t type,
  * Print out debug message if channel specified by type is enabled
  * and compile time debugging level is at least as high as level parameter
  */
-#define radeon_print(type, level, message, ...) do {           \
+#define radeon_print(type, level, ...) do {                    \
        const radeon_debug_level_t _debug_level = (level);      \
        const radeon_debug_type_t _debug_type = (type);         \
        /* Compile out if level of message is too high */       \
        if (radeon_is_debug_enabled(type, level)) {             \
                _radeon_print(_debug_type, _debug_level,        \
-                       (message), ## __VA_ARGS__);             \
+                       __VA_ARGS__);                           \
        }                                                       \
 } while(0)
 
 /**
  * printf style function for writing error messages.
  */
-#define radeon_error(message, ...) do {                                \
+#define radeon_error(...) do {                                 \
        radeon_print(RADEON_GENERAL, RADEON_CRITICAL,           \
-               (message), ## __VA_ARGS__);                     \
+               __VA_ARGS__);                                   \
 } while(0)
 
 /**
  * printf style function for writing warnings.
  */
-#define radeon_warning(message, ...) do {                      \
+#define radeon_warning(...) do {                               \
        radeon_print(RADEON_GENERAL, RADEON_IMPORTANT,          \
-               (message), ## __VA_ARGS__);                     \
+               __VA_ARGS__);                                   \
 } while(0)
 
 extern void radeon_init_debug(void);
@@ -158,13 +158,13 @@ static inline void radeon_debug_remove_indent(void)
    I suppose we could inline this and use macro to fetch out __LINE__ and stuff in case we run into trouble
    with other compilers ... GLUE!
 */
-#define WARN_ONCE(a, ...)      do { \
+#define WARN_ONCE(...)      do { \
        static int __warn_once=1; \
        if(__warn_once){ \
                radeon_warning("*********************************WARN_ONCE*********************************\n"); \
                radeon_warning("File %s function %s line %d\n", \
                        __FILE__, __FUNCTION__, __LINE__); \
-               radeon_warning(  (a), ## __VA_ARGS__);\
+               radeon_warning(__VA_ARGS__);\
                radeon_warning("***************************************************************************\n"); \
                __warn_once=0;\
                } \
index 1fadad2756b761160ea0332f7d744359012b2cb7..03d9b2643678b7220767450e10d0188ae9989c5e 100644 (file)
@@ -296,15 +296,15 @@ static void calculate_min_max_lod(struct gl_texture_object *tObj,
        case GL_TEXTURE_2D:
        case GL_TEXTURE_3D:
        case GL_TEXTURE_CUBE_MAP:
-               if (tObj->MinFilter == GL_NEAREST || tObj->MinFilter == GL_LINEAR) {
+               if (tObj->Sampler.MinFilter == GL_NEAREST || tObj->Sampler.MinFilter == GL_LINEAR) {
                        /* GL_NEAREST and GL_LINEAR only care about GL_TEXTURE_BASE_LEVEL.
                        */
                        minLod = maxLod = tObj->BaseLevel;
                } else {
-                       minLod = tObj->BaseLevel + (GLint)(tObj->MinLod);
+                       minLod = tObj->BaseLevel + (GLint)(tObj->Sampler.MinLod);
                        minLod = MAX2(minLod, tObj->BaseLevel);
                        minLod = MIN2(minLod, tObj->MaxLevel);
-                       maxLod = tObj->BaseLevel + (GLint)(tObj->MaxLod + 0.5);
+                       maxLod = tObj->BaseLevel + (GLint)(tObj->Sampler.MaxLod + 0.5);
                        maxLod = MIN2(maxLod, tObj->MaxLevel);
                        maxLod = MIN2(maxLod, tObj->Image[0][minLod]->MaxLog2 + minLod);
                        maxLod = MAX2(maxLod, minLod); /* need at least one level */
index 56c5959b0aa12fb97da5ac610700add65842c15a..732efe8bd85fe45ab1b97e6327e5fbe439b21067 100644 (file)
@@ -401,12 +401,12 @@ static const struct __DRI2flushExtensionRec radeonFlushExtension = {
 };
 
 static __DRIimage *
-radeon_create_image_from_name(__DRIcontext *context,
+radeon_create_image_from_name(__DRIscreen *screen,
                               int width, int height, int format,
                               int name, int pitch, void *loaderPrivate)
 {
    __DRIimage *image;
-   radeonContextPtr radeon = context->driverPrivate;
+   radeonScreenPtr radeonScreen = screen->private;
 
    if (name == 0)
       return NULL;
@@ -442,7 +442,7 @@ radeon_create_image_from_name(__DRIcontext *context,
    image->pitch = pitch;
    image->height = height;
 
-   image->bo = radeon_bo_open(radeon->radeonScreen->bom,
+   image->bo = radeon_bo_open(radeonScreen->bom,
                               (uint32_t)name,
                               image->pitch * image->height * image->cpp,
                               0,
@@ -1158,6 +1158,8 @@ static int radeon_set_screen_flags(radeonScreenPtr screen, int device_id)
     case PCI_CHIP_PALM_9803:
     case PCI_CHIP_PALM_9804:
     case PCI_CHIP_PALM_9805:
+    case PCI_CHIP_PALM_9806:
+    case PCI_CHIP_PALM_9807:
        screen->chip_family = CHIP_FAMILY_PALM;
        screen->chip_flags = RADEON_CHIPSET_TCL;
        break;
index caf3f253d2ae1515e08a93179b0f8560e65a2fa3..8c6f2e49a5c568e0a926734b0e85398e2db51764 100644 (file)
@@ -50,6 +50,17 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #define DBG 0
 
+#if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && BYTE_ORDER == BIG_ENDIAN
+#if defined(__linux__)
+#include <byteswap.h>
+#define CPU_TO_LE16( x )       bswap_16( x )
+#define LE16_TO_CPU( x )       bswap_16( x )
+#endif /* __linux__ */
+#else
+#define CPU_TO_LE16( x )       ( x )
+#define LE16_TO_CPU( x )       ( x )
+#endif
+
 static void radeonSetSpanFunctions(struct radeon_renderbuffer *rrb);
 
 
@@ -579,7 +590,11 @@ static GLubyte *radeon_ptr_2byte_8x2(const struct radeon_renderbuffer * rrb,
 #define TAG(x)    radeon##x##_RGB565
 #define TAG2(x,y) radeon##x##_RGB565##y
 #if defined(RADEON_R600)
-#define GET_PTR(X,Y) r600_ptr_color(rrb, (X) + x_off, (Y) + y_off)
+#define GET_VALUE(_x, _y) (LE16_TO_CPU(*(GLushort*)(r600_ptr_color(rrb, _x + x_off, _y + y_off))))
+#define PUT_VALUE(_x, _y, d) { \
+   GLushort *_ptr = (GLushort*)r600_ptr_color( rrb, _x + x_off, _y + y_off );          \
+   *_ptr = CPU_TO_LE16(d);                                                             \
+} while (0)
 #else
 #define GET_PTR(X,Y) radeon_ptr_2byte_8x2(rrb, (X) + x_off, (Y) + y_off)
 #endif
@@ -591,7 +606,11 @@ static GLubyte *radeon_ptr_2byte_8x2(const struct radeon_renderbuffer * rrb,
 #define TAG(x)    radeon##x##_RGB565_REV
 #define TAG2(x,y) radeon##x##_RGB565_REV##y
 #if defined(RADEON_R600)
-#define GET_PTR(X,Y) r600_ptr_color(rrb, (X) + x_off, (Y) + y_off)
+#define GET_VALUE(_x, _y) (LE16_TO_CPU(*(GLushort*)(r600_ptr_color(rrb, _x + x_off, _y + y_off))))
+#define PUT_VALUE(_x, _y, d) { \
+   GLushort *_ptr = (GLushort*)r600_ptr_color( rrb, _x + x_off, _y + y_off );          \
+   *_ptr = CPU_TO_LE16(d);                                                             \
+} while (0)
 #else
 #define GET_PTR(X,Y) radeon_ptr_2byte_8x2(rrb, (X) + x_off, (Y) + y_off)
 #endif
@@ -605,7 +624,11 @@ static GLubyte *radeon_ptr_2byte_8x2(const struct radeon_renderbuffer * rrb,
 #define TAG(x)    radeon##x##_ARGB1555
 #define TAG2(x,y) radeon##x##_ARGB1555##y
 #if defined(RADEON_R600)
-#define GET_PTR(X,Y) r600_ptr_color(rrb, (X) + x_off, (Y) + y_off)
+#define GET_VALUE(_x, _y) (LE16_TO_CPU(*(GLushort*)(r600_ptr_color(rrb, _x + x_off, _y + y_off))))
+#define PUT_VALUE(_x, _y, d) { \
+   GLushort *_ptr = (GLushort*)r600_ptr_color( rrb, _x + x_off, _y + y_off );          \
+   *_ptr = CPU_TO_LE16(d);                                                             \
+} while (0)
 #else
 #define GET_PTR(X,Y) radeon_ptr_2byte_8x2(rrb, (X) + x_off, (Y) + y_off)
 #endif
@@ -617,7 +640,11 @@ static GLubyte *radeon_ptr_2byte_8x2(const struct radeon_renderbuffer * rrb,
 #define TAG(x)    radeon##x##_ARGB1555_REV
 #define TAG2(x,y) radeon##x##_ARGB1555_REV##y
 #if defined(RADEON_R600)
-#define GET_PTR(X,Y) r600_ptr_color(rrb, (X) + x_off, (Y) + y_off)
+#define GET_VALUE(_x, _y) (LE16_TO_CPU(*(GLushort*)(r600_ptr_color(rrb, _x + x_off, _y + y_off))))
+#define PUT_VALUE(_x, _y, d) { \
+   GLushort *_ptr = (GLushort*)r600_ptr_color( rrb, _x + x_off, _y + y_off );          \
+   *_ptr = CPU_TO_LE16(d);                                                             \
+} while (0)
 #else
 #define GET_PTR(X,Y) radeon_ptr_2byte_8x2(rrb, (X) + x_off, (Y) + y_off)
 #endif
@@ -631,7 +658,11 @@ static GLubyte *radeon_ptr_2byte_8x2(const struct radeon_renderbuffer * rrb,
 #define TAG(x)    radeon##x##_ARGB4444
 #define TAG2(x,y) radeon##x##_ARGB4444##y
 #if defined(RADEON_R600)
-#define GET_PTR(X,Y) r600_ptr_color(rrb, (X) + x_off, (Y) + y_off)
+#define GET_VALUE(_x, _y) (LE16_TO_CPU(*(GLushort*)(r600_ptr_color(rrb, _x + x_off, _y + y_off))))
+#define PUT_VALUE(_x, _y, d) { \
+   GLushort *_ptr = (GLushort*)r600_ptr_color( rrb, _x + x_off, _y + y_off );          \
+   *_ptr = CPU_TO_LE16(d);                                                             \
+} while (0)
 #else
 #define GET_PTR(X,Y) radeon_ptr_2byte_8x2(rrb, (X) + x_off, (Y) + y_off)
 #endif
@@ -643,7 +674,11 @@ static GLubyte *radeon_ptr_2byte_8x2(const struct radeon_renderbuffer * rrb,
 #define TAG(x)    radeon##x##_ARGB4444_REV
 #define TAG2(x,y) radeon##x##_ARGB4444_REV##y
 #if defined(RADEON_R600)
-#define GET_PTR(X,Y) r600_ptr_color(rrb, (X) + x_off, (Y) + y_off)
+#define GET_VALUE(_x, _y) (LE16_TO_CPU(*(GLushort*)(r600_ptr_color(rrb, _x + x_off, _y + y_off))))
+#define PUT_VALUE(_x, _y, d) { \
+   GLushort *_ptr = (GLushort*)r600_ptr_color( rrb, _x + x_off, _y + y_off );          \
+   *_ptr = CPU_TO_LE16(d);                                                             \
+} while (0)
 #else
 #define GET_PTR(X,Y) radeon_ptr_2byte_8x2(rrb, (X) + x_off, (Y) + y_off)
 #endif
@@ -657,10 +692,10 @@ static GLubyte *radeon_ptr_2byte_8x2(const struct radeon_renderbuffer * rrb,
 #define TAG(x)    radeon##x##_xRGB8888
 #define TAG2(x,y) radeon##x##_xRGB8888##y
 #if defined(RADEON_R600)
-#define GET_VALUE(_x, _y) ((*(GLuint*)(r600_ptr_color(rrb, _x + x_off, _y + y_off)) | 0xff000000))
+#define GET_VALUE(_x, _y) ((LE32_TO_CPU(*(GLuint*)(r600_ptr_color(rrb, _x + x_off, _y + y_off))) | 0xff000000))
 #define PUT_VALUE(_x, _y, d) { \
    GLuint *_ptr = (GLuint*)r600_ptr_color( rrb, _x + x_off, _y + y_off );              \
-   *_ptr = d;                                                          \
+   *_ptr = CPU_TO_LE32(d);                                                             \
 } while (0)
 #else
 #define GET_VALUE(_x, _y) ((*(GLuint*)(radeon_ptr_4byte(rrb, _x + x_off, _y + y_off)) | 0xff000000))
@@ -679,10 +714,10 @@ static GLubyte *radeon_ptr_2byte_8x2(const struct radeon_renderbuffer * rrb,
 #define TAG(x)    radeon##x##_ARGB8888
 #define TAG2(x,y) radeon##x##_ARGB8888##y
 #if defined(RADEON_R600)
-#define GET_VALUE(_x, _y) (*(GLuint*)(r600_ptr_color(rrb, _x + x_off, _y + y_off)))
+#define GET_VALUE(_x, _y) (LE32_TO_CPU(*(GLuint*)(r600_ptr_color(rrb, _x + x_off, _y + y_off))))
 #define PUT_VALUE(_x, _y, d) { \
    GLuint *_ptr = (GLuint*)r600_ptr_color( rrb, _x + x_off, _y + y_off );              \
-   *_ptr = d;                                                          \
+   *_ptr = CPU_TO_LE32(d);                                                             \
 } while (0)
 #else
 #define GET_VALUE(_x, _y) (*(GLuint*)(radeon_ptr_4byte(rrb, _x + x_off, _y + y_off)))
@@ -701,10 +736,10 @@ static GLubyte *radeon_ptr_2byte_8x2(const struct radeon_renderbuffer * rrb,
 #define TAG(x)    radeon##x##_BGRx8888
 #define TAG2(x,y) radeon##x##_BGRx8888##y
 #if defined(RADEON_R600)
-#define GET_VALUE(_x, _y) ((*(GLuint*)(r600_ptr_color(rrb, _x + x_off, _y + y_off)) | 0x000000ff))
+#define GET_VALUE(_x, _y) ((LE32_TO_CPU(*(GLuint*)(r600_ptr_color(rrb, _x + x_off, _y + y_off))) | 0x000000ff))
 #define PUT_VALUE(_x, _y, d) { \
    GLuint *_ptr = (GLuint*)r600_ptr_color( rrb, _x + x_off, _y + y_off );              \
-   *_ptr = d;                                                          \
+   *_ptr = CPU_TO_LE32(d);                                                             \
 } while (0)
 #else
 #define GET_VALUE(_x, _y) ((*(GLuint*)(radeon_ptr_4byte(rrb, _x + x_off, _y + y_off)) | 0x000000ff))
@@ -723,7 +758,11 @@ static GLubyte *radeon_ptr_2byte_8x2(const struct radeon_renderbuffer * rrb,
 #define TAG(x)    radeon##x##_BGRA8888
 #define TAG2(x,y) radeon##x##_BGRA8888##y
 #if defined(RADEON_R600)
-#define GET_PTR(X,Y) r600_ptr_color(rrb, (X) + x_off, (Y) + y_off)
+#define GET_VALUE(_x, _y) (LE32_TO_CPU(*(GLuint*)(r600_ptr_color(rrb, _x + x_off, _y + y_off))))
+#define PUT_VALUE(_x, _y, d) { \
+   GLuint *_ptr = (GLuint*)r600_ptr_color( rrb, _x + x_off, _y + y_off );              \
+   *_ptr = CPU_TO_LE32(d);                                                             \
+} while (0)
 #else
 #define GET_PTR(X,Y) radeon_ptr_4byte(rrb, (X) + x_off, (Y) + y_off)
 #endif
@@ -752,7 +791,7 @@ static GLubyte *radeon_ptr_2byte_8x2(const struct radeon_renderbuffer * rrb,
    *(GLushort *)r200_depth_2byte(rrb, _x + x_off, _y + y_off) = d
 #elif defined(RADEON_R600)
 #define WRITE_DEPTH( _x, _y, d )                                       \
-   *(GLushort *)r600_ptr_depth(rrb, _x + x_off, _y + y_off) = d
+   *(GLushort *)r600_ptr_depth(rrb, _x + x_off, _y + y_off) = CPU_TO_LE16(d)
 #else
 #define WRITE_DEPTH( _x, _y, d )                                       \
    *(GLushort *)radeon_ptr_2byte_8x2(rrb, _x + x_off, _y + y_off) = d
@@ -763,7 +802,7 @@ static GLubyte *radeon_ptr_2byte_8x2(const struct radeon_renderbuffer * rrb,
    d = *(GLushort *)r200_depth_2byte(rrb, _x + x_off, _y + y_off)
 #elif defined(RADEON_R600)
 #define READ_DEPTH( d, _x, _y )                                                \
-   d = *(GLushort *)r600_ptr_depth(rrb, _x + x_off, _y + y_off)
+   d = LE16_TO_CPU(*(GLushort *)r600_ptr_depth(rrb, _x + x_off, _y + y_off))
 #else
 #define READ_DEPTH( d, _x, _y )                                                \
    d = *(GLushort *)radeon_ptr_2byte_8x2(rrb, _x + x_off, _y + y_off)
@@ -792,10 +831,10 @@ do {                                                                      \
 #define WRITE_DEPTH( _x, _y, d )                                       \
 do {                                                                   \
    GLuint *_ptr = (GLuint*)r600_ptr_depth( rrb, _x + x_off, _y + y_off );              \
-   GLuint tmp = *_ptr;                         \
+   GLuint tmp = LE32_TO_CPU(*_ptr);                            \
    tmp &= 0xff000000;                                                  \
    tmp |= ((d) & 0x00ffffff);                                  \
-   *_ptr = tmp;                                        \
+   *_ptr = CPU_TO_LE32(tmp);                                   \
 } while (0)
 #elif defined(RADEON_R200)
 #define WRITE_DEPTH( _x, _y, d )                                       \
@@ -825,7 +864,7 @@ do {                                                                        \
 #elif defined(RADEON_R600)
 #define READ_DEPTH( d, _x, _y )                                                \
   do {                                                                 \
-    d = (*(GLuint*)(r600_ptr_depth(rrb, _x + x_off, _y + y_off)) & 0x00ffffff); \
+    d = (LE32_TO_CPU(*(GLuint*)(r600_ptr_depth(rrb, _x + x_off, _y + y_off))) & 0x00ffffff); \
   }while(0)
 #elif defined(RADEON_R200)
 #define READ_DEPTH( d, _x, _y )                                                \
@@ -858,15 +897,15 @@ do {                                                                      \
 #define WRITE_DEPTH( _x, _y, d )                                       \
 do {                                                                   \
    GLuint *_ptr = (GLuint*)r600_ptr_depth( rrb, _x + x_off, _y + y_off );              \
-   GLuint tmp = *_ptr;                         \
+   GLuint tmp = LE32_TO_CPU(*_ptr);                            \
    tmp &= 0xff000000;                                                  \
    tmp |= ((d) & 0x00ffffff);                                  \
-   *_ptr = tmp;                                        \
+   *_ptr = CPU_TO_LE32(tmp);                                   \
    _ptr = (GLuint*)r600_ptr_stencil(rrb, _x + x_off, _y + y_off);              \
-   tmp = *_ptr;                                \
+   tmp = LE32_TO_CPU(*_ptr);                           \
    tmp &= 0xffffff00;                                                  \
    tmp |= ((d) >> 24) & 0xff;                                          \
-   *_ptr = tmp;                                        \
+   *_ptr = CPU_TO_LE32(tmp);                                   \
 } while (0)
 #elif defined(RADEON_R200)
 #define WRITE_DEPTH( _x, _y, d )                                       \
@@ -891,8 +930,8 @@ do {                                                                        \
 #elif defined(RADEON_R600)
 #define READ_DEPTH( d, _x, _y )                                                \
   do { \
-    d = (*(GLuint*)(r600_ptr_depth(rrb, _x + x_off, _y + y_off))) & 0x00ffffff; \
-    d |= ((*(GLuint*)(r600_ptr_stencil(rrb, _x + x_off, _y + y_off))) << 24) & 0xff000000; \
+    d = (LE32_TO_CPU(*(GLuint*)(r600_ptr_depth(rrb, _x + x_off, _y + y_off))) & 0x00ffffff); \
+    d |= ((LE32_TO_CPU(*(GLuint*)(r600_ptr_stencil(rrb, _x + x_off, _y + y_off))) << 24) & 0xff000000); \
   }while(0)
 #elif defined(RADEON_R200)
 #define READ_DEPTH( d, _x, _y )                                                \
@@ -927,10 +966,10 @@ do {                                                                      \
 #define WRITE_STENCIL( _x, _y, d )                                     \
 do {                                                                   \
    GLuint *_ptr = (GLuint*)r600_ptr_stencil(rrb, _x + x_off, _y + y_off);              \
-   GLuint tmp = *_ptr;                         \
+   GLuint tmp = LE32_TO_CPU(*_ptr);                            \
    tmp &= 0xffffff00;                                                  \
    tmp |= (d) & 0xff;                                                  \
-   *_ptr = tmp;                                        \
+   *_ptr = CPU_TO_LE32(tmp);                                   \
 } while (0)
 #elif defined(RADEON_R200)
 #define WRITE_STENCIL( _x, _y, d )                                     \
@@ -963,7 +1002,7 @@ do {                                                                       \
 #define READ_STENCIL( d, _x, _y )                                      \
 do {                                                                   \
    GLuint *_ptr = (GLuint*)r600_ptr_stencil( rrb, _x + x_off, _y + y_off );            \
-   GLuint tmp = *_ptr;                         \
+   GLuint tmp = LE32_TO_CPU(*_ptr);                            \
    d = tmp & 0x000000ff;                                               \
 } while (0)
 #elif defined(RADEON_R200)
index 8a35c7d2d279405a0a0e6a387b606228ade4ad9b..25a8ddf7b6a5e3ae2849c2639f3fb3b9da93ea69 100644 (file)
@@ -330,17 +330,17 @@ static void radeonTexParameter( struct gl_context *ctx, GLenum target,
    case GL_TEXTURE_MIN_FILTER:
    case GL_TEXTURE_MAG_FILTER:
    case GL_TEXTURE_MAX_ANISOTROPY_EXT:
-      radeonSetTexMaxAnisotropy( t, texObj->MaxAnisotropy );
-      radeonSetTexFilter( t, texObj->MinFilter, texObj->MagFilter );
+      radeonSetTexMaxAnisotropy( t, texObj->Sampler.MaxAnisotropy );
+      radeonSetTexFilter( t, texObj->Sampler.MinFilter, texObj->Sampler.MagFilter );
       break;
 
    case GL_TEXTURE_WRAP_S:
    case GL_TEXTURE_WRAP_T:
-      radeonSetTexWrap( t, texObj->WrapS, texObj->WrapT );
+      radeonSetTexWrap( t, texObj->Sampler.WrapS, texObj->Sampler.WrapT );
       break;
 
    case GL_TEXTURE_BORDER_COLOR:
-      radeonSetTexBorderColor( t, texObj->BorderColor.f );
+      radeonSetTexBorderColor( t, texObj->Sampler.BorderColor.f );
       break;
 
    case GL_TEXTURE_BASE_LEVEL:
@@ -416,7 +416,7 @@ radeonNewTextureObject( struct gl_context *ctx, GLuint name, GLenum target )
    radeonTexObj* t = CALLOC_STRUCT(radeon_tex_obj);
 
    _mesa_initialize_texture_object(&t->base, name, target);
-   t->base.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
+   t->base.Sampler.MaxAnisotropy = rmesa->radeon.initialMaxAnisotropy;
 
    t->border_fallback = GL_FALSE;
 
@@ -424,10 +424,10 @@ radeonNewTextureObject( struct gl_context *ctx, GLuint name, GLenum target )
    t->pp_txformat = (RADEON_TXFORMAT_ENDIAN_NO_SWAP |
                     RADEON_TXFORMAT_PERSPECTIVE_ENABLE);
    
-   radeonSetTexWrap( t, t->base.WrapS, t->base.WrapT );
-   radeonSetTexMaxAnisotropy( t, t->base.MaxAnisotropy );
-   radeonSetTexFilter( t, t->base.MinFilter, t->base.MagFilter );
-   radeonSetTexBorderColor( t, t->base.BorderColor.f );
+   radeonSetTexWrap( t, t->base.Sampler.WrapS, t->base.Sampler.WrapT );
+   radeonSetTexMaxAnisotropy( t, t->base.Sampler.MaxAnisotropy );
+   radeonSetTexFilter( t, t->base.Sampler.MinFilter, t->base.Sampler.MagFilter );
+   radeonSetTexBorderColor( t, t->base.Sampler.BorderColor.f );
    return &t->base;
 }
 
index 3f8d7aafb08ac0a3d7de74479e331b821a43bb94..c7f588350543a2e7ed38f0720a63f6e3cadd6164 100644 (file)
@@ -38,8 +38,6 @@
 #include "utils.h"
 
 
-#define DRIVER_DATE "20061110"
-
 /***************************************
  * Mesa's Driver Functions
  ***************************************/
@@ -71,7 +69,7 @@ static const GLubyte *savageDDGetString( struct gl_context *ctx, GLenum name )
    case GL_VENDOR:
       return (GLubyte *)"S3 Graphics Inc.";
    case GL_RENDERER:
-      offset = driGetRendererString( buffer, cardNames[chipset], DRIVER_DATE,
+      offset = driGetRendererString( buffer, cardNames[chipset],
                                     screen->agpMode );
       return (GLubyte *)buffer;
    default:
index 8cc448ad4f72f44d0eda14edddfdaa064f6ea9b9..6687dc5f466891f2a54e56d53536b0fa788f7319 100644 (file)
@@ -250,9 +250,9 @@ static GLboolean run_texnorm_stage( struct gl_context *ctx,
       const GLbitfield reallyEnabled = ctx->Texture.Unit[i]._ReallyEnabled;
       if (reallyEnabled) {
          const struct gl_texture_object *texObj = ctx->Texture.Unit[i]._Current;
-         const GLboolean normalizeS = (texObj->WrapS == GL_REPEAT);
+         const GLboolean normalizeS = (texObj->Sampler.WrapS == GL_REPEAT);
          const GLboolean normalizeT = (reallyEnabled & TEXTURE_2D_BIT) &&
-            (texObj->WrapT == GL_REPEAT);
+            (texObj->Sampler.WrapT == GL_REPEAT);
          const GLfloat *in = (GLfloat *)VB->AttribPtr[_TNL_ATTRIB_TEX0 + i]->data;
          const GLint instride = VB->AttribPtr[_TNL_ATTRIB_TEX0 + i]->stride;
          GLfloat (*out)[4] = store->texcoord[i].data;
@@ -332,15 +332,15 @@ static void validate_texnorm( struct gl_context *ctx,
    GLuint flags = 0;
 
    if (((ctx->Texture.Unit[0]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) &&
-       (ctx->Texture.Unit[0]._Current->WrapS == GL_REPEAT)) ||
+       (ctx->Texture.Unit[0]._Current->Sampler.WrapS == GL_REPEAT)) ||
        ((ctx->Texture.Unit[0]._ReallyEnabled & TEXTURE_2D_BIT) &&
-       (ctx->Texture.Unit[0]._Current->WrapT == GL_REPEAT)))
+       (ctx->Texture.Unit[0]._Current->Sampler.WrapT == GL_REPEAT)))
       flags |= VERT_BIT_TEX0;
 
    if (((ctx->Texture.Unit[1]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) &&
-       (ctx->Texture.Unit[1]._Current->WrapS == GL_REPEAT)) ||
+       (ctx->Texture.Unit[1]._Current->Sampler.WrapS == GL_REPEAT)) ||
        ((ctx->Texture.Unit[1]._ReallyEnabled & TEXTURE_2D_BIT) &&
-       (ctx->Texture.Unit[1]._Current->WrapT == GL_REPEAT)))
+       (ctx->Texture.Unit[1]._Current->Sampler.WrapT == GL_REPEAT)))
       flags |= VERT_BIT_TEX1;
 
    store->active = (flags != 0);
index 3aece732c99f1ee9e4b9dd53c05425b36411261f..9486c12c158af801f8ef37e377f221acd4537440 100644 (file)
@@ -502,9 +502,9 @@ savageAllocTexObj( struct gl_texture_object *texObj )
   
       make_empty_list( &t->base );
 
-      savageSetTexWrapping(t,texObj->WrapS,texObj->WrapT);
-      savageSetTexFilter(t,texObj->MinFilter,texObj->MagFilter);
-      savageSetTexBorderColor(t,texObj->BorderColor.f);
+      savageSetTexWrapping(t,texObj->Sampler.WrapS,texObj->Sampler.WrapT);
+      savageSetTexFilter(t,texObj->Sampler.MinFilter,texObj->Sampler.MagFilter);
+      savageSetTexBorderColor(t,texObj->Sampler.BorderColor.f);
    }
 
    return t;
@@ -2031,16 +2031,16 @@ static void savageTexParameter( struct gl_context *ctx, GLenum target,
    switch (pname) {
    case GL_TEXTURE_MIN_FILTER:
    case GL_TEXTURE_MAG_FILTER:
-      savageSetTexFilter(t,tObj->MinFilter,tObj->MagFilter);
+      savageSetTexFilter(t,tObj->Sampler.MinFilter,tObj->Sampler.MagFilter);
       break;
 
    case GL_TEXTURE_WRAP_S:
    case GL_TEXTURE_WRAP_T:
-      savageSetTexWrapping(t,tObj->WrapS,tObj->WrapT);
+      savageSetTexWrapping(t,tObj->Sampler.WrapS,tObj->Sampler.WrapT);
       break;
   
    case GL_TEXTURE_BORDER_COLOR:
-      savageSetTexBorderColor(t,tObj->BorderColor.f);
+      savageSetTexBorderColor(t,tObj->Sampler.BorderColor.f);
       break;
 
    default:
index 90e894b842c98364e29203d1c59e761a12a6c7e2..bba516f8dcd611208da3be248a9ac8e93596ea19 100644 (file)
@@ -45,8 +45,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "utils.h"
 
-#define DRIVER_DATE    "20060710"
-
 /* Return the width and height of the given buffer.
  */
 static void
@@ -78,7 +76,7 @@ sisGetString( struct gl_context *ctx, GLenum name )
       return (GLubyte *)"Eric Anholt";
 
    case GL_RENDERER:
-      offset = driGetRendererString( buffer, "SiS", DRIVER_DATE, agp_mode );
+      offset = driGetRendererString( buffer, "SiS", agp_mode );
 
       return (GLubyte *)buffer;
 
index daec2393211b3809cd0241aceebbfbbcab59032e..6580f155bae859914bb22c70b91057902385b785 100644 (file)
@@ -335,7 +335,7 @@ sis_set_texobj_parm( struct gl_context *ctx, struct gl_texture_object *texObj,
    current->texture[hw_unit].hwTextureMip = 0UL;
    current->texture[hw_unit].hwTextureSet = t->hwformat;
 
-   if ((texObj->MinFilter == GL_NEAREST) || (texObj->MinFilter == GL_LINEAR)) {
+   if ((texObj->Sampler.MinFilter == GL_NEAREST) || (texObj->Sampler.MinFilter == GL_LINEAR)) {
       firstLevel = lastLevel = texObj->BaseLevel;
    } else {
       /* Compute which mipmap levels we really want to send to the hardware.
@@ -344,9 +344,9 @@ sis_set_texobj_parm( struct gl_context *ctx, struct gl_texture_object *texObj,
        * Yes, this looks overly complicated, but it's all needed.
        */
 
-      firstLevel = texObj->BaseLevel + (GLint)(texObj->MinLod + 0.5);
+      firstLevel = texObj->BaseLevel + (GLint)(texObj->Sampler.MinLod + 0.5);
       firstLevel = MAX2(firstLevel, texObj->BaseLevel);
-      lastLevel = texObj->BaseLevel + (GLint)(texObj->MaxLod + 0.5);
+      lastLevel = texObj->BaseLevel + (GLint)(texObj->Sampler.MaxLod + 0.5);
       lastLevel = MAX2(lastLevel, texObj->BaseLevel);
       lastLevel = MIN2(lastLevel, texObj->BaseLevel +
          texObj->Image[0][texObj->BaseLevel]->MaxLog2);
@@ -356,7 +356,7 @@ sis_set_texobj_parm( struct gl_context *ctx, struct gl_texture_object *texObj,
 
    current->texture[hw_unit].hwTextureSet |= (lastLevel << 8);
 
-   switch (texObj->MagFilter)
+   switch (texObj->Sampler.MagFilter)
    {
    case GL_NEAREST:
       current->texture[hw_unit].hwTextureMip |= TEXTURE_FILTER_NEAREST;
@@ -382,7 +382,7 @@ sis_set_texobj_parm( struct gl_context *ctx, struct gl_texture_object *texObj,
          MASK_TextureMipmapLodBias);
    }
 
-   switch (texObj->MinFilter)
+   switch (texObj->Sampler.MinFilter)
    {
    case GL_NEAREST:
       current->texture[hw_unit].hwTextureMip |= TEXTURE_FILTER_NEAREST;
@@ -408,7 +408,7 @@ sis_set_texobj_parm( struct gl_context *ctx, struct gl_texture_object *texObj,
       break;
    }
 
-   switch (texObj->WrapS)
+   switch (texObj->Sampler.WrapS)
    {
    case GL_REPEAT:
       current->texture[hw_unit].hwTextureSet |= MASK_TextureWrapU;
@@ -431,7 +431,7 @@ sis_set_texobj_parm( struct gl_context *ctx, struct gl_texture_object *texObj,
       break;
    }
 
-   switch (texObj->WrapT)
+   switch (texObj->Sampler.WrapT)
    {
    case GL_REPEAT:
       current->texture[hw_unit].hwTextureSet |= MASK_TextureWrapV;
@@ -456,10 +456,10 @@ sis_set_texobj_parm( struct gl_context *ctx, struct gl_texture_object *texObj,
 
    {
       GLubyte c[4];
-      CLAMPED_FLOAT_TO_UBYTE(c[0], texObj->BorderColor.f[0]);
-      CLAMPED_FLOAT_TO_UBYTE(c[1], texObj->BorderColor.f[1]);
-      CLAMPED_FLOAT_TO_UBYTE(c[2], texObj->BorderColor.f[2]);
-      CLAMPED_FLOAT_TO_UBYTE(c[3], texObj->BorderColor.f[3]);
+      CLAMPED_FLOAT_TO_UBYTE(c[0], texObj->Sampler.BorderColor.f[0]);
+      CLAMPED_FLOAT_TO_UBYTE(c[1], texObj->Sampler.BorderColor.f[1]);
+      CLAMPED_FLOAT_TO_UBYTE(c[2], texObj->Sampler.BorderColor.f[2]);
+      CLAMPED_FLOAT_TO_UBYTE(c[3], texObj->Sampler.BorderColor.f[3]);
 
       current->texture[hw_unit].hwTextureBorderColor = 
          PACK_COLOR_8888(c[3], c[0], c[1], c[2]);
index d60931ad7fdd8fd52212b300b000bdbbdcb5c44a..e981f9abedf3e5a913a855b6e599446b0735cbf3 100644 (file)
@@ -41,9 +41,6 @@
 #include "main/context.h"
 
 
-#define DRIVER_DATE    "20061113"
-
-
 /* These are used in calls to FX_grColorMaskv() */
 const GLboolean false4[4] = { GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE };
 const GLboolean true4[4] = { GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE };
@@ -91,7 +88,7 @@ static const GLubyte *tdfxDDGetString( struct gl_context *ctx, GLenum name )
         }
       }
 
-      (void) driGetRendererString(buffer, hardware, DRIVER_DATE, 0);
+      (void) driGetRendererString(buffer, hardware, 0);
       return (const GLubyte *) buffer;
    }
    case GL_VENDOR:
index 4cca243d076a39894088fbf5a16129c6f7413eb3..d74ddb24005b39f2306bc727a7887d0032788487 100644 (file)
@@ -327,7 +327,7 @@ static void RevalidateTexture(struct gl_context *ctx, struct gl_texture_object *
                       &(ti->sScale), &(ti->tScale), NULL, NULL);
     }
 
-    if (tObj->Image[0][maxl] && (tObj->MinFilter != GL_NEAREST) && (tObj->MinFilter != GL_LINEAR)) {
+    if (tObj->Image[0][maxl] && (tObj->Sampler.MinFilter != GL_NEAREST) && (tObj->Sampler.MinFilter != GL_LINEAR)) {
         /* mipmapping: need to compute smallLodLog2 */
         tdfxTexGetInfo(ctx, tObj->Image[0][maxl]->Width,
                        tObj->Image[0][maxl]->Height,
@@ -1786,12 +1786,12 @@ tdfxTestProxyTexImage(struct gl_context *ctx, GLenum target,
 #endif
             if (level == 0) {
                /* don't use mipmap levels > 0 */
-               tObj->MinFilter = tObj->MagFilter = GL_NEAREST;
+               tObj->Sampler.MinFilter = tObj->Sampler.MagFilter = GL_NEAREST;
             }
             else {
                /* test with all mipmap levels */
-               tObj->MinFilter = GL_LINEAR_MIPMAP_LINEAR;
-               tObj->MagFilter = GL_NEAREST;
+               tObj->Sampler.MinFilter = GL_LINEAR_MIPMAP_LINEAR;
+               tObj->Sampler.MagFilter = GL_NEAREST;
             }
             RevalidateTexture(ctx, tObj);
 
index 77d7116611a9539cbd07b849824e14f2a01627af..89c2a12a9c255ec1794f93e34face8fb778ca994 100644 (file)
@@ -65,8 +65,6 @@
 #define need_GL_EXT_secondary_color
 #include "main/remap_helper.h"
 
-#define DRIVER_DATE    "20060710"
-
 #include "vblank.h"
 #include "utils.h"
 
@@ -100,7 +98,7 @@ static const GLubyte *viaGetString(struct gl_context *ctx, GLenum name)
 
       offset = driGetRendererString( buffer, 
                                     chipset_names[(id > VIA_PM800) ? 0 : id],
-                                    DRIVER_DATE, 0 );
+                                    0 );
       return (GLubyte *)buffer;
    }
 
index 774f439bfb6c46471d16b5611162c91b4c8cc75e..3b270e02a97a760af9e20ea48aca1aa91c399bef 100644 (file)
@@ -877,21 +877,21 @@ static GLboolean viaChooseTextureState(struct gl_context *ctx)
         if (texUnit0->_ReallyEnabled) {
             struct gl_texture_object *texObj = texUnit0->_Current;
    
-           vmesa->regHTXnTB[0] = get_minmag_filter( texObj->MinFilter,
-                                                   texObj->MagFilter );
+           vmesa->regHTXnTB[0] = get_minmag_filter( texObj->Sampler.MinFilter,
+                                                   texObj->Sampler.MagFilter );
 
            vmesa->regHTXnMPMD[0] &= ~(HC_HTXnMPMD_SMASK | HC_HTXnMPMD_TMASK);
-           vmesa->regHTXnMPMD[0] |= get_wrap_mode( texObj->WrapS,
-                                                  texObj->WrapT );
+           vmesa->regHTXnMPMD[0] |= get_wrap_mode( texObj->Sampler.WrapS,
+                                                  texObj->Sampler.WrapT );
 
            vmesa->regHTXnTB[0] &= ~(HC_HTXnTB_TBC_S | HC_HTXnTB_TBC_T);
             if (texObj->Image[0][texObj->BaseLevel]->Border > 0) {
               vmesa->regHTXnTB[0] |= (HC_HTXnTB_TBC_S | HC_HTXnTB_TBC_T);
               vmesa->regHTXnTBC[0] = 
-                 PACK_COLOR_888(FLOAT_TO_UBYTE(texObj->BorderColor.f[0]),
-                                FLOAT_TO_UBYTE(texObj->BorderColor.f[1]),
-                                FLOAT_TO_UBYTE(texObj->BorderColor.f[2]));
-              vmesa->regHTXnTRAH[0] = FLOAT_TO_UBYTE(texObj->BorderColor.f[3]);
+                 PACK_COLOR_888(FLOAT_TO_UBYTE(texObj->Sampler.BorderColor.f[0]),
+                                FLOAT_TO_UBYTE(texObj->Sampler.BorderColor.f[1]),
+                                FLOAT_TO_UBYTE(texObj->Sampler.BorderColor.f[2]));
+              vmesa->regHTXnTRAH[0] = FLOAT_TO_UBYTE(texObj->Sampler.BorderColor.f[3]);
             }
 
            if (texUnit0->LodBias != 0.0f) {
@@ -911,20 +911,20 @@ static GLboolean viaChooseTextureState(struct gl_context *ctx)
         if (texUnit1->_ReallyEnabled) {
             struct gl_texture_object *texObj = texUnit1->_Current;
 
-           vmesa->regHTXnTB[1] = get_minmag_filter( texObj->MinFilter,
-                                                   texObj->MagFilter );
+           vmesa->regHTXnTB[1] = get_minmag_filter( texObj->Sampler.MinFilter,
+                                                   texObj->Sampler.MagFilter );
            vmesa->regHTXnMPMD[1] &= ~(HC_HTXnMPMD_SMASK | HC_HTXnMPMD_TMASK);
-           vmesa->regHTXnMPMD[1] |= get_wrap_mode( texObj->WrapS,
-                                                  texObj->WrapT );
+           vmesa->regHTXnMPMD[1] |= get_wrap_mode( texObj->Sampler.WrapS,
+                                                  texObj->Sampler.WrapT );
 
            vmesa->regHTXnTB[1] &= ~(HC_HTXnTB_TBC_S | HC_HTXnTB_TBC_T);
             if (texObj->Image[0][texObj->BaseLevel]->Border > 0) {
               vmesa->regHTXnTB[1] |= (HC_HTXnTB_TBC_S | HC_HTXnTB_TBC_T);
               vmesa->regHTXnTBC[1] = 
-                 PACK_COLOR_888(FLOAT_TO_UBYTE(texObj->BorderColor.f[0]),
-                                FLOAT_TO_UBYTE(texObj->BorderColor.f[1]),
-                                FLOAT_TO_UBYTE(texObj->BorderColor.f[2]));
-              vmesa->regHTXnTRAH[1] = FLOAT_TO_UBYTE(texObj->BorderColor.f[3]);
+                 PACK_COLOR_888(FLOAT_TO_UBYTE(texObj->Sampler.BorderColor.f[0]),
+                                FLOAT_TO_UBYTE(texObj->Sampler.BorderColor.f[1]),
+                                FLOAT_TO_UBYTE(texObj->Sampler.BorderColor.f[2]));
+              vmesa->regHTXnTRAH[1] = FLOAT_TO_UBYTE(texObj->Sampler.BorderColor.f[3]);
             }
 
 
index a2fb010e1426376132743df8950c7bc8868b0bea..1a0d1eaf0709333998cf46cce31c87290c283ede 100644 (file)
@@ -495,13 +495,13 @@ static GLboolean viaSetTexImages(struct gl_context *ctx,
     * GL_TEXTURE_MAX_LOD, GL_TEXTURE_BASE_LEVEL, and GL_TEXTURE_MAX_LEVEL.
     * Yes, this looks overly complicated, but it's all needed.
     */
-   if (texObj->MinFilter == GL_LINEAR || texObj->MinFilter == GL_NEAREST) {
+   if (texObj->Sampler.MinFilter == GL_LINEAR || texObj->Sampler.MinFilter == GL_NEAREST) {
       firstLevel = lastLevel = texObj->BaseLevel;
    }
    else {
-      firstLevel = texObj->BaseLevel + (GLint)(texObj->MinLod + 0.5);
+      firstLevel = texObj->BaseLevel + (GLint)(texObj->Sampler.MinLod + 0.5);
       firstLevel = MAX2(firstLevel, texObj->BaseLevel);
-      lastLevel = texObj->BaseLevel + (GLint)(texObj->MaxLod + 0.5);
+      lastLevel = texObj->BaseLevel + (GLint)(texObj->Sampler.MaxLod + 0.5);
       lastLevel = MAX2(lastLevel, texObj->BaseLevel);
       lastLevel = MIN2(lastLevel, texObj->BaseLevel + baseImage->image.MaxLog2);
       lastLevel = MIN2(lastLevel, texObj->MaxLevel);
diff --git a/src/mesa/drivers/osmesa/SConscript b/src/mesa/drivers/osmesa/SConscript
new file mode 100644 (file)
index 0000000..5ccef5f
--- /dev/null
@@ -0,0 +1,36 @@
+Import('*')
+
+env = env.Clone()
+
+env.Prepend(CPPPATH = [
+    '#src/mapi',
+    '#src/mesa',
+])
+
+env.Prepend(LIBS = [
+    glapi,
+    mesa,
+    glsl,
+])
+
+sources = [
+    'osmesa.c',
+]
+
+if env['platform'] == 'windows':
+    env.AppendUnique(CPPDEFINES = [
+        '_GDI32_', # prevent wgl* being declared __declspec(dllimport)
+        'BUILD_GL32', # declare gl* as __declspec(dllexport) in Mesa headers 
+    ])
+    if not env['gles']:
+        # prevent _glapi_* from being declared __declspec(dllimport)
+        env.Append(CPPDEFINES = ['_GLAPI_NO_EXPORTS'])
+
+    sources += ['osmesa.def']
+    
+osmesa = env.SharedLibrary(
+    target ='osmesa',
+    source = sources,
+)
+
+env.Alias('osmesa', osmesa)
index 98f01fe057ea20385166c764451ed76237411002..68d711446428b76f0da5554f60ea48c3535ffd25 100644 (file)
@@ -515,11 +515,7 @@ do {                                                               \
    PACK_RGBA(p, color[0], color[1], color[2], color[3]);       \
 } while (0)
 
-#ifdef WIN32
-#include "..\swrast\s_linetemp.h"
-#else
 #include "swrast/s_linetemp.h"
-#endif
 
 
 
@@ -544,11 +540,7 @@ do {                                                       \
    }                                                   \
 } while (0)
 
-#ifdef WIN32
-#include "..\swrast\s_linetemp.h"
-#else
 #include "swrast/s_linetemp.h"
-#endif
 
 
 
@@ -624,11 +616,7 @@ osmesa_choose_line_function( struct gl_context *ctx )
       span.z += span.zStep;                                    \
    }                                                            \
 }
-#ifdef WIN32
-#include "..\swrast\s_tritemp.h"
-#else
 #include "swrast/s_tritemp.h"
-#endif
 
 
 
@@ -656,11 +644,8 @@ osmesa_choose_line_function( struct gl_context *ctx )
       span.z += span.zStep;                            \
    }                                                    \
 }
-#ifdef WIN32
-#include "..\swrast\s_tritemp.h"
-#else
+
 #include "swrast/s_tritemp.h"
-#endif
 
 
 
diff --git a/src/mesa/drivers/windows/gdi/SConscript b/src/mesa/drivers/windows/gdi/SConscript
new file mode 100644 (file)
index 0000000..10a7eea
--- /dev/null
@@ -0,0 +1,38 @@
+Import('*')
+
+env = env.Clone()
+
+env.Prepend(CPPPATH = [
+    '#src/mapi',
+    '#src/mesa',
+])
+
+env.AppendUnique(CPPDEFINES = [
+    '_GDI32_', # prevent wgl* being declared __declspec(dllimport)
+    'BUILD_GL32', # declare gl* as __declspec(dllexport) in Mesa headers 
+])
+if not env['gles']:
+    # prevent _glapi_* from being declared __declspec(dllimport)
+    env.Append(CPPDEFINES = ['_GLAPI_NO_EXPORTS'])
+
+env.Prepend(LIBS = [
+    glapi,
+    mesa,
+    glsl,
+    'gdi32',
+    'user32',
+    'kernel32',
+])
+
+sources = [
+    'mesa.def',
+    'wgl.c',
+    'wmesa.c',
+]
+
+mesagdi = env.SharedLibrary(
+    target = 'opengl32',
+    source = sources,
+)
+
+env.Alias('mesagdi', mesagdi)
index b537b3460c507a46b0cfa2c47509cf54a519df1f..d5c98801d32dfa30c0e44f1d9b44f59db4568032 100644 (file)
@@ -26,9 +26,6 @@ VERSION 6.5
 ; be needed (for the gl* functions) since the entry
 ; points are compiled with dllexport declspec.
 ;
-; However, this file is still needed to export "internal"
-; Mesa symbols for the benefit of the OSMESA32.DLL.
-;
 EXPORTS
        glNewList
        glEndList
@@ -857,107 +854,3 @@ EXPORTS
        wglUseFontOutlinesA
        wglUseFontOutlinesW
        wglGetExtensionsStringARB
-;
-; Mesa internals - mostly for OSMESA
-       _vbo_CreateContext
-       _vbo_DestroyContext
-       _vbo_InvalidateState
-       _glapi_check_multithread
-       _glapi_get_context
-       _glapi_get_proc_address
-       _mesa_add_soft_renderbuffers
-       _mesa_add_renderbuffer
-       _mesa_check_conditional_render
-       _mesa_choose_tex_format
-       _mesa_create_framebuffer
-       _mesa_create_visual
-       _mesa_delete_array_object
-       _mesa_delete_program
-       _mesa_delete_texture_object
-       _mesa_destroy_framebuffer
-       _mesa_destroy_visual
-       _mesa_enable_1_3_extensions
-       _mesa_enable_1_4_extensions
-       _mesa_enable_1_5_extensions
-       _mesa_enable_2_0_extensions
-       _mesa_enable_2_1_extensions
-       _mesa_enable_sw_extensions
-       _mesa_error
-       _mesa_finish_render_texture
-       _mesa_framebuffer_renderbuffer
-       _mesa_free_context_data
-       _mesa_free_texture_image_data
-       _mesa_generate_mipmap
-       _mesa_get_compressed_teximage
-       _mesa_get_current_context
-       _mesa_get_teximage
-       _mesa_init_driver_functions
-       _mesa_init_glsl_driver_functions
-       _mesa_init_renderbuffer
-       _mesa_initialize_context
-       _mesa_make_current
-       _mesa_new_array_object
-       _mesa_new_framebuffer
-       _mesa_new_program
-       _mesa_new_renderbuffer
-       _mesa_new_soft_renderbuffer
-       _mesa_new_texture_image
-       _mesa_new_texture_object
-       _mesa_problem
-       _mesa_reference_renderbuffer
-       _mesa_remove_renderbuffer
-       _mesa_render_texture
-       _mesa_ResizeBuffersMESA
-       _mesa_resize_framebuffer
-       _mesa_store_compressed_teximage1d
-       _mesa_store_compressed_teximage2d
-       _mesa_store_compressed_teximage3d
-       _mesa_store_compressed_texsubimage1d
-       _mesa_store_compressed_texsubimage2d
-       _mesa_store_compressed_texsubimage3d
-       _mesa_store_teximage1d
-       _mesa_store_teximage2d
-       _mesa_store_teximage3d
-       _mesa_store_texsubimage1d
-       _mesa_store_texsubimage2d
-       _mesa_store_texsubimage3d
-       _mesa_test_proxy_teximage
-       _mesa_reference_framebuffer
-       _mesa_update_framebuffer_visual
-       _mesa_use_program
-       _mesa_Viewport
-       _mesa_meta_init
-       _mesa_meta_free
-       _mesa_meta_CopyColorSubTable
-       _mesa_meta_CopyColorTable
-       _mesa_meta_CopyConvolutionFilter1D
-       _mesa_meta_CopyConvolutionFilter2D
-       _mesa_meta_CopyTexImage1D
-       _mesa_meta_CopyTexImage2D
-       _mesa_meta_CopyTexSubImage1D
-       _mesa_meta_CopyTexSubImage2D
-       _mesa_meta_CopyTexSubImage3D
-       _swrast_Accum
-       _swrast_Bitmap
-       _swrast_BlitFramebuffer
-       _swrast_CopyPixels
-       _swrast_DrawPixels
-       _swrast_GetDeviceDriverReference
-       _swrast_Clear
-       _swrast_choose_line
-       _swrast_choose_triangle
-       _swrast_CreateContext
-       _swrast_DestroyContext
-       _swrast_exec_fragment_program
-       _swrast_InvalidateState
-       _swrast_ReadPixels
-       _swsetup_Wakeup
-       _swsetup_CreateContext
-       _swsetup_DestroyContext
-       _swsetup_InvalidateState
-       _tnl_CreateContext
-       _tnl_DestroyContext
-       _tnl_InvalidateState
-       _tnl_run_pipeline
-       _tnl_program_string
-       _tnl_RasterPos
index 8d8087067f5c52ba24716b290988af567836942a..1dafe6e2952ea1952b45f608a2884ab585f17ebb 100644 (file)
@@ -54,8 +54,8 @@
 #include <windows.h>
 
 #endif
-#include "config.h"
-#include "glapi.h"
+#include "main/config.h"
+#include "glapi/glapi.h"
 #include "GL/wmesa.h"   /* protos for wmesa* functions */
 
 /*
index 4a8b1b283d50135a169ba47f16e7c59555f05926..e3a37eb1acefabd6c34f4d6d82e8fb5e1e8be218 100644 (file)
@@ -7,10 +7,11 @@
 #include "colors.h"
 #include <GL/wmesa.h>
 #include <winuser.h>
-#include "context.h"
-#include "extensions.h"
-#include "framebuffer.h"
-#include "renderbuffer.h"
+#include "main/context.h"
+#include "main/extensions.h"
+#include "main/framebuffer.h"
+#include "main/renderbuffer.h"
+#include "main/macros.h"
 #include "drivers/common/driverfuncs.h"
 #include "drivers/common/meta.h"
 #include "vbo/vbo.h"
@@ -185,7 +186,7 @@ BOOL wmCreateBackingStore(WMesaFramebuffer pwfb, long lxSize, long lySize)
 }
 
 
-static wmDeleteBackingStore(WMesaFramebuffer pwfb)
+static void wmDeleteBackingStore(WMesaFramebuffer pwfb)
 {
     if (pwfb->hbmDIB) {
        SelectObject(pwfb->dib_hDC, pwfb->hOldBitmap);
index a73609b007a2a0078e0ad329a339b888ed288cbe..32289ebc70080852931dd6344687670a55d8c84e 100644 (file)
@@ -3,7 +3,7 @@
 #ifdef __MINGW32__
 #include <windows.h>
 #endif
-#include "context.h"
+#include "main/context.h"
 
 
 /**
index b429e2627e3ac5e7c401f9f392ccdc97531a7f18..f88da8458539d3547767600b38cb86111ffc45c6 100644 (file)
@@ -175,31 +175,31 @@ static int FogCoordFuncs[NUM_TYPES];
 
 /* GL_BYTE attributes */
 
-static void
+static void GLAPIENTRY
 VertexAttrib1NbvNV(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib1bvNV(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2NbvNV(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2bvNV(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3NbvNV(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]),
@@ -207,13 +207,13 @@ VertexAttrib3NbvNV(GLuint index, const GLbyte *v)
                                               BYTE_TO_FLOAT(v[2])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3bvNV(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4NbvNV(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]),
@@ -222,7 +222,7 @@ VertexAttrib4NbvNV(GLuint index, const GLbyte *v)
                                               BYTE_TO_FLOAT(v[3])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4bvNV(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2], (GLfloat)v[3]));
@@ -230,46 +230,46 @@ VertexAttrib4bvNV(GLuint index, const GLbyte *v)
 
 /* GL_UNSIGNED_BYTE attributes */
 
-static void
+static void GLAPIENTRY
 VertexAttrib1NubvNV(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib1ubvNV(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2NubvNV(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]),
                                           UBYTE_TO_FLOAT(v[1])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2ubvNV(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3NubvNV(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]),
                                               UBYTE_TO_FLOAT(v[1]),
                                               UBYTE_TO_FLOAT(v[2])));
 }
-static void
+static void GLAPIENTRY
 VertexAttrib3ubvNV(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, (GLfloat)v[0],
                                           (GLfloat)v[1], (GLfloat)v[2]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4NubvNV(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0]),
@@ -278,7 +278,7 @@ VertexAttrib4NubvNV(GLuint index, const GLubyte *v)
                                           UBYTE_TO_FLOAT(v[3])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4ubvNV(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, (GLfloat)v[0],
@@ -288,32 +288,32 @@ VertexAttrib4ubvNV(GLuint index, const GLubyte *v)
 
 /* GL_SHORT attributes */
 
-static void
+static void GLAPIENTRY
 VertexAttrib1NsvNV(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib1svNV(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2NsvNV(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]),
                                           SHORT_TO_FLOAT(v[1])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2svNV(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3NsvNV(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]),
@@ -321,14 +321,14 @@ VertexAttrib3NsvNV(GLuint index, const GLshort *v)
                             SHORT_TO_FLOAT(v[2])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3svNV(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
                                           (GLfloat)v[2]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4NsvNV(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0]),
@@ -337,7 +337,7 @@ VertexAttrib4NsvNV(GLuint index, const GLshort *v)
                             SHORT_TO_FLOAT(v[3])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4svNV(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
@@ -346,33 +346,33 @@ VertexAttrib4svNV(GLuint index, const GLshort *v)
 
 /* GL_UNSIGNED_SHORT attributes */
 
-static void
+static void GLAPIENTRY
 VertexAttrib1NusvNV(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib1usvNV(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2NusvNV(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]),
                             USHORT_TO_FLOAT(v[1])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2usvNV(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, (GLfloat)v[0],
                                           (GLfloat)v[1]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3NusvNV(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]),
@@ -380,14 +380,14 @@ VertexAttrib3NusvNV(GLuint index, const GLushort *v)
                                               USHORT_TO_FLOAT(v[2])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3usvNV(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
                                           (GLfloat)v[2]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4NusvNV(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]),
@@ -396,7 +396,7 @@ VertexAttrib4NusvNV(GLuint index, const GLushort *v)
                                               USHORT_TO_FLOAT(v[3])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4usvNV(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
@@ -405,32 +405,32 @@ VertexAttrib4usvNV(GLuint index, const GLushort *v)
 
 /* GL_INT attributes */
 
-static void
+static void GLAPIENTRY
 VertexAttrib1NivNV(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib1ivNV(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2NivNV(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]),
                                               INT_TO_FLOAT(v[1])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2ivNV(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3NivNV(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]),
@@ -438,14 +438,14 @@ VertexAttrib3NivNV(GLuint index, const GLint *v)
                                               INT_TO_FLOAT(v[2])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3ivNV(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
                                           (GLfloat)v[2]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4NivNV(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]),
@@ -454,7 +454,7 @@ VertexAttrib4NivNV(GLuint index, const GLint *v)
                                           INT_TO_FLOAT(v[3])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4ivNV(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
@@ -463,33 +463,33 @@ VertexAttrib4ivNV(GLuint index, const GLint *v)
 
 /* GL_UNSIGNED_INT attributes */
 
-static void
+static void GLAPIENTRY
 VertexAttrib1NuivNV(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib1uivNV(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib1fNV(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2NuivNV(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]),
                                           UINT_TO_FLOAT(v[1])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2uivNV(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib2fNV(GET_DISPATCH(), (index, (GLfloat)v[0],
                                           (GLfloat)v[1]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3NuivNV(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]),
@@ -497,14 +497,14 @@ VertexAttrib3NuivNV(GLuint index, const GLuint *v)
                                               UINT_TO_FLOAT(v[2])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3uivNV(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib3fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
                                           (GLfloat)v[2]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4NuivNV(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]),
@@ -513,7 +513,7 @@ VertexAttrib4NuivNV(GLuint index, const GLuint *v)
                                               UINT_TO_FLOAT(v[3])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4uivNV(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
@@ -522,25 +522,25 @@ VertexAttrib4uivNV(GLuint index, const GLuint *v)
 
 /* GL_FLOAT attributes */
 
-static void
+static void GLAPIENTRY
 VertexAttrib1fvNV(GLuint index, const GLfloat *v)
 {
    CALL_VertexAttrib1fvNV(GET_DISPATCH(), (index, v));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2fvNV(GLuint index, const GLfloat *v)
 {
    CALL_VertexAttrib2fvNV(GET_DISPATCH(), (index, v));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3fvNV(GLuint index, const GLfloat *v)
 {
    CALL_VertexAttrib3fvNV(GET_DISPATCH(), (index, v));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4fvNV(GLuint index, const GLfloat *v)
 {
    CALL_VertexAttrib4fvNV(GET_DISPATCH(), (index, v));
@@ -548,25 +548,25 @@ VertexAttrib4fvNV(GLuint index, const GLfloat *v)
 
 /* GL_DOUBLE attributes */
 
-static void
+static void GLAPIENTRY
 VertexAttrib1dvNV(GLuint index, const GLdouble *v)
 {
    CALL_VertexAttrib1dvNV(GET_DISPATCH(), (index, v));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2dvNV(GLuint index, const GLdouble *v)
 {
    CALL_VertexAttrib2dvNV(GET_DISPATCH(), (index, v));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3dvNV(GLuint index, const GLdouble *v)
 {
    CALL_VertexAttrib3dvNV(GET_DISPATCH(), (index, v));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4dvNV(GLuint index, const GLdouble *v)
 {
    CALL_VertexAttrib4dvNV(GET_DISPATCH(), (index, v));
@@ -680,31 +680,31 @@ static attrib_func AttribFuncsNV[2][4][NUM_TYPES] = {
 
 /* GL_BYTE attributes */
 
-static void
+static void GLAPIENTRY
 VertexAttrib1NbvARB(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib1bvARB(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2NbvARB(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2bvARB(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3NbvARB(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]),
@@ -712,13 +712,13 @@ VertexAttrib3NbvARB(GLuint index, const GLbyte *v)
                                               BYTE_TO_FLOAT(v[2])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3bvARB(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4NbvARB(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, BYTE_TO_FLOAT(v[0]),
@@ -727,7 +727,7 @@ VertexAttrib4NbvARB(GLuint index, const GLbyte *v)
                                               BYTE_TO_FLOAT(v[3])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4bvARB(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2], (GLfloat)v[3]));
@@ -735,19 +735,19 @@ VertexAttrib4bvARB(GLuint index, const GLbyte *v)
 
 /* GL_UNSIGNED_BYTE attributes */
 
-static void
+static void GLAPIENTRY
 VertexAttrib1NubvARB(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, UBYTE_TO_FLOAT(v[0])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib1ubvARB(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2NubvARB(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib2fARB(GET_DISPATCH(), (index,
@@ -755,14 +755,14 @@ VertexAttrib2NubvARB(GLuint index, const GLubyte *v)
                                            UBYTE_TO_FLOAT(v[1])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2ubvARB(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib2fARB(GET_DISPATCH(), (index,
                                            (GLfloat)v[0], (GLfloat)v[1]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3NubvARB(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib3fARB(GET_DISPATCH(), (index,
@@ -770,7 +770,7 @@ VertexAttrib3NubvARB(GLuint index, const GLubyte *v)
                                            UBYTE_TO_FLOAT(v[1]),
                                            UBYTE_TO_FLOAT(v[2])));
 }
-static void
+static void GLAPIENTRY
 VertexAttrib3ubvARB(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib3fARB(GET_DISPATCH(), (index,
@@ -779,7 +779,7 @@ VertexAttrib3ubvARB(GLuint index, const GLubyte *v)
                                            (GLfloat)v[2]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4NubvARB(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib4fARB(GET_DISPATCH(),
@@ -790,7 +790,7 @@ VertexAttrib4NubvARB(GLuint index, const GLubyte *v)
                            UBYTE_TO_FLOAT(v[3])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4ubvARB(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttrib4fARB(GET_DISPATCH(),
@@ -801,19 +801,19 @@ VertexAttrib4ubvARB(GLuint index, const GLubyte *v)
 
 /* GL_SHORT attributes */
 
-static void
+static void GLAPIENTRY
 VertexAttrib1NsvARB(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, SHORT_TO_FLOAT(v[0])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib1svARB(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2NsvARB(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib2fARB(GET_DISPATCH(),
@@ -821,14 +821,14 @@ VertexAttrib2NsvARB(GLuint index, const GLshort *v)
                            SHORT_TO_FLOAT(v[1])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2svARB(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib2fARB(GET_DISPATCH(),
                           (index, (GLfloat)v[0], (GLfloat)v[1]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3NsvARB(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib3fARB(GET_DISPATCH(),
@@ -838,7 +838,7 @@ VertexAttrib3NsvARB(GLuint index, const GLshort *v)
                            SHORT_TO_FLOAT(v[2])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3svARB(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib3fARB(GET_DISPATCH(),
@@ -846,7 +846,7 @@ VertexAttrib3svARB(GLuint index, const GLshort *v)
                            (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4NsvARB(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib4fARB(GET_DISPATCH(),
@@ -857,7 +857,7 @@ VertexAttrib4NsvARB(GLuint index, const GLshort *v)
                            SHORT_TO_FLOAT(v[3])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4svARB(GLuint index, const GLshort *v)
 {
    CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
@@ -866,33 +866,33 @@ VertexAttrib4svARB(GLuint index, const GLshort *v)
 
 /* GL_UNSIGNED_SHORT attributes */
 
-static void
+static void GLAPIENTRY
 VertexAttrib1NusvARB(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib1usvARB(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2NusvARB(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]),
                             USHORT_TO_FLOAT(v[1])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2usvARB(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, (GLfloat)v[0],
                                            (GLfloat)v[1]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3NusvARB(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]),
@@ -900,14 +900,14 @@ VertexAttrib3NusvARB(GLuint index, const GLushort *v)
                                               USHORT_TO_FLOAT(v[2])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3usvARB(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, (GLfloat)v[0],
                                            (GLfloat)v[1], (GLfloat)v[2]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4NusvARB(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, USHORT_TO_FLOAT(v[0]),
@@ -916,7 +916,7 @@ VertexAttrib4NusvARB(GLuint index, const GLushort *v)
                                               USHORT_TO_FLOAT(v[3])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4usvARB(GLuint index, const GLushort *v)
 {
    CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1], (GLfloat)v[2], (GLfloat)v[3]));
@@ -924,33 +924,33 @@ VertexAttrib4usvARB(GLuint index, const GLushort *v)
 
 /* GL_INT attributes */
 
-static void
+static void GLAPIENTRY
 VertexAttrib1NivARB(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib1ivARB(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2NivARB(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]),
                                               INT_TO_FLOAT(v[1])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2ivARB(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, (GLfloat)v[0],
                                            (GLfloat)v[1]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3NivARB(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]),
@@ -958,14 +958,14 @@ VertexAttrib3NivARB(GLuint index, const GLint *v)
                                               INT_TO_FLOAT(v[2])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3ivARB(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, (GLfloat)v[0],
                                            (GLfloat)v[1], (GLfloat)v[2]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4NivARB(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, INT_TO_FLOAT(v[0]),
@@ -974,7 +974,7 @@ VertexAttrib4NivARB(GLuint index, const GLint *v)
                                               INT_TO_FLOAT(v[3])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4ivARB(GLuint index, const GLint *v)
 {
    CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
@@ -983,33 +983,33 @@ VertexAttrib4ivARB(GLuint index, const GLint *v)
 
 /* GL_UNSIGNED_INT attributes */
 
-static void
+static void GLAPIENTRY
 VertexAttrib1NuivARB(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib1uivARB(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib1fARB(GET_DISPATCH(), (index, (GLfloat)v[0]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2NuivARB(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]),
                                            UINT_TO_FLOAT(v[1])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2uivARB(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib2fARB(GET_DISPATCH(), (index, (GLfloat)v[0],
                                            (GLfloat)v[1]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3NuivARB(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]),
@@ -1017,14 +1017,14 @@ VertexAttrib3NuivARB(GLuint index, const GLuint *v)
                                            UINT_TO_FLOAT(v[2])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3uivARB(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib3fARB(GET_DISPATCH(), (index, (GLfloat)v[0],
                                            (GLfloat)v[1], (GLfloat)v[2]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4NuivARB(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, UINT_TO_FLOAT(v[0]),
@@ -1033,7 +1033,7 @@ VertexAttrib4NuivARB(GLuint index, const GLuint *v)
                                            UINT_TO_FLOAT(v[3])));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4uivARB(GLuint index, const GLuint *v)
 {
    CALL_VertexAttrib4fARB(GET_DISPATCH(), (index, (GLfloat)v[0], (GLfloat)v[1],
@@ -1042,25 +1042,25 @@ VertexAttrib4uivARB(GLuint index, const GLuint *v)
 
 /* GL_FLOAT attributes */
 
-static void
+static void GLAPIENTRY
 VertexAttrib1fvARB(GLuint index, const GLfloat *v)
 {
    CALL_VertexAttrib1fvARB(GET_DISPATCH(), (index, v));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2fvARB(GLuint index, const GLfloat *v)
 {
    CALL_VertexAttrib2fvARB(GET_DISPATCH(), (index, v));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3fvARB(GLuint index, const GLfloat *v)
 {
    CALL_VertexAttrib3fvARB(GET_DISPATCH(), (index, v));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4fvARB(GLuint index, const GLfloat *v)
 {
    CALL_VertexAttrib4fvARB(GET_DISPATCH(), (index, v));
@@ -1068,25 +1068,25 @@ VertexAttrib4fvARB(GLuint index, const GLfloat *v)
 
 /* GL_DOUBLE attributes */
 
-static void
+static void GLAPIENTRY
 VertexAttrib1dvARB(GLuint index, const GLdouble *v)
 {
    CALL_VertexAttrib1dvARB(GET_DISPATCH(), (index, v));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib2dvARB(GLuint index, const GLdouble *v)
 {
    CALL_VertexAttrib2dvARB(GET_DISPATCH(), (index, v));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib3dvARB(GLuint index, const GLdouble *v)
 {
    CALL_VertexAttrib3dvARB(GET_DISPATCH(), (index, v));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttrib4dvARB(GLuint index, const GLdouble *v)
 {
    CALL_VertexAttrib4dvARB(GET_DISPATCH(), (index, v));
@@ -1096,50 +1096,50 @@ VertexAttrib4dvARB(GLuint index, const GLdouble *v)
 /**
  * Integer-valued attributes
  */
-static void
+static void GLAPIENTRY
 VertexAttribI1bv(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttribI1iEXT(GET_DISPATCH(), (index, v[0]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttribI2bv(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttribI2iEXT(GET_DISPATCH(), (index, v[0], v[1]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttribI3bv(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttribI3iEXT(GET_DISPATCH(), (index, v[0], v[1], v[2]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttribI4bv(GLuint index, const GLbyte *v)
 {
    CALL_VertexAttribI4bvEXT(GET_DISPATCH(), (index, v));
 }
 
 
-static void
+static void GLAPIENTRY
 VertexAttribI1ubv(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttribI1uiEXT(GET_DISPATCH(), (index, v[0]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttribI2ubv(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttribI2uiEXT(GET_DISPATCH(), (index, v[0], v[1]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttribI3ubv(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttribI3uiEXT(GET_DISPATCH(), (index, v[0], v[1], v[2]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttribI4ubv(GLuint index, const GLubyte *v)
 {
    CALL_VertexAttribI4ubvEXT(GET_DISPATCH(), (index, v));
@@ -1147,50 +1147,50 @@ VertexAttribI4ubv(GLuint index, const GLubyte *v)
 
 
 
-static void
+static void GLAPIENTRY
 VertexAttribI1sv(GLuint index, const GLshort *v)
 {
    CALL_VertexAttribI1iEXT(GET_DISPATCH(), (index, v[0]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttribI2sv(GLuint index, const GLshort *v)
 {
    CALL_VertexAttribI2iEXT(GET_DISPATCH(), (index, v[0], v[1]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttribI3sv(GLuint index, const GLshort *v)
 {
    CALL_VertexAttribI3iEXT(GET_DISPATCH(), (index, v[0], v[1], v[2]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttribI4sv(GLuint index, const GLshort *v)
 {
    CALL_VertexAttribI4svEXT(GET_DISPATCH(), (index, v));
 }
 
 
-static void
+static void GLAPIENTRY
 VertexAttribI1usv(GLuint index, const GLushort *v)
 {
    CALL_VertexAttribI1uiEXT(GET_DISPATCH(), (index, v[0]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttribI2usv(GLuint index, const GLushort *v)
 {
    CALL_VertexAttribI2uiEXT(GET_DISPATCH(), (index, v[0], v[1]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttribI3usv(GLuint index, const GLushort *v)
 {
    CALL_VertexAttribI3uiEXT(GET_DISPATCH(), (index, v[0], v[1], v[2]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttribI4usv(GLuint index, const GLushort *v)
 {
    CALL_VertexAttribI4usvEXT(GET_DISPATCH(), (index, v));
@@ -1198,50 +1198,50 @@ VertexAttribI4usv(GLuint index, const GLushort *v)
 
 
 
-static void
+static void GLAPIENTRY
 VertexAttribI1iv(GLuint index, const GLint *v)
 {
    CALL_VertexAttribI1iEXT(GET_DISPATCH(), (index, v[0]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttribI2iv(GLuint index, const GLint *v)
 {
    CALL_VertexAttribI2iEXT(GET_DISPATCH(), (index, v[0], v[1]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttribI3iv(GLuint index, const GLint *v)
 {
    CALL_VertexAttribI3iEXT(GET_DISPATCH(), (index, v[0], v[1], v[2]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttribI4iv(GLuint index, const GLint *v)
 {
    CALL_VertexAttribI4ivEXT(GET_DISPATCH(), (index, v));
 }
 
 
-static void
+static void GLAPIENTRY
 VertexAttribI1uiv(GLuint index, const GLuint *v)
 {
    CALL_VertexAttribI1uiEXT(GET_DISPATCH(), (index, v[0]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttribI2uiv(GLuint index, const GLuint *v)
 {
    CALL_VertexAttribI2uiEXT(GET_DISPATCH(), (index, v[0], v[1]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttribI3uiv(GLuint index, const GLuint *v)
 {
    CALL_VertexAttribI3uiEXT(GET_DISPATCH(), (index, v[0], v[1], v[2]));
 }
 
-static void
+static void GLAPIENTRY
 VertexAttribI4uiv(GLuint index, const GLuint *v)
 {
    CALL_VertexAttribI4uivEXT(GET_DISPATCH(), (index, v));
index 4da48936484218174f96877b9cccba97a71c13c1..d0298df20cb2c10e77452972083dbd6e20441c04 100644 (file)
@@ -78,6 +78,9 @@
 #include "polygon.h"
 #include "queryobj.h"
 #include "readpix.h"
+#if FEATURE_ARB_sampler_objects
+#include "samplerobj.h"
+#endif
 #include "scissor.h"
 #include "stencil.h"
 #include "texenv.h"
@@ -691,6 +694,8 @@ _mesa_create_exec_table(void)
    SET_FramebufferTextureFaceARB(exec, _mesa_FramebufferTextureFaceARB);
 #endif
 
+   SET_ClampColorARB(exec, _mesa_ClampColorARB);
+
    /* GL_EXT_texture_integer */
    SET_ClearColorIiEXT(exec, _mesa_ClearColorIiEXT);
    SET_ClearColorIuiEXT(exec, _mesa_ClearColorIuiEXT);
@@ -724,6 +729,13 @@ _mesa_create_exec_table(void)
    /* GL_NV_texture_barrier */
    SET_TextureBarrierNV(exec, _mesa_TextureBarrierNV);
  
+   /* GL_ARB_texture_buffer_object */
+   SET_TexBufferARB(exec, _mesa_TexBuffer);
+
+#if FEATURE_ARB_sampler_objects
+   _mesa_init_sampler_object_dispatch(exec);
+#endif
+
    return exec;
 }
 
index 46010223370398ab9cc9f33e25190b4a9f5d4406..4bfb2424004c1d3a4f7b5885af2944032dab2da5 100644 (file)
@@ -41,6 +41,7 @@
 
 #include "glheader.h"
 #include "hash.h"
+#include "image.h"
 #include "imports.h"
 #include "context.h"
 #include "mfeatures.h"
@@ -50,6 +51,7 @@
 #include "arrayobj.h"
 #include "macros.h"
 #include "mtypes.h"
+#include "varray.h"
 #include "main/dispatch.h"
 
 
@@ -206,6 +208,7 @@ init_array(struct gl_context *ctx,
    array->Ptr = NULL;
    array->Enabled = GL_FALSE;
    array->Normalized = GL_FALSE;
+   array->_ElementSize = size * _mesa_sizeof_type(type);
 #if FEATURE_ARB_vertex_buffer_object
    /* Vertex array buffers */
    _mesa_reference_buffer_object(ctx, &array->BufferObj,
@@ -279,37 +282,6 @@ remove_array_object( struct gl_context *ctx, struct gl_array_object *obj )
 
 
 
-/**
- * Compute the index of the last array element that can be safely accessed
- * in a vertex array.  We can really only do this when the array lives in
- * a VBO.
- * The array->_MaxElement field will be updated.
- * Later in glDrawArrays/Elements/etc we can do some bounds checking.
- */
-static void
-compute_max_element(struct gl_client_array *array)
-{
-   if (array->BufferObj->Name) {
-      /* Compute the max element we can access in the VBO without going
-       * out of bounds.
-       */
-      array->_MaxElement = ((GLsizeiptrARB) array->BufferObj->Size
-                            - (GLsizeiptrARB) array->Ptr + array->StrideB
-                            - array->_ElementSize) / array->StrideB;
-      if (0)
-         printf("%s Object %u  Size %u  MaxElement %u\n",
-               __FUNCTION__,
-               array->BufferObj->Name,
-               (GLuint) array->BufferObj->Size,
-               array->_MaxElement);
-   }
-   else {
-      /* user-space array, no idea how big it is */
-      array->_MaxElement = 2 * 1000 * 1000 * 1000; /* just a big number */
-   }
-}
-
-
 /**
  * Helper for update_arrays().
  * \return  min(current min, array->_MaxElement).
@@ -317,7 +289,7 @@ compute_max_element(struct gl_client_array *array)
 static GLuint
 update_min(GLuint min, struct gl_client_array *array)
 {
-   compute_max_element(array);
+   _mesa_update_array_max_element(array);
    if (array->Enabled)
       return MIN2(min, array->_MaxElement);
    else
@@ -497,7 +469,8 @@ _mesa_DeleteVertexArraysAPPLE(GLsizei n, const GLuint *ids)
  * \param vboOnly Will arrays have to reside in VBOs?
  */
 static void 
-gen_vertex_arrays(struct gl_context *ctx, GLsizei n, GLuint *arrays, GLboolean vboOnly)
+gen_vertex_arrays(struct gl_context *ctx, GLsizei n, GLuint *arrays,
+                  GLboolean vboOnly)
 {
    GLuint first;
    GLint i;
index 44097e1a266059bf26d695326d802755cce232a1..c74c999f8081e7afaceed105585e6ee8be66082d 100644 (file)
@@ -494,7 +494,7 @@ _mesa_PassTexCoordATI(GLuint dst, GLuint coord, GLenum swizzle)
       }
    }
 
-   curProg->regsAssigned[curProg->cur_pass >> 1] |=  1 << (dst - GL_REG_0_ATI);
+   curProg->regsAssigned[curProg->cur_pass >> 1] |= 1 << (dst - GL_REG_0_ATI);
    new_tex_inst(curProg);
 
    /* add the instructions */
@@ -567,7 +567,7 @@ _mesa_SampleMapATI(GLuint dst, GLuint interp, GLenum swizzle)
       }
    }
 
-   curProg->regsAssigned[curProg->cur_pass >> 1] |=  1 << (dst - GL_REG_0_ATI);
+   curProg->regsAssigned[curProg->cur_pass >> 1] |= 1 << (dst - GL_REG_0_ATI);
    new_tex_inst(curProg);
 
    /* add the instructions */
index ae7f633b8d8175ab3d1c1c4a0503b97d3565fedc..5731004023597a7a5dd701dbae7dc16e86b5c446 100644 (file)
@@ -770,6 +770,7 @@ pop_texture_group(struct gl_context *ctx, struct texture_state *texstate)
       /* Restore texture object state for each target */
       for (tgt = 0; tgt < NUM_TEXTURE_TARGETS; tgt++) {
          const struct gl_texture_object *obj = NULL;
+         const struct gl_sampler_object *samp;
          GLenum target;
 
          obj = &texstate->SavedObj[u][tgt];
@@ -790,31 +791,35 @@ pop_texture_group(struct gl_context *ctx, struct texture_state *texstate)
                   !ctx->Extensions.MESA_texture_array) {
             continue;
          }
+         else if (obj->Target == GL_TEXTURE_BUFFER)
+            continue;
 
          target = obj->Target;
 
          _mesa_BindTexture(target, obj->Name);
 
-         _mesa_TexParameterfv(target, GL_TEXTURE_BORDER_COLOR, obj->BorderColor.f);
+         samp = &obj->Sampler;
+
+         _mesa_TexParameterfv(target, GL_TEXTURE_BORDER_COLOR, samp->BorderColor.f);
+         _mesa_TexParameteri(target, GL_TEXTURE_WRAP_S, samp->WrapS);
+         _mesa_TexParameteri(target, GL_TEXTURE_WRAP_T, samp->WrapT);
+         _mesa_TexParameteri(target, GL_TEXTURE_WRAP_R, samp->WrapR);
+         _mesa_TexParameteri(target, GL_TEXTURE_MIN_FILTER, samp->MinFilter);
+         _mesa_TexParameteri(target, GL_TEXTURE_MAG_FILTER, samp->MagFilter);
+         _mesa_TexParameterf(target, GL_TEXTURE_MIN_LOD, samp->MinLod);
+         _mesa_TexParameterf(target, GL_TEXTURE_MAX_LOD, samp->MaxLod);
+         _mesa_TexParameterf(target, GL_TEXTURE_LOD_BIAS, samp->LodBias);
          _mesa_TexParameterf(target, GL_TEXTURE_PRIORITY, obj->Priority);
-         _mesa_TexParameteri(target, GL_TEXTURE_WRAP_S, obj->WrapS);
-         _mesa_TexParameteri(target, GL_TEXTURE_WRAP_T, obj->WrapT);
-         _mesa_TexParameteri(target, GL_TEXTURE_WRAP_R, obj->WrapR);
-         _mesa_TexParameteri(target, GL_TEXTURE_MIN_FILTER, obj->MinFilter);
-         _mesa_TexParameteri(target, GL_TEXTURE_MAG_FILTER, obj->MagFilter);
-         _mesa_TexParameterf(target, GL_TEXTURE_MIN_LOD, obj->MinLod);
-         _mesa_TexParameterf(target, GL_TEXTURE_MAX_LOD, obj->MaxLod);
-         _mesa_TexParameterf(target, GL_TEXTURE_LOD_BIAS, obj->LodBias);
          _mesa_TexParameteri(target, GL_TEXTURE_BASE_LEVEL, obj->BaseLevel);
          if (target != GL_TEXTURE_RECTANGLE_ARB)
             _mesa_TexParameteri(target, GL_TEXTURE_MAX_LEVEL, obj->MaxLevel);
          if (ctx->Extensions.EXT_texture_filter_anisotropic) {
             _mesa_TexParameterf(target, GL_TEXTURE_MAX_ANISOTROPY_EXT,
-                                obj->MaxAnisotropy);
+                                samp->MaxAnisotropy);
          }
          if (ctx->Extensions.ARB_shadow_ambient) {
             _mesa_TexParameterf(target, GL_TEXTURE_COMPARE_FAIL_VALUE_ARB,
-                                obj->CompareFailValue);
+                                samp->CompareFailValue);
          }
       }
 
@@ -879,10 +884,10 @@ _mesa_PopAttrib(void)
 
                color = (const struct gl_colorbuffer_attrib *) attr->data;
                _mesa_ClearIndex((GLfloat) color->ClearIndex);
-               _mesa_ClearColor(color->ClearColor[0],
-                                color->ClearColor[1],
-                                color->ClearColor[2],
-                                color->ClearColor[3]);
+               _mesa_ClearColor(color->ClearColorUnclamped[0],
+                                color->ClearColorUnclamped[1],
+                                color->ClearColorUnclamped[2],
+                                color->ClearColorUnclamped[3]);
                _mesa_IndexMask(color->IndexMask);
                if (!ctx->Extensions.EXT_draw_buffers2) {
                   _mesa_ColorMask((GLboolean) (color->ColorMask[0][0] != 0),
@@ -930,7 +935,7 @@ _mesa_PopAttrib(void)
                      _mesa_DrawBuffer(color->DrawBuffer[0]);
                }
                _mesa_set_enable(ctx, GL_ALPHA_TEST, color->AlphaEnabled);
-               _mesa_AlphaFunc(color->AlphaFunc, color->AlphaRef);
+               _mesa_AlphaFunc(color->AlphaFunc, color->AlphaRefUnclamped);
                if (ctx->Color.BlendEnabled != color->BlendEnabled) {
                   if (ctx->Extensions.EXT_draw_buffers2) {
                      GLuint i;
@@ -976,16 +981,18 @@ _mesa_PopAttrib(void)
                                                  color->Blend[0].EquationA);
                   }
                }
-               _mesa_BlendColor(color->BlendColor[0],
-                                color->BlendColor[1],
-                                color->BlendColor[2],
-                                color->BlendColor[3]);
+               _mesa_BlendColor(color->BlendColorUnclamped[0],
+                                color->BlendColorUnclamped[1],
+                                color->BlendColorUnclamped[2],
+                                color->BlendColorUnclamped[3]);
                _mesa_LogicOp(color->LogicOp);
                _mesa_set_enable(ctx, GL_COLOR_LOGIC_OP,
                                 color->ColorLogicOpEnabled);
                _mesa_set_enable(ctx, GL_INDEX_LOGIC_OP,
                                 color->IndexLogicOpEnabled);
                _mesa_set_enable(ctx, GL_DITHER, color->DitherFlag);
+               _mesa_ClampColorARB(GL_CLAMP_FRAGMENT_COLOR_ARB, color->ClampFragmentColor);
+               _mesa_ClampColorARB(GL_CLAMP_READ_COLOR_ARB, color->ClampReadColor);
             }
             break;
          case GL_CURRENT_BIT:
@@ -1108,6 +1115,7 @@ _mesa_PopAttrib(void)
                /* materials */
                memcpy(&ctx->Light.Material, &light->Material,
                       sizeof(struct gl_material));
+               _mesa_ClampColorARB(GL_CLAMP_VERTEX_COLOR_ARB, light->ClampVertexColor);
             }
             break;
          case GL_LINE_BIT:
index c74a168036a7c5aac49f6ccf3c0750febbe4a546..95c101c34ae756276129491d4b66b450d958ffbe 100644 (file)
@@ -513,19 +513,24 @@ _mesa_BlendColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha )
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
-   tmp[0] = CLAMP( red,   0.0F, 1.0F );
-   tmp[1] = CLAMP( green, 0.0F, 1.0F );
-   tmp[2] = CLAMP( blue,  0.0F, 1.0F );
-   tmp[3] = CLAMP( alpha, 0.0F, 1.0F );
+   tmp[0] = red;
+   tmp[1] = green;
+   tmp[2] = blue;
+   tmp[3] = alpha;
 
-   if (TEST_EQ_4V(tmp, ctx->Color.BlendColor))
+   if (TEST_EQ_4V(tmp, ctx->Color.BlendColorUnclamped))
       return;
 
    FLUSH_VERTICES(ctx, _NEW_COLOR);
-   COPY_4FV( ctx->Color.BlendColor, tmp );
+   COPY_4FV( ctx->Color.BlendColorUnclamped, tmp );
+
+   ctx->Color.BlendColor[0] = CLAMP(tmp[0], 0.0F, 1.0F);
+   ctx->Color.BlendColor[1] = CLAMP(tmp[1], 0.0F, 1.0F);
+   ctx->Color.BlendColor[2] = CLAMP(tmp[2], 0.0F, 1.0F);
+   ctx->Color.BlendColor[3] = CLAMP(tmp[3], 0.0F, 1.0F);
 
    if (ctx->Driver.BlendColor)
-      (*ctx->Driver.BlendColor)(ctx, tmp);
+      (*ctx->Driver.BlendColor)(ctx, ctx->Color.BlendColor);
 }
 
 
@@ -558,17 +563,16 @@ _mesa_AlphaFunc( GLenum func, GLclampf ref )
    case GL_NOTEQUAL:
    case GL_GEQUAL:
    case GL_ALWAYS:
-      ref = CLAMP(ref, 0.0F, 1.0F);
-
-      if (ctx->Color.AlphaFunc == func && ctx->Color.AlphaRef == ref)
+      if (ctx->Color.AlphaFunc == func && ctx->Color.AlphaRefUnclamped == ref)
          return; /* no change */
 
       FLUSH_VERTICES(ctx, _NEW_COLOR);
       ctx->Color.AlphaFunc = func;
-      ctx->Color.AlphaRef = ref;
+      ctx->Color.AlphaRefUnclamped = ref;
+      ctx->Color.AlphaRef = CLAMP(ref, 0.0F, 1.0F);
 
       if (ctx->Driver.AlphaFunc)
-         ctx->Driver.AlphaFunc(ctx, func, ref);
+         ctx->Driver.AlphaFunc(ctx, func, ctx->Color.AlphaRef);
       return;
 
    default:
@@ -737,7 +741,7 @@ _mesa_ColorMaskIndexed( GLuint buf, GLboolean red, GLboolean green,
 }
 
 
-extern void GLAPIENTRY
+void GLAPIENTRY
 _mesa_ClampColorARB(GLenum target, GLenum clamp)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -751,12 +755,15 @@ _mesa_ClampColorARB(GLenum target, GLenum clamp)
 
    switch (target) {
    case GL_CLAMP_VERTEX_COLOR_ARB:
+      FLUSH_VERTICES(ctx, _NEW_LIGHT);
       ctx->Light.ClampVertexColor = clamp;
       break;
    case GL_CLAMP_FRAGMENT_COLOR_ARB:
+      FLUSH_VERTICES(ctx, _NEW_FRAG_CLAMP);
       ctx->Color.ClampFragmentColor = clamp;
       break;
    case GL_CLAMP_READ_COLOR_ARB:
+      FLUSH_VERTICES(ctx, _NEW_COLOR);
       ctx->Color.ClampReadColor = clamp;
       break;
    default:
@@ -789,6 +796,7 @@ void _mesa_init_color( struct gl_context * ctx )
    memset(ctx->Color.ColorMask, 0xff, sizeof(ctx->Color.ColorMask));
    ctx->Color.ClearIndex = 0;
    ASSIGN_4V( ctx->Color.ClearColor, 0, 0, 0, 0 );
+   ASSIGN_4V( ctx->Color.ClearColorUnclamped, 0, 0, 0, 0 );
    ctx->Color.AlphaEnabled = GL_FALSE;
    ctx->Color.AlphaFunc = GL_ALWAYS;
    ctx->Color.AlphaRef = 0;
@@ -802,6 +810,7 @@ void _mesa_init_color( struct gl_context * ctx )
       ctx->Color.Blend[i].EquationA = GL_FUNC_ADD;
    }
    ASSIGN_4V( ctx->Color.BlendColor, 0.0, 0.0, 0.0, 0.0 );
+   ASSIGN_4V( ctx->Color.BlendColorUnclamped, 0.0, 0.0, 0.0, 0.0 );
    ctx->Color.IndexLogicOpEnabled = GL_FALSE;
    ctx->Color.ColorLogicOpEnabled = GL_FALSE;
    ctx->Color._LogicOpEnabled = GL_FALSE;
@@ -816,7 +825,9 @@ void _mesa_init_color( struct gl_context * ctx )
    }
 
    ctx->Color.ClampFragmentColor = GL_FIXED_ONLY_ARB;
+   ctx->Color._ClampFragmentColor = GL_TRUE;
    ctx->Color.ClampReadColor = GL_FIXED_ONLY_ARB;
+   ctx->Color._ClampReadColor = GL_TRUE;
 }
 
 /*@}*/
index 3343bb2f40ef4c711b2b9525dfb14f3000b081af..78105883c97ef48eb863414c95147928505165b6 100644 (file)
@@ -93,6 +93,11 @@ get_buffer_target(struct gl_context *ctx, GLenum target)
       }
       break;
 #endif
+   case GL_TEXTURE_BUFFER:
+      if (ctx->Extensions.ARB_texture_buffer_object) {
+         return &ctx->Texture.BufferObject;
+      }
+      break;
    default:
       return NULL;
    }
@@ -216,7 +221,8 @@ _mesa_new_buffer_object( struct gl_context *ctx, GLuint name, GLenum target )
  * Default callback for the \c dd_function_table::DeleteBuffer() hook.
  */
 static void
-_mesa_delete_buffer_object( struct gl_context *ctx, struct gl_buffer_object *bufObj )
+_mesa_delete_buffer_object(struct gl_context *ctx,
+                           struct gl_buffer_object *bufObj)
 {
    (void) ctx;
 
@@ -414,7 +420,8 @@ _mesa_buffer_subdata( struct gl_context *ctx, GLenum target, GLintptrARB offset,
  * \sa glBufferGetSubDataARB, dd_function_table::GetBufferSubData.
  */
 static void
-_mesa_buffer_get_subdata( struct gl_context *ctx, GLenum target, GLintptrARB offset,
+_mesa_buffer_get_subdata( struct gl_context *ctx,
+                          GLenum target, GLintptrARB offset,
                          GLsizeiptrARB size, GLvoid * data,
                          struct gl_buffer_object * bufObj )
 {
@@ -1536,7 +1543,7 @@ _mesa_FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
 
 #if FEATURE_APPLE_object_purgeable
 static GLenum
-_mesa_BufferObjectPurgeable(struct gl_context *ctx, GLuint name, GLenum option)
+buffer_object_purgeable(struct gl_context *ctx, GLuint name, GLenum option)
 {
    struct gl_buffer_object *bufObj;
    GLenum retval;
@@ -1569,7 +1576,7 @@ _mesa_BufferObjectPurgeable(struct gl_context *ctx, GLuint name, GLenum option)
 
 
 static GLenum
-_mesa_RenderObjectPurgeable(struct gl_context *ctx, GLuint name, GLenum option)
+renderbuffer_purgeable(struct gl_context *ctx, GLuint name, GLenum option)
 {
    struct gl_renderbuffer *bufObj;
    GLenum retval;
@@ -1598,7 +1605,7 @@ _mesa_RenderObjectPurgeable(struct gl_context *ctx, GLuint name, GLenum option)
 
 
 static GLenum
-_mesa_TextureObjectPurgeable(struct gl_context *ctx, GLuint name, GLenum option)
+texture_object_purgeable(struct gl_context *ctx, GLuint name, GLenum option)
 {
    struct gl_texture_object *bufObj;
    GLenum retval;
@@ -1654,13 +1661,13 @@ _mesa_ObjectPurgeableAPPLE(GLenum objectType, GLuint name, GLenum option)
 
    switch (objectType) {
    case GL_TEXTURE:
-      retval = _mesa_TextureObjectPurgeable (ctx, name, option);
+      retval = texture_object_purgeable(ctx, name, option);
       break;
    case GL_RENDERBUFFER_EXT:
-      retval = _mesa_RenderObjectPurgeable (ctx, name, option);
+      retval = renderbuffer_purgeable(ctx, name, option);
       break;
    case GL_BUFFER_OBJECT_APPLE:
-      retval = _mesa_BufferObjectPurgeable (ctx, name, option);
+      retval = buffer_object_purgeable(ctx, name, option);
       break;
    default:
       _mesa_error(ctx, GL_INVALID_ENUM,
@@ -1679,7 +1686,7 @@ _mesa_ObjectPurgeableAPPLE(GLenum objectType, GLuint name, GLenum option)
 
 
 static GLenum
-_mesa_BufferObjectUnpurgeable(struct gl_context *ctx, GLuint name, GLenum option)
+buffer_object_unpurgeable(struct gl_context *ctx, GLuint name, GLenum option)
 {
    struct gl_buffer_object *bufObj;
    GLenum retval;
@@ -1709,7 +1716,7 @@ _mesa_BufferObjectUnpurgeable(struct gl_context *ctx, GLuint name, GLenum option
 
 
 static GLenum
-_mesa_RenderObjectUnpurgeable(struct gl_context *ctx, GLuint name, GLenum option)
+renderbuffer_unpurgeable(struct gl_context *ctx, GLuint name, GLenum option)
 {
    struct gl_renderbuffer *bufObj;
    GLenum retval;
@@ -1739,7 +1746,7 @@ _mesa_RenderObjectUnpurgeable(struct gl_context *ctx, GLuint name, GLenum option
 
 
 static GLenum
-_mesa_TextureObjectUnpurgeable(struct gl_context *ctx, GLuint name, GLenum option)
+texture_object_unpurgeable(struct gl_context *ctx, GLuint name, GLenum option)
 {
    struct gl_texture_object *bufObj;
    GLenum retval;
@@ -1794,11 +1801,11 @@ _mesa_ObjectUnpurgeableAPPLE(GLenum objectType, GLuint name, GLenum option)
 
    switch (objectType) {
    case GL_BUFFER_OBJECT_APPLE:
-      return _mesa_BufferObjectUnpurgeable(ctx, name, option);
+      return buffer_object_unpurgeable(ctx, name, option);
    case GL_TEXTURE:
-      return _mesa_TextureObjectUnpurgeable(ctx, name, option);
+      return texture_object_unpurgeable(ctx, name, option);
    case GL_RENDERBUFFER_EXT:
-      return _mesa_RenderObjectUnpurgeable(ctx, name, option);
+      return renderbuffer_unpurgeable(ctx, name, option);
    default:
       _mesa_error(ctx, GL_INVALID_ENUM,
                   "glObjectUnpurgeable(name = 0x%x) invalid type: %d",
@@ -1809,12 +1816,10 @@ _mesa_ObjectUnpurgeableAPPLE(GLenum objectType, GLuint name, GLenum option)
 
 
 static void
-_mesa_GetBufferObjectParameterivAPPLE(struct gl_context *ctx, GLuint name,
-                                      GLenum pname, GLint* params)
+get_buffer_object_parameteriv(struct gl_context *ctx, GLuint name,
+                              GLenum pname, GLint *params)
 {
-   struct gl_buffer_object *bufObj;
-
-   bufObj = _mesa_lookup_bufferobj(ctx, name);
+   struct gl_buffer_object *bufObj = _mesa_lookup_bufferobj(ctx, name);
    if (!bufObj) {
       _mesa_error(ctx, GL_INVALID_VALUE,
                   "glGetObjectParameteriv(name = 0x%x) invalid object", name);
@@ -1835,13 +1840,11 @@ _mesa_GetBufferObjectParameterivAPPLE(struct gl_context *ctx, GLuint name,
 
 
 static void
-_mesa_GetRenderObjectParameterivAPPLE(struct gl_context *ctx, GLuint name,
-                                      GLenum pname, GLint* params)
+get_renderbuffer_parameteriv(struct gl_context *ctx, GLuint name,
+                             GLenum pname, GLint *params)
 {
-   struct gl_renderbuffer *bufObj;
-
-   bufObj = _mesa_lookup_renderbuffer(ctx, name);
-   if (!bufObj) {
+   struct gl_renderbuffer *rb = _mesa_lookup_renderbuffer(ctx, name);
+   if (!rb) {
       _mesa_error(ctx, GL_INVALID_VALUE,
                   "glObjectUnpurgeable(name = 0x%x)", name);
       return;
@@ -1849,7 +1852,7 @@ _mesa_GetRenderObjectParameterivAPPLE(struct gl_context *ctx, GLuint name,
 
    switch (pname) {
    case GL_PURGEABLE_APPLE:
-      *params = bufObj->Purgeable;
+      *params = rb->Purgeable;
       break;
    default:
       _mesa_error(ctx, GL_INVALID_ENUM,
@@ -1861,13 +1864,11 @@ _mesa_GetRenderObjectParameterivAPPLE(struct gl_context *ctx, GLuint name,
 
 
 static void
-_mesa_GetTextureObjectParameterivAPPLE(struct gl_context *ctx, GLuint name,
-                                       GLenum pname, GLint* params)
+get_texture_object_parameteriv(struct gl_context *ctx, GLuint name,
+                               GLenum pname, GLint *params)
 {
-   struct gl_texture_object *bufObj;
-
-   bufObj = _mesa_lookup_texture(ctx, name);
-   if (!bufObj) {
+   struct gl_texture_object *texObj = _mesa_lookup_texture(ctx, name);
+   if (!texObj) {
       _mesa_error(ctx, GL_INVALID_VALUE,
                   "glObjectUnpurgeable(name = 0x%x)", name);
       return;
@@ -1875,7 +1876,7 @@ _mesa_GetTextureObjectParameterivAPPLE(struct gl_context *ctx, GLuint name,
 
    switch (pname) {
    case GL_PURGEABLE_APPLE:
-      *params = bufObj->Purgeable;
+      *params = texObj->Purgeable;
       break;
    default:
       _mesa_error(ctx, GL_INVALID_ENUM,
@@ -1888,7 +1889,7 @@ _mesa_GetTextureObjectParameterivAPPLE(struct gl_context *ctx, GLuint name,
 
 void GLAPIENTRY
 _mesa_GetObjectParameterivAPPLE(GLenum objectType, GLuint name, GLenum pname,
-                                GLintparams)
+                                GLint *params)
 {
    GET_CURRENT_CONTEXT(ctx);
 
@@ -1900,13 +1901,13 @@ _mesa_GetObjectParameterivAPPLE(GLenum objectType, GLuint name, GLenum pname,
 
    switch (objectType) {
    case GL_TEXTURE:
-      _mesa_GetTextureObjectParameterivAPPLE (ctx, name, pname, params);
+      get_texture_object_parameteriv(ctx, name, pname, params);
       break;
    case GL_BUFFER_OBJECT_APPLE:
-      _mesa_GetBufferObjectParameterivAPPLE (ctx, name, pname, params);
+      get_buffer_object_parameteriv(ctx, name, pname, params);
       break;
    case GL_RENDERBUFFER_EXT:
-      _mesa_GetRenderObjectParameterivAPPLE (ctx, name, pname, params);
+      get_renderbuffer_parameteriv(ctx, name, pname, params);
       break;
    default:
       _mesa_error(ctx, GL_INVALID_ENUM,
index 5c37f3d1a86874d8e85d5fbd86cb0bd039cfec12..96ee1ace728e695f8f572e016e6b6d3b154d379c 100644 (file)
@@ -407,7 +407,6 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers,
                fb->_ColorDrawBufferIndexes[buf] = bufIndex;
                newState = GL_TRUE;
             }
-            fb->ColorDrawBuffer[buf] = buffers[buf];
             count = buf + 1;
          }
          else {
@@ -416,6 +415,7 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers,
                newState = GL_TRUE;
             }
          }
+         fb->ColorDrawBuffer[buf] = buffers[buf];
       }
       /* set remaining outputs to -1 (GL_NONE) */
       while (buf < ctx->Const.MaxDrawBuffers) {
index 43a9ccc116a1777dc45502130109486e349e73f9..fa95e4522f29ee9cf8d80d7b04484ed986b22809 100644 (file)
@@ -78,19 +78,27 @@ _mesa_ClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha )
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
-   tmp[0] = CLAMP(red,   0.0F, 1.0F);
-   tmp[1] = CLAMP(green, 0.0F, 1.0F);
-   tmp[2] = CLAMP(blue,  0.0F, 1.0F);
-   tmp[3] = CLAMP(alpha, 0.0F, 1.0F);
+   tmp[0] = red;
+   tmp[1] = green;
+   tmp[2] = blue;
+   tmp[3] = alpha;
 
-   if (TEST_EQ_4V(tmp, ctx->Color.ClearColor))
+   if (TEST_EQ_4V(tmp, ctx->Color.ClearColorUnclamped))
       return; /* no change */
 
    FLUSH_VERTICES(ctx, _NEW_COLOR);
-   COPY_4V(ctx->Color.ClearColor, tmp);
+   COPY_4V(ctx->Color.ClearColorUnclamped, tmp);
+
+   ctx->Color.ClearColor[0] = CLAMP(tmp[0], 0.0F, 1.0F);
+   ctx->Color.ClearColor[1] = CLAMP(tmp[1], 0.0F, 1.0F);
+   ctx->Color.ClearColor[2] = CLAMP(tmp[2], 0.0F, 1.0F);
+   ctx->Color.ClearColor[3] = CLAMP(tmp[3], 0.0F, 1.0F);
 
    if (ctx->Driver.ClearColor) {
       /* it's OK to call glClearColor in CI mode but it should be a NOP */
+      /* we pass the clamped color, since all drivers that need this don't
+       * support GL_ARB_color_buffer_float
+       */
       (*ctx->Driver.ClearColor)(ctx, ctx->Color.ClearColor);
    }
 }
index be8ce4278cdf54970ba31752f95f92c2d28539c1..ba2028cf2e19ed82fee223d4dc1b66766525c637 100644 (file)
 #include "math/m_matrix.h"
 
 
+/**
+ * Update derived clip plane state.
+ */
+void
+_mesa_update_clip_plane(struct gl_context *ctx, GLuint plane)
+{
+   if (_math_matrix_is_dirty(ctx->ProjectionMatrixStack.Top))
+      _math_matrix_analyse( ctx->ProjectionMatrixStack.Top );
 
-/**********************************************************************/
-/*                     Get/Set User clip-planes.                      */
-/**********************************************************************/
-
+   /* Clip-Space Plane = Eye-Space Plane * Projection Matrix */
+   _mesa_transform_vector(ctx->Transform._ClipUserPlane[plane],
+                          ctx->Transform.EyeUserPlane[plane],
+                          ctx->ProjectionMatrixStack.Top->inv);
+}
 
 
 void GLAPIENTRY
@@ -78,17 +87,8 @@ _mesa_ClipPlane( GLenum plane, const GLdouble *eq )
    FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
    COPY_4FV(ctx->Transform.EyeUserPlane[p], equation);
 
-   /* Update derived state.  This state also depends on the projection
-    * matrix, and is recalculated on changes to the projection matrix by
-    * code in _mesa_update_state().
-    */
    if (ctx->Transform.ClipPlanesEnabled & (1 << p)) {
-      if (_math_matrix_is_dirty(ctx->ProjectionMatrixStack.Top))
-         _math_matrix_analyse( ctx->ProjectionMatrixStack.Top );
-
-      _mesa_transform_vector( ctx->Transform._ClipUserPlane[p],
-                          ctx->Transform.EyeUserPlane[p],
-                          ctx->ProjectionMatrixStack.Top->inv );
+      _mesa_update_clip_plane(ctx, p);
    }
 
    if (ctx->Driver.ClipPlane)
index 11431dcfce01ed371003b6bd2459a7127e9846a3..a8e6d768758ccd50fa8f112df0b31b31ba89513e 100644 (file)
 
 #include "glheader.h"
 
+struct gl_context;
+
+extern void
+_mesa_update_clip_plane(struct gl_context *ctx, GLuint plane);
+
 extern void GLAPIENTRY 
 _mesa_ClipPlane( GLenum plane, const GLdouble *equation );
 
index d0c865735acfa7fc49acd65f77b376a70db4d92b..35b3096f650b3779ba83227a1d6786482b261ab5 100644 (file)
@@ -516,6 +516,7 @@ _mesa_GetColorTable( GLenum target, GLenum format,
    struct gl_texture_unit *texUnit = _mesa_get_current_tex_unit(ctx);
    struct gl_color_table *table = NULL;
    GLfloat rgba[MAX_COLOR_TABLE_SIZE][4];
+   GLbitfield transferOps = 0;
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
    if (ctx->NewState) {
@@ -618,8 +619,12 @@ _mesa_GetColorTable( GLenum target, GLenum format,
    if (!data)
       return;
 
+   /* TODO: is this correct? */
+   if(ctx->Color._ClampReadColor)
+      transferOps |= IMAGE_CLAMP_BIT;
+
    _mesa_pack_rgba_span_float(ctx, table->Size, rgba,
-                              format, type, data, &ctx->Pack, 0x0);
+                              format, type, data, &ctx->Pack, transferOps);
 
    _mesa_unmap_pbo_dest(ctx, &ctx->Pack);
 }
index 5557a3b5cb5ac4ffd804bb27d84ee22d389dc6c6..e17fd0ff6fd32b6ea856d8e98c8d8dd8bd998d5e 100644 (file)
@@ -171,12 +171,14 @@ 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))
-#  define PUBLIC __attribute__((visibility("default")))
-#  define USED __attribute__((used))
-#else
-#  define PUBLIC
-#  define USED
+#ifndef PUBLIC
+#  if defined(__GNUC__) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
+#    define PUBLIC __attribute__((visibility("default")))
+#    define USED __attribute__((used))
+#  else
+#    define PUBLIC
+#    define USED
+#  endif
 #endif
 
 
@@ -195,15 +197,17 @@ extern "C" {
  * __builtin_expect macros
  */
 #if !defined(__GNUC__)
-#  define __builtin_expect(x, y) x
+#  define __builtin_expect(x, y) (x)
 #endif
 
-#ifdef __GNUC__
-#define likely(x) __builtin_expect(!!(x), 1)
-#define unlikely(x) __builtin_expect(!!(x), 0)
-#else
-#define likely(x) !!(x)
-#define unlikely(x) !!(x)
+#ifndef likely
+#  ifdef __GNUC__
+#    define likely(x)   __builtin_expect(!!(x), 1)
+#    define unlikely(x) __builtin_expect(!!(x), 0)
+#  else
+#    define likely(x)   (x)
+#    define unlikely(x) (x)
+#  endif
 #endif
 
 /**
index ca74284ca89d91077e753c9606adbea0fa4b7ec9..8053edc23b2fa99e5ae96811d2b18146bfd05f81 100644 (file)
@@ -191,7 +191,8 @@ _mesa_notifySwapBuffers(struct gl_context *ctx)
  * is acceptable but the actual depth type will be GLushort or GLuint as
  * needed.
  * \param stencilBits requested minimum bits per stencil buffer value
- * \param accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits number of bits per color component in accum buffer.
+ * \param accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits number
+ * of bits per color component in accum buffer.
  * \param indexBits number of bits per pixel if \p rgbFlag is GL_FALSE
  * \param redBits number of bits per color component in frame buffer for RGB(A)
  * mode.  We always use 8 in core Mesa though.
@@ -200,8 +201,8 @@ _mesa_notifySwapBuffers(struct gl_context *ctx)
  * \param alphaBits same as above.
  * \param numSamples not really used.
  * 
- * \return pointer to new struct gl_config or NULL if requested parameters can't be
- * met.
+ * \return pointer to new struct gl_config or NULL if requested parameters
+ * can't be met.
  *
  * \note Need to add params for level and numAuxBuffers (at least)
  */
@@ -567,6 +568,7 @@ _mesa_init_constants(struct gl_context *ctx)
                                      ctx->Const.MaxTextureImageUnits);
    ctx->Const.MaxTextureMaxAnisotropy = MAX_TEXTURE_MAX_ANISOTROPY;
    ctx->Const.MaxTextureLodBias = MAX_TEXTURE_LOD_BIAS;
+   ctx->Const.MaxTextureBufferSize = 65536;
    ctx->Const.MaxArrayLockSize = MAX_ARRAY_LOCK_SIZE;
    ctx->Const.SubPixelBits = SUB_PIXEL_BITS;
    ctx->Const.MinPointSize = MIN_POINT_SIZE;
@@ -1185,7 +1187,8 @@ _mesa_destroy_context( struct gl_context *ctx )
  * structures.
  */
 void
-_mesa_copy_context( const struct gl_context *src, struct gl_context *dst, GLuint mask )
+_mesa_copy_context( const struct gl_context *src, struct gl_context *dst,
+                    GLuint mask )
 {
    if (mask & GL_ACCUM_BUFFER_BIT) {
       /* OK to memcpy */
index 33a36311c8a60cfbcb3c5ec2d93ce97517980ab0..a4c7ba2c54d1bf4f668c81269046e4cc09d826a7 100644 (file)
  * There are three large Mesa data types/classes which are meant to be
  * used by device drivers:
  * - struct gl_context: this contains the Mesa rendering state
- * - struct gl_config:  this describes the color buffer (RGB vs. ci), whether or not
- *   there's a depth buffer, stencil buffer, etc.
- * - struct gl_framebuffer:  contains pointers to the depth buffer, stencil buffer,
- *   accum buffer and alpha buffers.
+ * - struct gl_config:  this describes the color buffer (RGB vs. ci), whether
+ *   or not there's a depth buffer, stencil buffer, etc.
+ * - struct gl_framebuffer:  contains pointers to the depth buffer, stencil
+ *   buffer, accum buffer and alpha buffers.
  *
  * These types should be encapsulated by corresponding device driver
  * data types.  See xmesa.h and xmesaP.h for an example.
  *
- * In OOP terms, struct gl_context, struct gl_config, and struct gl_framebuffer are base classes
- * which the device driver must derive from.
+ * In OOP terms, struct gl_context, struct gl_config, and struct gl_framebuffer
+ * are base classes which the device driver must derive from.
  *
  * The following functions create and destroy these data types.
  */
index 34d67b5bac82a6615a46cd4ca997ce57417813f3..d749b245e13d9ff1991f10bc19037d78caa75d41 100644 (file)
@@ -1021,6 +1021,14 @@ struct dd_function_table {
     * \name GL_NV_texture_barrier interface
     */
    void (*TextureBarrier)(struct gl_context *ctx);
+
+   /**
+    * \name GL_ARB_sampler_objects
+    */
+   struct gl_sampler_object * (*NewSamplerObject)(struct gl_context *ctx,
+                                                  GLuint name);
+   void (*DeleteSamplerObject)(struct gl_context *ctx,
+                               struct gl_sampler_object *samp);
 };
 
 
index 78881668e4953684168cd3abde15bd18ca56f201..e7f6be99481e9dd7c078efd616e69136da851498 100644 (file)
@@ -183,7 +183,7 @@ static void add_debug_flags( const char *debug )
 
    MESA_VERBOSE = 0x0;
    for (i = 0; i < Elements(debug_opt); i++) {
-      if (strstr(debug, debug_opt[i].name))
+      if (strstr(debug, debug_opt[i].name) || strcmp(debug, "all") == 0)
          MESA_VERBOSE |= debug_opt[i].flag;
    }
 
@@ -251,6 +251,9 @@ write_ppm(const char *filename, const GLubyte *buffer, int width, int height,
       }
       fclose(f);
    }
+   else {
+      fprintf(stderr, "Unable to create %s in write_ppm()\n", filename);
+   }
 }
 
 
@@ -549,6 +552,27 @@ _mesa_dump_stencil_buffer(const char *filename)
 }
 
 
+void
+_mesa_dump_image(const char *filename, const void *image, GLuint w, GLuint h,
+                 GLenum format, GLenum type)
+{
+   GLboolean invert = GL_TRUE;
+
+   if (format == GL_RGBA && type == GL_UNSIGNED_BYTE) {
+      write_ppm(filename, image, w, h, 4, 0, 1, 2, invert);
+   }
+   else if (format == GL_BGRA && type == GL_UNSIGNED_BYTE) {
+      write_ppm(filename, image, w, h, 4, 2, 1, 0, invert);
+   }
+   else if (format == GL_LUMINANCE_ALPHA && type == GL_UNSIGNED_BYTE) {
+      write_ppm(filename, image, w, h, 2, 1, 0, 0, invert);
+   }
+   else {
+      _mesa_problem(NULL, "Unsupported format/type in _mesa_dump_image()");
+   }
+}
+
+
 /**
  * Quick and dirty function to "print" a texture to stdout.
  */
index 4968a9f197911419b866b28e022e3d00337268e7..d7c53b65504bcd258d6cbaa6cc99303ca5038ab1 100644 (file)
@@ -84,6 +84,10 @@ _mesa_dump_depth_buffer(const char *filename);
 extern void
 _mesa_dump_stencil_buffer(const char *filename);
 
+extern void
+_mesa_dump_image(const char *filename, const void *image, GLuint w, GLuint h,
+                 GLenum format, GLenum type);
+
 extern void
 _mesa_print_texture(struct gl_context *ctx, const struct gl_texture_image *img);
 
index c5466dc9fccbde0cca42014d5c04e1d69b2102e1..ab62c97fe5ac5728b71cf3dac2a5363acee01b13 100644 (file)
@@ -91,6 +91,7 @@ alloc_wrapper_storage(struct gl_context *ctx, struct gl_renderbuffer *rb,
    if (retVal) {
       rb->Width = width;
       rb->Height = height;
+      rb->RowStride = dsrb->RowStride;
    }
    return retVal;
 }
@@ -371,6 +372,7 @@ _mesa_new_z24_renderbuffer_wrapper(struct gl_context *ctx,
    z24rb->RefCount = 0;
    z24rb->Width = dsrb->Width;
    z24rb->Height = dsrb->Height;
+   z24rb->RowStride = dsrb->RowStride;
    z24rb->InternalFormat = GL_DEPTH_COMPONENT24;
    z24rb->Format = MESA_FORMAT_X8_Z24;
    z24rb->_BaseFormat = GL_DEPTH_COMPONENT;
@@ -657,6 +659,7 @@ _mesa_new_s8_renderbuffer_wrapper(struct gl_context *ctx, struct gl_renderbuffer
    s8rb->RefCount = 0;
    s8rb->Width = dsrb->Width;
    s8rb->Height = dsrb->Height;
+   s8rb->RowStride = dsrb->RowStride;
    s8rb->InternalFormat = GL_STENCIL_INDEX8_EXT;
    s8rb->Format = MESA_FORMAT_S8;
    s8rb->_BaseFormat = GL_STENCIL_INDEX;
index 0112d9dde363febaee68b4036628328fae3aec79..f66082e7fce65d9d28380dbada5ce9d472b87bc4 100644 (file)
@@ -49,6 +49,7 @@
 #include "eval.h"
 #include "framebuffer.h"
 #include "glapi/glapi.h"
+#include "glapidispatch.h"
 #include "hash.h"
 #include "image.h"
 #include "light.h"
@@ -388,6 +389,9 @@ typedef enum
    OPCODE_UNIFORM_3UIV,
    OPCODE_UNIFORM_4UIV,
 
+   /* GL_ARB_color_buffer_float */
+   OPCODE_CLAMP_COLOR,
+
    /* GL_EXT_framebuffer_blit */
    OPCODE_BLIT_FRAMEBUFFER,
 
@@ -434,6 +438,9 @@ typedef enum
    /* GL_NV_texture_barrier */
    OPCODE_TEXTURE_BARRIER_NV,
 
+   /* GL_ARB_sampler_object */
+   OPCODE_BIND_SAMPLER,
+
    /* The following three are meta instructions */
    OPCODE_ERROR,                /* raise compiled-in error */
    OPCODE_CONTINUE,
@@ -6886,6 +6893,22 @@ save_UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose,
    }
 }
 
+static void GLAPIENTRY
+save_ClampColorARB(GLenum target, GLenum clamp)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   Node *n;
+   ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+   n = alloc_instruction(ctx, OPCODE_CLAMP_COLOR, 2);
+   if (n) {
+      n[1].e = target;
+      n[2].e = clamp;
+   }
+   if (ctx->ExecuteFlag) {
+      CALL_ClampColorARB(ctx->Exec, (target, clamp));
+   }
+}
+
 static void GLAPIENTRY
 save_UseShaderProgramEXT(GLenum type, GLuint program)
 {
@@ -7036,7 +7059,7 @@ save_VertexAttribDivisor(GLuint index, GLuint divisor)
 
 /* GL_NV_texture_barrier */
 static void
-save_TextureBarrierNV()
+save_TextureBarrierNV(void)
 {
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
@@ -7047,6 +7070,24 @@ save_TextureBarrierNV()
 }
 
 
+/* GL_ARB_sampler_objects */
+static void
+save_BindSampler(GLuint unit, GLuint sampler)
+{
+   Node *n;
+   GET_CURRENT_CONTEXT(ctx);
+   ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+   n = alloc_instruction(ctx, OPCODE_BIND_SAMPLER, 2);
+   if (n) {
+      n[1].ui = unit;
+      n[2].ui = sampler;
+   }
+   if (ctx->ExecuteFlag) {
+      CALL_BindSampler(ctx->Exec, (unit, sampler));
+   }
+}
+
+
 /**
  * Save an error-generating command into display list.
  *
@@ -8071,6 +8112,10 @@ execute_list(struct gl_context *ctx, GLuint list)
                                     (n[1].i, n[2].i, n[3].b, n[4].data));
            break;
 
+         case OPCODE_CLAMP_COLOR:
+            CALL_ClampColorARB(ctx->Exec, (n[1].e, n[2].e));
+            break;
+
          case OPCODE_TEX_BUMP_PARAMETER_ATI:
             {
                GLfloat values[4];
@@ -8226,6 +8271,10 @@ execute_list(struct gl_context *ctx, GLuint list)
             CALL_TextureBarrierNV(ctx->Exec, ());
             break;
 
+         case OPCODE_BIND_SAMPLER:
+            CALL_BindSampler(ctx->Exec, (n[1].ui, n[2].ui));
+            break;
+
          case OPCODE_CONTINUE:
             n = (Node *) n[1].next;
             break;
@@ -9868,6 +9917,10 @@ _mesa_create_save_table(void)
    SET_UseShaderProgramEXT(table, save_UseShaderProgramEXT);
    SET_ActiveProgramEXT(table, save_ActiveProgramEXT);
 
+   /* GL_ARB_color_buffer_float */
+   SET_ClampColorARB(table, save_ClampColorARB);
+   SET_ClampColor(table, save_ClampColorARB);
+
    /* GL 3.0 */
 #if 0
    SET_ClearBufferiv(table, save_ClearBufferiv);
@@ -9903,6 +9956,9 @@ _mesa_create_save_table(void)
    /* GL_NV_texture_barrier */
    SET_TextureBarrierNV(table, save_TextureBarrierNV);
 
+   /* GL_ARB_sampler_objects */
+   SET_BindSampler(table, save_BindSampler);
+
    /* GL_ARB_draw_buffer_blend */
    SET_BlendFunciARB(table, save_BlendFunci);
    SET_BlendFuncSeparateiARB(table, save_BlendFuncSeparatei);
index fb86036a188b9b93f186469b7a47433e1dee3a77..ee379f71bf5618b57acac2c7d5ca3896089fb165 100644 (file)
@@ -188,7 +188,7 @@ _mesa_CopyPixels( GLint srcx, GLint srcy, GLsizei width, GLsizei height,
       goto end;
    }
 
-   if (!ctx->Current.RasterPosValid || width ==0 || height == 0) {
+   if (!ctx->Current.RasterPosValid || width == 0 || height == 0) {
       goto end; /* no-op, not an error */
    }
 
index f247092410b4d3bf1c6db4f80cc8fb2fc7564d87..2ec19c8afbd06eae524c4e75484a09df85f5af37 100644 (file)
@@ -29,6 +29,7 @@
 
 
 #include "glheader.h"
+#include "clip.h"
 #include "context.h"
 #include "enable.h"
 #include "light.h"
@@ -213,8 +214,8 @@ _mesa_DisableClientState( GLenum cap )
 /**
  * Return pointer to current texture unit for setting/getting coordinate
  * state.
- * Note that we'll set GL_INVALID_OPERATION if the active texture unit is
- * higher than the number of supported coordinate units.  And we'll return NULL.
+ * Note that we'll set GL_INVALID_OPERATION and return NULL if the active
+ * texture unit is higher than the number of supported coordinate units.
  */
 static struct gl_texture_unit *
 get_texcoord_unit(struct gl_context *ctx)
@@ -286,7 +287,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
          break;
       case GL_BLEND:
          {
-            GLbitfield newEnabled = state * ((1 << ctx->Const.MaxDrawBuffers) - 1);
+            GLbitfield newEnabled =
+               state * ((1 << ctx->Const.MaxDrawBuffers) - 1);
             if (newEnabled != ctx->Color.BlendEnabled) {
                FLUSH_VERTICES(ctx, _NEW_COLOR);
                ctx->Color.BlendEnabled = newEnabled;
@@ -303,24 +305,15 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
          {
             const GLuint p = cap - GL_CLIP_PLANE0;
 
-            if ((ctx->Transform.ClipPlanesEnabled & (1 << p)) == ((GLuint) state << p))
+            if ((ctx->Transform.ClipPlanesEnabled & (1 << p))
+                == ((GLuint) state << p))
                return;
 
             FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
 
             if (state) {
                ctx->Transform.ClipPlanesEnabled |= (1 << p);
-
-               if (_math_matrix_is_dirty(ctx->ProjectionMatrixStack.Top))
-                  _math_matrix_analyse( ctx->ProjectionMatrixStack.Top );
-
-               /* This derived state also calculated in clip.c and
-                * from _mesa_update_state() on changes to EyeUserPlane
-                * and ctx->ProjectionMatrix respectively.
-                */
-               _mesa_transform_vector( ctx->Transform._ClipUserPlane[p],
-                                    ctx->Transform.EyeUserPlane[p],
-                                    ctx->ProjectionMatrixStack.Top->inv );
+               _mesa_update_clip_plane(ctx, p);
             }
             else {
                ctx->Transform.ClipPlanesEnabled &= ~(1 << p);
@@ -612,55 +605,17 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
             return;
          }
          break;
-      case GL_TEXTURE_GEN_Q:
-         {
-            struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
-            if (texUnit) {
-               GLuint newenabled = texUnit->TexGenEnabled & ~Q_BIT;
-               if (state)
-                  newenabled |= Q_BIT;
-               if (texUnit->TexGenEnabled == newenabled)
-                  return;
-               FLUSH_VERTICES(ctx, _NEW_TEXTURE);
-               texUnit->TexGenEnabled = newenabled;
-            }
-         }
-         break;
-      case GL_TEXTURE_GEN_R:
-         {
-            struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
-            if (texUnit) {
-               GLuint newenabled = texUnit->TexGenEnabled & ~R_BIT;
-               if (state)
-                  newenabled |= R_BIT;
-               if (texUnit->TexGenEnabled == newenabled)
-                  return;
-               FLUSH_VERTICES(ctx, _NEW_TEXTURE);
-               texUnit->TexGenEnabled = newenabled;
-            }
-         }
-         break;
       case GL_TEXTURE_GEN_S:
-         {
-            struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
-            if (texUnit) {
-               GLuint newenabled = texUnit->TexGenEnabled & ~S_BIT;
-               if (state)
-                  newenabled |= S_BIT;
-               if (texUnit->TexGenEnabled == newenabled)
-                  return;
-               FLUSH_VERTICES(ctx, _NEW_TEXTURE);
-               texUnit->TexGenEnabled = newenabled;
-            }
-         }
-         break;
       case GL_TEXTURE_GEN_T:
+      case GL_TEXTURE_GEN_R:
+      case GL_TEXTURE_GEN_Q:
          {
             struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
             if (texUnit) {
-               GLuint newenabled = texUnit->TexGenEnabled & ~T_BIT;
+               GLbitfield coordBit = S_BIT << (cap - GL_TEXTURE_GEN_S);
+               GLbitfield newenabled = texUnit->TexGenEnabled & ~coordBit;
                if (state)
-                  newenabled |= T_BIT;
+                  newenabled |= coordBit;
                if (texUnit->TexGenEnabled == newenabled)
                   return;
                FLUSH_VERTICES(ctx, _NEW_TEXTURE);
@@ -1012,7 +967,8 @@ _mesa_Disable( GLenum cap )
  * Enable/disable an indexed state var.
  */
 void
-_mesa_set_enablei(struct gl_context *ctx, GLenum cap, GLuint index, GLboolean state)
+_mesa_set_enablei(struct gl_context *ctx, GLenum cap,
+                  GLuint index, GLboolean state)
 {
    ASSERT(state == 0 || state == 1);
    switch (cap) {
@@ -1231,35 +1187,15 @@ _mesa_IsEnabled( GLenum cap )
          return is_texture_enabled(ctx, TEXTURE_2D_BIT);
       case GL_TEXTURE_3D:
          return is_texture_enabled(ctx, TEXTURE_3D_BIT);
-      case GL_TEXTURE_GEN_Q:
-         {
-            const struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
-            if (texUnit) {
-               return (texUnit->TexGenEnabled & Q_BIT) ? GL_TRUE : GL_FALSE;
-            }
-         }
-         return GL_FALSE;
-      case GL_TEXTURE_GEN_R:
-         {
-            const struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
-            if (texUnit) {
-               return (texUnit->TexGenEnabled & R_BIT) ? GL_TRUE : GL_FALSE;
-            }
-         }
-         return GL_FALSE;
       case GL_TEXTURE_GEN_S:
-         {
-            const struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
-            if (texUnit) {
-               return (texUnit->TexGenEnabled & S_BIT) ? GL_TRUE : GL_FALSE;
-            }
-         }
-         return GL_FALSE;
       case GL_TEXTURE_GEN_T:
+      case GL_TEXTURE_GEN_R:
+      case GL_TEXTURE_GEN_Q:
          {
             const struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
             if (texUnit) {
-               return (texUnit->TexGenEnabled & T_BIT) ? GL_TRUE : GL_FALSE;
+               GLbitfield coordBit = S_BIT << (cap - GL_TEXTURE_GEN_S);
+               return (texUnit->TexGenEnabled & coordBit) ? GL_TRUE : GL_FALSE;
             }
          }
          return GL_FALSE;
@@ -1268,7 +1204,8 @@ _mesa_IsEnabled( GLenum cap )
         {
             const struct gl_texture_unit *texUnit = get_texcoord_unit(ctx);
             if (texUnit) {
-                   return (texUnit->TexGenEnabled & STR_BITS) == STR_BITS ? GL_TRUE : GL_FALSE;
+               return (texUnit->TexGenEnabled & STR_BITS) == STR_BITS
+                  ? GL_TRUE : GL_FALSE;
             }
          }
 #endif
@@ -1285,7 +1222,8 @@ _mesa_IsEnabled( GLenum cap )
       case GL_INDEX_ARRAY:
          return (ctx->Array.ArrayObj->Index.Enabled != 0);
       case GL_TEXTURE_COORD_ARRAY:
-         return (ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled != 0);
+         return (ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture]
+                 .Enabled != 0);
       case GL_EDGE_FLAG_ARRAY:
          return (ctx->Array.ArrayObj->EdgeFlag.Enabled != 0);
       case GL_FOG_COORDINATE_ARRAY_EXT:
index e9d6b6b156cd0f8d8dfc9cc79ed71169bdaee83c..98cbbf53b8519e28a77ea5d0610b26c361989756 100644 (file)
@@ -193,12 +193,15 @@ LONGSTRING static const char enum_string_table[] =
    "GL_C4UB_V3F\0"
    "GL_CCW\0"
    "GL_CLAMP\0"
+   "GL_CLAMP_FRAGMENT_COLOR_ARB\0"
    "GL_CLAMP_READ_COLOR\0"
+   "GL_CLAMP_READ_COLOR_ARB\0"
    "GL_CLAMP_TO_BORDER\0"
    "GL_CLAMP_TO_BORDER_ARB\0"
    "GL_CLAMP_TO_BORDER_SGIS\0"
    "GL_CLAMP_TO_EDGE\0"
    "GL_CLAMP_TO_EDGE_SGIS\0"
+   "GL_CLAMP_VERTEX_COLOR_ARB\0"
    "GL_CLEAR\0"
    "GL_CLIENT_ACTIVE_TEXTURE\0"
    "GL_CLIENT_ACTIVE_TEXTURE_ARB\0"
@@ -584,6 +587,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_FIXED\0"
    "GL_FIXED_OES\0"
    "GL_FIXED_ONLY\0"
+   "GL_FIXED_ONLY_ARB\0"
    "GL_FLAT\0"
    "GL_FLOAT\0"
    "GL_FLOAT_MAT2\0"
@@ -1140,6 +1144,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_MAX_SHININESS_NV\0"
    "GL_MAX_SPOT_EXPONENT_NV\0"
    "GL_MAX_TEXTURE_BUFFER_SIZE\0"
+   "GL_MAX_TEXTURE_BUFFER_SIZE_ARB\0"
    "GL_MAX_TEXTURE_COORDS\0"
    "GL_MAX_TEXTURE_COORDS_ARB\0"
    "GL_MAX_TEXTURE_IMAGE_UNITS\0"
@@ -1708,6 +1713,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_RGBA8_OES\0"
    "GL_RGBA8_SNORM\0"
    "GL_RGBA_DXT5_S3TC\0"
+   "GL_RGBA_FLOAT_MODE_ARB\0"
    "GL_RGBA_INTEGER\0"
    "GL_RGBA_INTEGER_EXT\0"
    "GL_RGBA_INTEGER_MODE_EXT\0"
@@ -1740,6 +1746,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_SAMPLER_2D_SHADOW\0"
    "GL_SAMPLER_3D\0"
    "GL_SAMPLER_3D_OES\0"
+   "GL_SAMPLER_BINDING\0"
    "GL_SAMPLER_BUFFER\0"
    "GL_SAMPLER_BUFFER_EXT\0"
    "GL_SAMPLER_CUBE\0"
@@ -2007,6 +2014,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_TEXTURE_BINDING_3D\0"
    "GL_TEXTURE_BINDING_3D_OES\0"
    "GL_TEXTURE_BINDING_BUFFER\0"
+   "GL_TEXTURE_BINDING_BUFFER_ARB\0"
    "GL_TEXTURE_BINDING_CUBE_MAP\0"
    "GL_TEXTURE_BINDING_CUBE_MAP_ARB\0"
    "GL_TEXTURE_BINDING_CUBE_MAP_OES\0"
@@ -2019,8 +2027,11 @@ LONGSTRING static const char enum_string_table[] =
    "GL_TEXTURE_BORDER\0"
    "GL_TEXTURE_BORDER_COLOR\0"
    "GL_TEXTURE_BUFFER\0"
+   "GL_TEXTURE_BUFFER_ARB\0"
    "GL_TEXTURE_BUFFER_DATA_STORE_BINDING\0"
+   "GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB\0"
    "GL_TEXTURE_BUFFER_FORMAT\0"
+   "GL_TEXTURE_BUFFER_FORMAT_ARB\0"
    "GL_TEXTURE_CLIPMAP_CENTER_SGIX\0"
    "GL_TEXTURE_CLIPMAP_DEPTH_SGIX\0"
    "GL_TEXTURE_CLIPMAP_FRAME_SGIX\0"
@@ -2334,7 +2345,7 @@ LONGSTRING static const char enum_string_table[] =
    "GL_ZOOM_Y\0"
    ;
 
-static const enum_elt all_enums[2295] =
+static const enum_elt all_enums[2306] =
 {
    {     0, 0x00000600 }, /* GL_2D */
    {     6, 0x00001407 }, /* GL_2_BYTES */
@@ -2492,3700 +2503,3715 @@ static const enum_elt all_enums[2295] =
    {  2689, 0x00002A23 }, /* GL_C4UB_V3F */
    {  2701, 0x00000901 }, /* GL_CCW */
    {  2708, 0x00002900 }, /* GL_CLAMP */
-   {  2717, 0x0000891C }, /* GL_CLAMP_READ_COLOR */
-   {  2737, 0x0000812D }, /* GL_CLAMP_TO_BORDER */
-   {  2756, 0x0000812D }, /* GL_CLAMP_TO_BORDER_ARB */
-   {  2779, 0x0000812D }, /* GL_CLAMP_TO_BORDER_SGIS */
-   {  2803, 0x0000812F }, /* GL_CLAMP_TO_EDGE */
-   {  2820, 0x0000812F }, /* GL_CLAMP_TO_EDGE_SGIS */
-   {  2842, 0x00001500 }, /* GL_CLEAR */
-   {  2851, 0x000084E1 }, /* GL_CLIENT_ACTIVE_TEXTURE */
-   {  2876, 0x000084E1 }, /* GL_CLIENT_ACTIVE_TEXTURE_ARB */
-   {  2905, 0xFFFFFFFF }, /* GL_CLIENT_ALL_ATTRIB_BITS */
-   {  2931, 0x00000BB1 }, /* GL_CLIENT_ATTRIB_STACK_DEPTH */
-   {  2960, 0x00000001 }, /* GL_CLIENT_PIXEL_STORE_BIT */
-   {  2986, 0x00000002 }, /* GL_CLIENT_VERTEX_ARRAY_BIT */
-   {  3013, 0x00003000 }, /* GL_CLIP_DISTANCE0 */
-   {  3031, 0x00003001 }, /* GL_CLIP_DISTANCE1 */
-   {  3049, 0x00003002 }, /* GL_CLIP_DISTANCE2 */
-   {  3067, 0x00003003 }, /* GL_CLIP_DISTANCE3 */
-   {  3085, 0x00003004 }, /* GL_CLIP_DISTANCE4 */
-   {  3103, 0x00003005 }, /* GL_CLIP_DISTANCE5 */
-   {  3121, 0x00003006 }, /* GL_CLIP_DISTANCE6 */
-   {  3139, 0x00003007 }, /* GL_CLIP_DISTANCE7 */
-   {  3157, 0x00003000 }, /* GL_CLIP_PLANE0 */
-   {  3172, 0x00003001 }, /* GL_CLIP_PLANE1 */
-   {  3187, 0x00003002 }, /* GL_CLIP_PLANE2 */
-   {  3202, 0x00003003 }, /* GL_CLIP_PLANE3 */
-   {  3217, 0x00003004 }, /* GL_CLIP_PLANE4 */
-   {  3232, 0x00003005 }, /* GL_CLIP_PLANE5 */
-   {  3247, 0x000080F0 }, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */
-   {  3280, 0x00000A00 }, /* GL_COEFF */
-   {  3289, 0x00001800 }, /* GL_COLOR */
-   {  3298, 0x00008076 }, /* GL_COLOR_ARRAY */
-   {  3313, 0x00008898 }, /* GL_COLOR_ARRAY_BUFFER_BINDING */
-   {  3343, 0x00008898 }, /* GL_COLOR_ARRAY_BUFFER_BINDING_ARB */
-   {  3377, 0x00008090 }, /* GL_COLOR_ARRAY_POINTER */
-   {  3400, 0x00008081 }, /* GL_COLOR_ARRAY_SIZE */
-   {  3420, 0x00008083 }, /* GL_COLOR_ARRAY_STRIDE */
-   {  3442, 0x00008082 }, /* GL_COLOR_ARRAY_TYPE */
-   {  3462, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0 */
-   {  3483, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0_EXT */
-   {  3508, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0_OES */
-   {  3533, 0x00008CE1 }, /* GL_COLOR_ATTACHMENT1 */
-   {  3554, 0x00008CEA }, /* GL_COLOR_ATTACHMENT10 */
-   {  3576, 0x00008CEA }, /* GL_COLOR_ATTACHMENT10_EXT */
-   {  3602, 0x00008CEB }, /* GL_COLOR_ATTACHMENT11 */
-   {  3624, 0x00008CEB }, /* GL_COLOR_ATTACHMENT11_EXT */
-   {  3650, 0x00008CEC }, /* GL_COLOR_ATTACHMENT12 */
-   {  3672, 0x00008CEC }, /* GL_COLOR_ATTACHMENT12_EXT */
-   {  3698, 0x00008CED }, /* GL_COLOR_ATTACHMENT13 */
-   {  3720, 0x00008CED }, /* GL_COLOR_ATTACHMENT13_EXT */
-   {  3746, 0x00008CEE }, /* GL_COLOR_ATTACHMENT14 */
-   {  3768, 0x00008CEE }, /* GL_COLOR_ATTACHMENT14_EXT */
-   {  3794, 0x00008CEF }, /* GL_COLOR_ATTACHMENT15 */
-   {  3816, 0x00008CEF }, /* GL_COLOR_ATTACHMENT15_EXT */
-   {  3842, 0x00008CE1 }, /* GL_COLOR_ATTACHMENT1_EXT */
-   {  3867, 0x00008CE2 }, /* GL_COLOR_ATTACHMENT2 */
-   {  3888, 0x00008CE2 }, /* GL_COLOR_ATTACHMENT2_EXT */
-   {  3913, 0x00008CE3 }, /* GL_COLOR_ATTACHMENT3 */
-   {  3934, 0x00008CE3 }, /* GL_COLOR_ATTACHMENT3_EXT */
-   {  3959, 0x00008CE4 }, /* GL_COLOR_ATTACHMENT4 */
-   {  3980, 0x00008CE4 }, /* GL_COLOR_ATTACHMENT4_EXT */
-   {  4005, 0x00008CE5 }, /* GL_COLOR_ATTACHMENT5 */
-   {  4026, 0x00008CE5 }, /* GL_COLOR_ATTACHMENT5_EXT */
-   {  4051, 0x00008CE6 }, /* GL_COLOR_ATTACHMENT6 */
-   {  4072, 0x00008CE6 }, /* GL_COLOR_ATTACHMENT6_EXT */
-   {  4097, 0x00008CE7 }, /* GL_COLOR_ATTACHMENT7 */
-   {  4118, 0x00008CE7 }, /* GL_COLOR_ATTACHMENT7_EXT */
-   {  4143, 0x00008CE8 }, /* GL_COLOR_ATTACHMENT8 */
-   {  4164, 0x00008CE8 }, /* GL_COLOR_ATTACHMENT8_EXT */
-   {  4189, 0x00008CE9 }, /* GL_COLOR_ATTACHMENT9 */
-   {  4210, 0x00008CE9 }, /* GL_COLOR_ATTACHMENT9_EXT */
-   {  4235, 0x00004000 }, /* GL_COLOR_BUFFER_BIT */
-   {  4255, 0x00000C22 }, /* GL_COLOR_CLEAR_VALUE */
-   {  4276, 0x00001900 }, /* GL_COLOR_INDEX */
-   {  4291, 0x00001603 }, /* GL_COLOR_INDEXES */
-   {  4308, 0x00000BF2 }, /* GL_COLOR_LOGIC_OP */
-   {  4326, 0x00000B57 }, /* GL_COLOR_MATERIAL */
-   {  4344, 0x00000B55 }, /* GL_COLOR_MATERIAL_FACE */
-   {  4367, 0x00000B56 }, /* GL_COLOR_MATERIAL_PARAMETER */
-   {  4395, 0x000080B1 }, /* GL_COLOR_MATRIX */
-   {  4411, 0x000080B1 }, /* GL_COLOR_MATRIX_SGI */
-   {  4431, 0x000080B2 }, /* GL_COLOR_MATRIX_STACK_DEPTH */
-   {  4459, 0x000080B2 }, /* GL_COLOR_MATRIX_STACK_DEPTH_SGI */
-   {  4491, 0x00008458 }, /* GL_COLOR_SUM */
-   {  4504, 0x00008458 }, /* GL_COLOR_SUM_ARB */
-   {  4521, 0x000080D0 }, /* GL_COLOR_TABLE */
-   {  4536, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE */
-   {  4562, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE_EXT */
-   {  4592, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE_SGI */
-   {  4622, 0x000080D7 }, /* GL_COLOR_TABLE_BIAS */
-   {  4642, 0x000080D7 }, /* GL_COLOR_TABLE_BIAS_SGI */
-   {  4666, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE */
-   {  4691, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE_EXT */
-   {  4720, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE_SGI */
-   {  4749, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT */
-   {  4771, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT_EXT */
-   {  4797, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT_SGI */
-   {  4823, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE */
-   {  4849, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE_EXT */
-   {  4879, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE_SGI */
-   {  4909, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE */
-   {  4939, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE_EXT */
-   {  4973, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE_SGI */
-   {  5007, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE */
-   {  5037, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE_EXT */
-   {  5071, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE_SGI */
-   {  5105, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE */
-   {  5129, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE_EXT */
-   {  5157, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE_SGI */
-   {  5185, 0x000080D6 }, /* GL_COLOR_TABLE_SCALE */
-   {  5206, 0x000080D6 }, /* GL_COLOR_TABLE_SCALE_SGI */
-   {  5231, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH */
-   {  5252, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH_EXT */
-   {  5277, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH_SGI */
-   {  5302, 0x00000C23 }, /* GL_COLOR_WRITEMASK */
-   {  5321, 0x00008570 }, /* GL_COMBINE */
-   {  5332, 0x00008503 }, /* GL_COMBINE4 */
-   {  5344, 0x00008572 }, /* GL_COMBINE_ALPHA */
-   {  5361, 0x00008572 }, /* GL_COMBINE_ALPHA_ARB */
-   {  5382, 0x00008572 }, /* GL_COMBINE_ALPHA_EXT */
-   {  5403, 0x00008570 }, /* GL_COMBINE_ARB */
-   {  5418, 0x00008570 }, /* GL_COMBINE_EXT */
-   {  5433, 0x00008571 }, /* GL_COMBINE_RGB */
-   {  5448, 0x00008571 }, /* GL_COMBINE_RGB_ARB */
-   {  5467, 0x00008571 }, /* GL_COMBINE_RGB_EXT */
-   {  5486, 0x0000884E }, /* GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT */
-   {  5522, 0x0000884E }, /* GL_COMPARE_REF_TO_TEXTURE */
-   {  5548, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE */
-   {  5572, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE_ARB */
-   {  5600, 0x00001300 }, /* GL_COMPILE */
-   {  5611, 0x00001301 }, /* GL_COMPILE_AND_EXECUTE */
-   {  5634, 0x00008B81 }, /* GL_COMPILE_STATUS */
-   {  5652, 0x000084E9 }, /* GL_COMPRESSED_ALPHA */
-   {  5672, 0x000084E9 }, /* GL_COMPRESSED_ALPHA_ARB */
-   {  5696, 0x000084EC }, /* GL_COMPRESSED_INTENSITY */
-   {  5720, 0x000084EC }, /* GL_COMPRESSED_INTENSITY_ARB */
-   {  5748, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE */
-   {  5772, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA */
-   {  5802, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA_ARB */
-   {  5836, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE_ARB */
-   {  5864, 0x00008225 }, /* GL_COMPRESSED_RED */
-   {  5882, 0x00008226 }, /* GL_COMPRESSED_RG */
-   {  5899, 0x000084ED }, /* GL_COMPRESSED_RGB */
-   {  5917, 0x000084EE }, /* GL_COMPRESSED_RGBA */
-   {  5936, 0x000084EE }, /* GL_COMPRESSED_RGBA_ARB */
-   {  5959, 0x000086B1 }, /* GL_COMPRESSED_RGBA_FXT1_3DFX */
-   {  5988, 0x000083F1 }, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */
-   {  6021, 0x000083F2 }, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */
-   {  6054, 0x000083F3 }, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */
-   {  6087, 0x000084ED }, /* GL_COMPRESSED_RGB_ARB */
-   {  6109, 0x000086B0 }, /* GL_COMPRESSED_RGB_FXT1_3DFX */
-   {  6137, 0x000083F0 }, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */
-   {  6169, 0x00008C4A }, /* GL_COMPRESSED_SLUMINANCE */
-   {  6194, 0x00008C4B }, /* GL_COMPRESSED_SLUMINANCE_ALPHA */
-   {  6225, 0x00008C48 }, /* GL_COMPRESSED_SRGB */
-   {  6244, 0x00008C49 }, /* GL_COMPRESSED_SRGB_ALPHA */
-   {  6269, 0x000086A3 }, /* GL_COMPRESSED_TEXTURE_FORMATS */
-   {  6299, 0x0000911C }, /* GL_CONDITION_SATISFIED */
-   {  6322, 0x00008576 }, /* GL_CONSTANT */
-   {  6334, 0x00008003 }, /* GL_CONSTANT_ALPHA */
-   {  6352, 0x00008003 }, /* GL_CONSTANT_ALPHA_EXT */
-   {  6374, 0x00008576 }, /* GL_CONSTANT_ARB */
-   {  6390, 0x00001207 }, /* GL_CONSTANT_ATTENUATION */
-   {  6414, 0x00008151 }, /* GL_CONSTANT_BORDER_HP */
-   {  6436, 0x00008001 }, /* GL_CONSTANT_COLOR */
-   {  6454, 0x00008001 }, /* GL_CONSTANT_COLOR_EXT */
-   {  6476, 0x00008576 }, /* GL_CONSTANT_EXT */
-   {  6492, 0x00000002 }, /* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT */
-   {  6529, 0x00000001 }, /* GL_CONTEXT_CORE_PROFILE_BIT */
-   {  6557, 0x0000821E }, /* GL_CONTEXT_FLAGS */
-   {  6574, 0x00000001 }, /* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT */
-   {  6613, 0x00009126 }, /* GL_CONTEXT_PROFILE_MASK */
-   {  6637, 0x00008010 }, /* GL_CONVOLUTION_1D */
-   {  6655, 0x00008011 }, /* GL_CONVOLUTION_2D */
-   {  6673, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR */
-   {  6701, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR_HP */
-   {  6732, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE */
-   {  6759, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE_EXT */
-   {  6790, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS */
-   {  6817, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS_EXT */
-   {  6848, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE */
-   {  6876, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE_EXT */
-   {  6908, 0x00008017 }, /* GL_CONVOLUTION_FORMAT */
-   {  6930, 0x00008017 }, /* GL_CONVOLUTION_FORMAT_EXT */
-   {  6956, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT */
-   {  6978, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT_EXT */
-   {  7004, 0x00008018 }, /* GL_CONVOLUTION_WIDTH */
-   {  7025, 0x00008018 }, /* GL_CONVOLUTION_WIDTH_EXT */
-   {  7050, 0x00008862 }, /* GL_COORD_REPLACE */
-   {  7067, 0x00008862 }, /* GL_COORD_REPLACE_ARB */
-   {  7088, 0x00008862 }, /* GL_COORD_REPLACE_NV */
-   {  7108, 0x00008862 }, /* GL_COORD_REPLACE_OES */
-   {  7129, 0x00001503 }, /* GL_COPY */
-   {  7137, 0x0000150C }, /* GL_COPY_INVERTED */
-   {  7154, 0x00000706 }, /* GL_COPY_PIXEL_TOKEN */
-   {  7174, 0x00008F36 }, /* GL_COPY_READ_BUFFER */
-   {  7194, 0x00008F37 }, /* GL_COPY_WRITE_BUFFER */
-   {  7215, 0x00000B44 }, /* GL_CULL_FACE */
-   {  7228, 0x00000B45 }, /* GL_CULL_FACE_MODE */
-   {  7246, 0x000081AA }, /* GL_CULL_VERTEX_EXT */
-   {  7265, 0x000081AC }, /* GL_CULL_VERTEX_EYE_POSITION_EXT */
-   {  7297, 0x000081AB }, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */
-   {  7332, 0x00008626 }, /* GL_CURRENT_ATTRIB_NV */
-   {  7353, 0x00000001 }, /* GL_CURRENT_BIT */
-   {  7368, 0x00000B00 }, /* GL_CURRENT_COLOR */
-   {  7385, 0x00008453 }, /* GL_CURRENT_FOG_COORD */
-   {  7406, 0x00008453 }, /* GL_CURRENT_FOG_COORDINATE */
-   {  7432, 0x00000B01 }, /* GL_CURRENT_INDEX */
-   {  7449, 0x00008641 }, /* GL_CURRENT_MATRIX_ARB */
-   {  7471, 0x00008845 }, /* GL_CURRENT_MATRIX_INDEX_ARB */
-   {  7499, 0x00008641 }, /* GL_CURRENT_MATRIX_NV */
-   {  7520, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */
-   {  7554, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_NV */
-   {  7587, 0x00000B02 }, /* GL_CURRENT_NORMAL */
-   {  7605, 0x00008843 }, /* GL_CURRENT_PALETTE_MATRIX_ARB */
-   {  7635, 0x00008843 }, /* GL_CURRENT_PALETTE_MATRIX_OES */
-   {  7665, 0x00008B8D }, /* GL_CURRENT_PROGRAM */
-   {  7684, 0x00008865 }, /* GL_CURRENT_QUERY */
-   {  7701, 0x00008865 }, /* GL_CURRENT_QUERY_ARB */
-   {  7722, 0x00000B04 }, /* GL_CURRENT_RASTER_COLOR */
-   {  7746, 0x00000B09 }, /* GL_CURRENT_RASTER_DISTANCE */
-   {  7773, 0x00000B05 }, /* GL_CURRENT_RASTER_INDEX */
-   {  7797, 0x00000B07 }, /* GL_CURRENT_RASTER_POSITION */
-   {  7824, 0x00000B08 }, /* GL_CURRENT_RASTER_POSITION_VALID */
-   {  7857, 0x0000845F }, /* GL_CURRENT_RASTER_SECONDARY_COLOR */
-   {  7891, 0x00000B06 }, /* GL_CURRENT_RASTER_TEXTURE_COORDS */
-   {  7924, 0x00008459 }, /* GL_CURRENT_SECONDARY_COLOR */
-   {  7951, 0x00000B03 }, /* GL_CURRENT_TEXTURE_COORDS */
-   {  7977, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB */
-   {  8002, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB_ARB */
-   {  8031, 0x000086A8 }, /* GL_CURRENT_WEIGHT_ARB */
-   {  8053, 0x00000900 }, /* GL_CW */
-   {  8059, 0x0000875B }, /* GL_DEBUG_ASSERT_MESA */
-   {  8080, 0x00008759 }, /* GL_DEBUG_OBJECT_MESA */
-   {  8101, 0x0000875A }, /* GL_DEBUG_PRINT_MESA */
-   {  8121, 0x00002101 }, /* GL_DECAL */
-   {  8130, 0x00001E03 }, /* GL_DECR */
-   {  8138, 0x00008508 }, /* GL_DECR_WRAP */
-   {  8151, 0x00008508 }, /* GL_DECR_WRAP_EXT */
-   {  8168, 0x00008B80 }, /* GL_DELETE_STATUS */
-   {  8185, 0x00001801 }, /* GL_DEPTH */
-   {  8194, 0x000088F0 }, /* GL_DEPTH24_STENCIL8 */
-   {  8214, 0x000088F0 }, /* GL_DEPTH24_STENCIL8_EXT */
-   {  8238, 0x000088F0 }, /* GL_DEPTH24_STENCIL8_OES */
-   {  8262, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT */
-   {  8282, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT_EXT */
-   {  8306, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT_OES */
-   {  8330, 0x00000D1F }, /* GL_DEPTH_BIAS */
-   {  8344, 0x00000D56 }, /* GL_DEPTH_BITS */
-   {  8358, 0x00008891 }, /* GL_DEPTH_BOUNDS_EXT */
-   {  8378, 0x00008890 }, /* GL_DEPTH_BOUNDS_TEST_EXT */
-   {  8403, 0x00008223 }, /* GL_DEPTH_BUFFER */
-   {  8419, 0x00000100 }, /* GL_DEPTH_BUFFER_BIT */
-   {  8439, 0x0000864F }, /* GL_DEPTH_CLAMP */
-   {  8454, 0x0000864F }, /* GL_DEPTH_CLAMP_NV */
-   {  8472, 0x00000B73 }, /* GL_DEPTH_CLEAR_VALUE */
-   {  8493, 0x00001902 }, /* GL_DEPTH_COMPONENT */
-   {  8512, 0x000081A5 }, /* GL_DEPTH_COMPONENT16 */
-   {  8533, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_ARB */
-   {  8558, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_OES */
-   {  8583, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_SGIX */
-   {  8609, 0x000081A6 }, /* GL_DEPTH_COMPONENT24 */
-   {  8630, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_ARB */
-   {  8655, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_OES */
-   {  8680, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_SGIX */
-   {  8706, 0x000081A7 }, /* GL_DEPTH_COMPONENT32 */
-   {  8727, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_ARB */
-   {  8752, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_OES */
-   {  8777, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_SGIX */
-   {  8803, 0x00000B74 }, /* GL_DEPTH_FUNC */
-   {  8817, 0x00000B70 }, /* GL_DEPTH_RANGE */
-   {  8832, 0x00000D1E }, /* GL_DEPTH_SCALE */
-   {  8847, 0x000084F9 }, /* GL_DEPTH_STENCIL */
-   {  8864, 0x0000821A }, /* GL_DEPTH_STENCIL_ATTACHMENT */
-   {  8892, 0x000084F9 }, /* GL_DEPTH_STENCIL_EXT */
-   {  8913, 0x000084F9 }, /* GL_DEPTH_STENCIL_NV */
-   {  8933, 0x000084F9 }, /* GL_DEPTH_STENCIL_OES */
-   {  8954, 0x0000886F }, /* GL_DEPTH_STENCIL_TO_BGRA_NV */
-   {  8982, 0x0000886E }, /* GL_DEPTH_STENCIL_TO_RGBA_NV */
-   {  9010, 0x00000B71 }, /* GL_DEPTH_TEST */
-   {  9024, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE */
-   {  9046, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE_ARB */
-   {  9072, 0x00000B72 }, /* GL_DEPTH_WRITEMASK */
-   {  9091, 0x00001201 }, /* GL_DIFFUSE */
-   {  9102, 0x00000BD0 }, /* GL_DITHER */
-   {  9112, 0x00000A02 }, /* GL_DOMAIN */
-   {  9122, 0x00001100 }, /* GL_DONT_CARE */
-   {  9135, 0x000086AE }, /* GL_DOT3_RGB */
-   {  9147, 0x000086AF }, /* GL_DOT3_RGBA */
-   {  9160, 0x000086AF }, /* GL_DOT3_RGBA_ARB */
-   {  9177, 0x00008741 }, /* GL_DOT3_RGBA_EXT */
-   {  9194, 0x000086AE }, /* GL_DOT3_RGB_ARB */
-   {  9210, 0x00008740 }, /* GL_DOT3_RGB_EXT */
-   {  9226, 0x0000140A }, /* GL_DOUBLE */
-   {  9236, 0x00000C32 }, /* GL_DOUBLEBUFFER */
-   {  9252, 0x00000C01 }, /* GL_DRAW_BUFFER */
-   {  9267, 0x00008825 }, /* GL_DRAW_BUFFER0 */
-   {  9283, 0x00008825 }, /* GL_DRAW_BUFFER0_ARB */
-   {  9303, 0x00008825 }, /* GL_DRAW_BUFFER0_ATI */
-   {  9323, 0x00008826 }, /* GL_DRAW_BUFFER1 */
-   {  9339, 0x0000882F }, /* GL_DRAW_BUFFER10 */
-   {  9356, 0x0000882F }, /* GL_DRAW_BUFFER10_ARB */
-   {  9377, 0x0000882F }, /* GL_DRAW_BUFFER10_ATI */
-   {  9398, 0x00008830 }, /* GL_DRAW_BUFFER11 */
-   {  9415, 0x00008830 }, /* GL_DRAW_BUFFER11_ARB */
-   {  9436, 0x00008830 }, /* GL_DRAW_BUFFER11_ATI */
-   {  9457, 0x00008831 }, /* GL_DRAW_BUFFER12 */
-   {  9474, 0x00008831 }, /* GL_DRAW_BUFFER12_ARB */
-   {  9495, 0x00008831 }, /* GL_DRAW_BUFFER12_ATI */
-   {  9516, 0x00008832 }, /* GL_DRAW_BUFFER13 */
-   {  9533, 0x00008832 }, /* GL_DRAW_BUFFER13_ARB */
-   {  9554, 0x00008832 }, /* GL_DRAW_BUFFER13_ATI */
-   {  9575, 0x00008833 }, /* GL_DRAW_BUFFER14 */
-   {  9592, 0x00008833 }, /* GL_DRAW_BUFFER14_ARB */
-   {  9613, 0x00008833 }, /* GL_DRAW_BUFFER14_ATI */
-   {  9634, 0x00008834 }, /* GL_DRAW_BUFFER15 */
-   {  9651, 0x00008834 }, /* GL_DRAW_BUFFER15_ARB */
-   {  9672, 0x00008834 }, /* GL_DRAW_BUFFER15_ATI */
-   {  9693, 0x00008826 }, /* GL_DRAW_BUFFER1_ARB */
-   {  9713, 0x00008826 }, /* GL_DRAW_BUFFER1_ATI */
-   {  9733, 0x00008827 }, /* GL_DRAW_BUFFER2 */
-   {  9749, 0x00008827 }, /* GL_DRAW_BUFFER2_ARB */
-   {  9769, 0x00008827 }, /* GL_DRAW_BUFFER2_ATI */
-   {  9789, 0x00008828 }, /* GL_DRAW_BUFFER3 */
-   {  9805, 0x00008828 }, /* GL_DRAW_BUFFER3_ARB */
-   {  9825, 0x00008828 }, /* GL_DRAW_BUFFER3_ATI */
-   {  9845, 0x00008829 }, /* GL_DRAW_BUFFER4 */
-   {  9861, 0x00008829 }, /* GL_DRAW_BUFFER4_ARB */
-   {  9881, 0x00008829 }, /* GL_DRAW_BUFFER4_ATI */
-   {  9901, 0x0000882A }, /* GL_DRAW_BUFFER5 */
-   {  9917, 0x0000882A }, /* GL_DRAW_BUFFER5_ARB */
-   {  9937, 0x0000882A }, /* GL_DRAW_BUFFER5_ATI */
-   {  9957, 0x0000882B }, /* GL_DRAW_BUFFER6 */
-   {  9973, 0x0000882B }, /* GL_DRAW_BUFFER6_ARB */
-   {  9993, 0x0000882B }, /* GL_DRAW_BUFFER6_ATI */
-   { 10013, 0x0000882C }, /* GL_DRAW_BUFFER7 */
-   { 10029, 0x0000882C }, /* GL_DRAW_BUFFER7_ARB */
-   { 10049, 0x0000882C }, /* GL_DRAW_BUFFER7_ATI */
-   { 10069, 0x0000882D }, /* GL_DRAW_BUFFER8 */
-   { 10085, 0x0000882D }, /* GL_DRAW_BUFFER8_ARB */
-   { 10105, 0x0000882D }, /* GL_DRAW_BUFFER8_ATI */
-   { 10125, 0x0000882E }, /* GL_DRAW_BUFFER9 */
-   { 10141, 0x0000882E }, /* GL_DRAW_BUFFER9_ARB */
-   { 10161, 0x0000882E }, /* GL_DRAW_BUFFER9_ATI */
-   { 10181, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER */
-   { 10201, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING */
-   { 10229, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */
-   { 10261, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER_EXT */
-   { 10285, 0x00000705 }, /* GL_DRAW_PIXEL_TOKEN */
-   { 10305, 0x00000304 }, /* GL_DST_ALPHA */
-   { 10318, 0x00000306 }, /* GL_DST_COLOR */
-   { 10331, 0x0000877A }, /* GL_DU8DV8_ATI */
-   { 10345, 0x00008779 }, /* GL_DUDV_ATI */
-   { 10357, 0x000088EA }, /* GL_DYNAMIC_COPY */
-   { 10373, 0x000088EA }, /* GL_DYNAMIC_COPY_ARB */
-   { 10393, 0x000088E8 }, /* GL_DYNAMIC_DRAW */
-   { 10409, 0x000088E8 }, /* GL_DYNAMIC_DRAW_ARB */
-   { 10429, 0x000088E9 }, /* GL_DYNAMIC_READ */
-   { 10445, 0x000088E9 }, /* GL_DYNAMIC_READ_ARB */
-   { 10465, 0x00000B43 }, /* GL_EDGE_FLAG */
-   { 10478, 0x00008079 }, /* GL_EDGE_FLAG_ARRAY */
-   { 10497, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */
-   { 10531, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB */
-   { 10569, 0x00008093 }, /* GL_EDGE_FLAG_ARRAY_POINTER */
-   { 10596, 0x0000808C }, /* GL_EDGE_FLAG_ARRAY_STRIDE */
-   { 10622, 0x00008893 }, /* GL_ELEMENT_ARRAY_BUFFER */
-   { 10646, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */
-   { 10678, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB */
-   { 10714, 0x00001600 }, /* GL_EMISSION */
-   { 10726, 0x00002000 }, /* GL_ENABLE_BIT */
-   { 10740, 0x00000202 }, /* GL_EQUAL */
-   { 10749, 0x00001509 }, /* GL_EQUIV */
-   { 10758, 0x00010000 }, /* GL_EVAL_BIT */
-   { 10770, 0x00000800 }, /* GL_EXP */
-   { 10777, 0x00000801 }, /* GL_EXP2 */
-   { 10785, 0x00001F03 }, /* GL_EXTENSIONS */
-   { 10799, 0x00002400 }, /* GL_EYE_LINEAR */
-   { 10813, 0x00002502 }, /* GL_EYE_PLANE */
-   { 10826, 0x0000855C }, /* GL_EYE_PLANE_ABSOLUTE_NV */
-   { 10851, 0x0000855B }, /* GL_EYE_RADIAL_NV */
-   { 10868, 0x00000000 }, /* GL_FALSE */
-   { 10877, 0x00001101 }, /* GL_FASTEST */
-   { 10888, 0x00001C01 }, /* GL_FEEDBACK */
-   { 10900, 0x00000DF0 }, /* GL_FEEDBACK_BUFFER_POINTER */
-   { 10927, 0x00000DF1 }, /* GL_FEEDBACK_BUFFER_SIZE */
-   { 10951, 0x00000DF2 }, /* GL_FEEDBACK_BUFFER_TYPE */
-   { 10975, 0x00001B02 }, /* GL_FILL */
-   { 10983, 0x00008E4D }, /* GL_FIRST_VERTEX_CONVENTION */
-   { 11010, 0x00008E4D }, /* GL_FIRST_VERTEX_CONVENTION_EXT */
-   { 11041, 0x0000140C }, /* GL_FIXED */
-   { 11050, 0x0000140C }, /* GL_FIXED_OES */
-   { 11063, 0x0000891D }, /* GL_FIXED_ONLY */
-   { 11077, 0x00001D00 }, /* GL_FLAT */
-   { 11085, 0x00001406 }, /* GL_FLOAT */
-   { 11094, 0x00008B5A }, /* GL_FLOAT_MAT2 */
-   { 11108, 0x00008B5A }, /* GL_FLOAT_MAT2_ARB */
-   { 11126, 0x00008B65 }, /* GL_FLOAT_MAT2x3 */
-   { 11142, 0x00008B66 }, /* GL_FLOAT_MAT2x4 */
-   { 11158, 0x00008B5B }, /* GL_FLOAT_MAT3 */
-   { 11172, 0x00008B5B }, /* GL_FLOAT_MAT3_ARB */
-   { 11190, 0x00008B67 }, /* GL_FLOAT_MAT3x2 */
-   { 11206, 0x00008B68 }, /* GL_FLOAT_MAT3x4 */
-   { 11222, 0x00008B5C }, /* GL_FLOAT_MAT4 */
-   { 11236, 0x00008B5C }, /* GL_FLOAT_MAT4_ARB */
-   { 11254, 0x00008B69 }, /* GL_FLOAT_MAT4x2 */
-   { 11270, 0x00008B6A }, /* GL_FLOAT_MAT4x3 */
-   { 11286, 0x00008B50 }, /* GL_FLOAT_VEC2 */
-   { 11300, 0x00008B50 }, /* GL_FLOAT_VEC2_ARB */
-   { 11318, 0x00008B51 }, /* GL_FLOAT_VEC3 */
-   { 11332, 0x00008B51 }, /* GL_FLOAT_VEC3_ARB */
-   { 11350, 0x00008B52 }, /* GL_FLOAT_VEC4 */
-   { 11364, 0x00008B52 }, /* GL_FLOAT_VEC4_ARB */
-   { 11382, 0x00000B60 }, /* GL_FOG */
-   { 11389, 0x00000080 }, /* GL_FOG_BIT */
-   { 11400, 0x00000B66 }, /* GL_FOG_COLOR */
-   { 11413, 0x00008451 }, /* GL_FOG_COORD */
-   { 11426, 0x00008451 }, /* GL_FOG_COORDINATE */
-   { 11444, 0x00008457 }, /* GL_FOG_COORDINATE_ARRAY */
-   { 11468, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */
-   { 11507, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB */
-   { 11550, 0x00008456 }, /* GL_FOG_COORDINATE_ARRAY_POINTER */
-   { 11582, 0x00008455 }, /* GL_FOG_COORDINATE_ARRAY_STRIDE */
-   { 11613, 0x00008454 }, /* GL_FOG_COORDINATE_ARRAY_TYPE */
-   { 11642, 0x00008450 }, /* GL_FOG_COORDINATE_SOURCE */
-   { 11667, 0x00008457 }, /* GL_FOG_COORD_ARRAY */
-   { 11686, 0x0000889D }, /* GL_FOG_COORD_ARRAY_BUFFER_BINDING */
-   { 11720, 0x00008456 }, /* GL_FOG_COORD_ARRAY_POINTER */
-   { 11747, 0x00008455 }, /* GL_FOG_COORD_ARRAY_STRIDE */
-   { 11773, 0x00008454 }, /* GL_FOG_COORD_ARRAY_TYPE */
-   { 11797, 0x00008450 }, /* GL_FOG_COORD_SRC */
-   { 11814, 0x00000B62 }, /* GL_FOG_DENSITY */
-   { 11829, 0x0000855A }, /* GL_FOG_DISTANCE_MODE_NV */
-   { 11853, 0x00000B64 }, /* GL_FOG_END */
-   { 11864, 0x00000C54 }, /* GL_FOG_HINT */
-   { 11876, 0x00000B61 }, /* GL_FOG_INDEX */
-   { 11889, 0x00000B65 }, /* GL_FOG_MODE */
-   { 11901, 0x00008198 }, /* GL_FOG_OFFSET_SGIX */
-   { 11920, 0x00008199 }, /* GL_FOG_OFFSET_VALUE_SGIX */
-   { 11945, 0x00000B63 }, /* GL_FOG_START */
-   { 11958, 0x00008452 }, /* GL_FRAGMENT_DEPTH */
-   { 11976, 0x00008804 }, /* GL_FRAGMENT_PROGRAM_ARB */
-   { 12000, 0x00008B30 }, /* GL_FRAGMENT_SHADER */
-   { 12019, 0x00008B30 }, /* GL_FRAGMENT_SHADER_ARB */
-   { 12042, 0x00008B8B }, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */
-   { 12077, 0x00008B8B }, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES */
-   { 12116, 0x00008D40 }, /* GL_FRAMEBUFFER */
-   { 12131, 0x00008215 }, /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */
-   { 12168, 0x00008214 }, /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */
-   { 12204, 0x00008210 }, /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */
-   { 12245, 0x00008211 }, /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */
-   { 12286, 0x00008216 }, /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */
-   { 12323, 0x00008213 }, /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */
-   { 12360, 0x00008DA7 }, /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED */
-   { 12394, 0x00008DA7 }, /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB */
-   { 12432, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */
-   { 12470, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT */
-   { 12512, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES */
-   { 12554, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */
-   { 12592, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT */
-   { 12634, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES */
-   { 12676, 0x00008212 }, /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */
-   { 12711, 0x00008217 }, /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */
-   { 12750, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT */
-   { 12799, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES */
-   { 12848, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */
-   { 12896, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT */
-   { 12948, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES */
-   { 13000, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */
-   { 13040, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */
-   { 13084, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */
-   { 13124, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT */
-   { 13168, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES */
-   { 13212, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING */
-   { 13235, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING_EXT */
-   { 13262, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING_OES */
-   { 13289, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE */
-   { 13313, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE_EXT */
-   { 13341, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE_OES */
-   { 13369, 0x00008218 }, /* GL_FRAMEBUFFER_DEFAULT */
-   { 13392, 0x00008D40 }, /* GL_FRAMEBUFFER_EXT */
-   { 13411, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */
-   { 13448, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT */
-   { 13489, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES */
-   { 13530, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS */
-   { 13567, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */
-   { 13608, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES */
-   { 13649, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */
-   { 13687, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT */
-   { 13729, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES */
-   { 13771, 0x00008CD8 }, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */
-   { 13822, 0x00008CDA }, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */
-   { 13860, 0x00008CDA }, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES */
-   { 13898, 0x00008DA9 }, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB */
-   { 13940, 0x00008DA8 }, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS */
-   { 13980, 0x00008DA8 }, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB */
-   { 14024, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */
-   { 14069, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT */
-   { 14118, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES */
-   { 14167, 0x00008D56 }, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */
-   { 14205, 0x00008D56 }, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT */
-   { 14247, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */
-   { 14285, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT */
-   { 14327, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES */
-   { 14369, 0x00008D40 }, /* GL_FRAMEBUFFER_OES */
-   { 14388, 0x00008CDE }, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */
-   { 14420, 0x00008219 }, /* GL_FRAMEBUFFER_UNDEFINED */
-   { 14445, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED */
-   { 14472, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED_EXT */
-   { 14503, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED_OES */
-   { 14534, 0x00000404 }, /* GL_FRONT */
-   { 14543, 0x00000408 }, /* GL_FRONT_AND_BACK */
-   { 14561, 0x00000B46 }, /* GL_FRONT_FACE */
-   { 14575, 0x00000400 }, /* GL_FRONT_LEFT */
-   { 14589, 0x00000401 }, /* GL_FRONT_RIGHT */
-   { 14604, 0x00008006 }, /* GL_FUNC_ADD */
-   { 14616, 0x00008006 }, /* GL_FUNC_ADD_EXT */
-   { 14632, 0x00008006 }, /* GL_FUNC_ADD_OES */
-   { 14648, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT */
-   { 14673, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT_EXT */
-   { 14702, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT_OES */
-   { 14731, 0x0000800A }, /* GL_FUNC_SUBTRACT */
-   { 14748, 0x0000800A }, /* GL_FUNC_SUBTRACT_EXT */
-   { 14769, 0x0000800A }, /* GL_FUNC_SUBTRACT_OES */
-   { 14790, 0x00008191 }, /* GL_GENERATE_MIPMAP */
-   { 14809, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT */
-   { 14833, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT_SGIS */
-   { 14862, 0x00008191 }, /* GL_GENERATE_MIPMAP_SGIS */
-   { 14886, 0x00008917 }, /* GL_GEOMETRY_INPUT_TYPE */
-   { 14909, 0x00008DDB }, /* GL_GEOMETRY_INPUT_TYPE_ARB */
-   { 14936, 0x00008918 }, /* GL_GEOMETRY_OUTPUT_TYPE */
-   { 14960, 0x00008DDC }, /* GL_GEOMETRY_OUTPUT_TYPE_ARB */
-   { 14988, 0x00008DD9 }, /* GL_GEOMETRY_SHADER */
-   { 15007, 0x00008DD9 }, /* GL_GEOMETRY_SHADER_ARB */
-   { 15030, 0x00008916 }, /* GL_GEOMETRY_VERTICES_OUT */
-   { 15055, 0x00008DDA }, /* GL_GEOMETRY_VERTICES_OUT_ARB */
-   { 15084, 0x00000206 }, /* GL_GEQUAL */
-   { 15094, 0x00000204 }, /* GL_GREATER */
-   { 15105, 0x00001904 }, /* GL_GREEN */
-   { 15114, 0x00000D19 }, /* GL_GREEN_BIAS */
-   { 15128, 0x00000D53 }, /* GL_GREEN_BITS */
-   { 15142, 0x00008D95 }, /* GL_GREEN_INTEGER */
-   { 15159, 0x00008D95 }, /* GL_GREEN_INTEGER_EXT */
-   { 15180, 0x00000D18 }, /* GL_GREEN_SCALE */
-   { 15195, 0x0000140B }, /* GL_HALF_FLOAT */
-   { 15209, 0x00008D61 }, /* GL_HALF_FLOAT_OES */
-   { 15227, 0x00008DF2 }, /* GL_HIGH_FLOAT */
-   { 15241, 0x00008DF5 }, /* GL_HIGH_INT */
-   { 15253, 0x00008000 }, /* GL_HINT_BIT */
-   { 15265, 0x00008024 }, /* GL_HISTOGRAM */
-   { 15278, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE */
-   { 15302, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE_EXT */
-   { 15330, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE */
-   { 15353, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE_EXT */
-   { 15380, 0x00008024 }, /* GL_HISTOGRAM_EXT */
-   { 15397, 0x00008027 }, /* GL_HISTOGRAM_FORMAT */
-   { 15417, 0x00008027 }, /* GL_HISTOGRAM_FORMAT_EXT */
-   { 15441, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE */
-   { 15465, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE_EXT */
-   { 15493, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE */
-   { 15521, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE_EXT */
-   { 15553, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE */
-   { 15575, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE_EXT */
-   { 15601, 0x0000802D }, /* GL_HISTOGRAM_SINK */
-   { 15619, 0x0000802D }, /* GL_HISTOGRAM_SINK_EXT */
-   { 15641, 0x00008026 }, /* GL_HISTOGRAM_WIDTH */
-   { 15660, 0x00008026 }, /* GL_HISTOGRAM_WIDTH_EXT */
-   { 15683, 0x0000862A }, /* GL_IDENTITY_NV */
-   { 15698, 0x00008150 }, /* GL_IGNORE_BORDER_HP */
-   { 15718, 0x00008B9B }, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT */
-   { 15754, 0x00008B9B }, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */
-   { 15794, 0x00008B9A }, /* GL_IMPLEMENTATION_COLOR_READ_TYPE */
-   { 15828, 0x00008B9A }, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */
-   { 15866, 0x00001E02 }, /* GL_INCR */
-   { 15874, 0x00008507 }, /* GL_INCR_WRAP */
-   { 15887, 0x00008507 }, /* GL_INCR_WRAP_EXT */
-   { 15904, 0x00008222 }, /* GL_INDEX */
-   { 15913, 0x00008077 }, /* GL_INDEX_ARRAY */
-   { 15928, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING */
-   { 15958, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING_ARB */
-   { 15992, 0x00008091 }, /* GL_INDEX_ARRAY_POINTER */
-   { 16015, 0x00008086 }, /* GL_INDEX_ARRAY_STRIDE */
-   { 16037, 0x00008085 }, /* GL_INDEX_ARRAY_TYPE */
-   { 16057, 0x00000D51 }, /* GL_INDEX_BITS */
-   { 16071, 0x00000C20 }, /* GL_INDEX_CLEAR_VALUE */
-   { 16092, 0x00000BF1 }, /* GL_INDEX_LOGIC_OP */
-   { 16110, 0x00000C30 }, /* GL_INDEX_MODE */
-   { 16124, 0x00000D13 }, /* GL_INDEX_OFFSET */
-   { 16140, 0x00000D12 }, /* GL_INDEX_SHIFT */
-   { 16155, 0x00000C21 }, /* GL_INDEX_WRITEMASK */
-   { 16174, 0x00008B84 }, /* GL_INFO_LOG_LENGTH */
-   { 16193, 0x00001404 }, /* GL_INT */
-   { 16200, 0x00008049 }, /* GL_INTENSITY */
-   { 16213, 0x0000804C }, /* GL_INTENSITY12 */
-   { 16228, 0x0000804C }, /* GL_INTENSITY12_EXT */
-   { 16247, 0x0000804D }, /* GL_INTENSITY16 */
-   { 16262, 0x00008D8B }, /* GL_INTENSITY16I_EXT */
-   { 16282, 0x00008D79 }, /* GL_INTENSITY16UI_EXT */
-   { 16303, 0x0000804D }, /* GL_INTENSITY16_EXT */
-   { 16322, 0x00008D85 }, /* GL_INTENSITY32I_EXT */
-   { 16342, 0x00008D73 }, /* GL_INTENSITY32UI_EXT */
-   { 16363, 0x0000804A }, /* GL_INTENSITY4 */
-   { 16377, 0x0000804A }, /* GL_INTENSITY4_EXT */
-   { 16395, 0x0000804B }, /* GL_INTENSITY8 */
-   { 16409, 0x00008D91 }, /* GL_INTENSITY8I_EXT */
-   { 16428, 0x00008D7F }, /* GL_INTENSITY8UI_EXT */
-   { 16448, 0x0000804B }, /* GL_INTENSITY8_EXT */
-   { 16466, 0x00008049 }, /* GL_INTENSITY_EXT */
-   { 16483, 0x00008C8C }, /* GL_INTERLEAVED_ATTRIBS */
-   { 16506, 0x00008C8C }, /* GL_INTERLEAVED_ATTRIBS_EXT */
-   { 16533, 0x00008575 }, /* GL_INTERPOLATE */
-   { 16548, 0x00008575 }, /* GL_INTERPOLATE_ARB */
-   { 16567, 0x00008575 }, /* GL_INTERPOLATE_EXT */
-   { 16586, 0x00008DF7 }, /* GL_INT_10_10_10_2_OES */
-   { 16608, 0x00008DC9 }, /* GL_INT_SAMPLER_1D */
-   { 16626, 0x00008DCE }, /* GL_INT_SAMPLER_1D_ARRAY */
-   { 16650, 0x00008DCE }, /* GL_INT_SAMPLER_1D_ARRAY_EXT */
-   { 16678, 0x00008DC9 }, /* GL_INT_SAMPLER_1D_EXT */
-   { 16700, 0x00008DCA }, /* GL_INT_SAMPLER_2D */
-   { 16718, 0x00008DCF }, /* GL_INT_SAMPLER_2D_ARRAY */
-   { 16742, 0x00008DCF }, /* GL_INT_SAMPLER_2D_ARRAY_EXT */
-   { 16770, 0x00008DCA }, /* GL_INT_SAMPLER_2D_EXT */
-   { 16792, 0x00008DCD }, /* GL_INT_SAMPLER_2D_RECT */
-   { 16815, 0x00008DCD }, /* GL_INT_SAMPLER_2D_RECT_EXT */
-   { 16842, 0x00008DCB }, /* GL_INT_SAMPLER_3D */
-   { 16860, 0x00008DCB }, /* GL_INT_SAMPLER_3D_EXT */
-   { 16882, 0x00008DD0 }, /* GL_INT_SAMPLER_BUFFER */
-   { 16904, 0x00008DD0 }, /* GL_INT_SAMPLER_BUFFER_EXT */
-   { 16930, 0x00008DCC }, /* GL_INT_SAMPLER_CUBE */
-   { 16950, 0x00008DCC }, /* GL_INT_SAMPLER_CUBE_EXT */
-   { 16974, 0x00008B53 }, /* GL_INT_VEC2 */
-   { 16986, 0x00008B53 }, /* GL_INT_VEC2_ARB */
-   { 17002, 0x00008B54 }, /* GL_INT_VEC3 */
-   { 17014, 0x00008B54 }, /* GL_INT_VEC3_ARB */
-   { 17030, 0x00008B55 }, /* GL_INT_VEC4 */
-   { 17042, 0x00008B55 }, /* GL_INT_VEC4_ARB */
-   { 17058, 0x00000500 }, /* GL_INVALID_ENUM */
-   { 17074, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION */
-   { 17107, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION_EXT */
-   { 17144, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION_OES */
-   { 17181, 0x00000502 }, /* GL_INVALID_OPERATION */
-   { 17202, 0x00000501 }, /* GL_INVALID_VALUE */
-   { 17219, 0x0000862B }, /* GL_INVERSE_NV */
-   { 17233, 0x0000862D }, /* GL_INVERSE_TRANSPOSE_NV */
-   { 17257, 0x0000150A }, /* GL_INVERT */
-   { 17267, 0x00001E00 }, /* GL_KEEP */
-   { 17275, 0x00008E4E }, /* GL_LAST_VERTEX_CONVENTION */
-   { 17301, 0x00008E4E }, /* GL_LAST_VERTEX_CONVENTION_EXT */
-   { 17331, 0x00000406 }, /* GL_LEFT */
-   { 17339, 0x00000203 }, /* GL_LEQUAL */
-   { 17349, 0x00000201 }, /* GL_LESS */
-   { 17357, 0x00004000 }, /* GL_LIGHT0 */
-   { 17367, 0x00004001 }, /* GL_LIGHT1 */
-   { 17377, 0x00004002 }, /* GL_LIGHT2 */
-   { 17387, 0x00004003 }, /* GL_LIGHT3 */
-   { 17397, 0x00004004 }, /* GL_LIGHT4 */
-   { 17407, 0x00004005 }, /* GL_LIGHT5 */
-   { 17417, 0x00004006 }, /* GL_LIGHT6 */
-   { 17427, 0x00004007 }, /* GL_LIGHT7 */
-   { 17437, 0x00000B50 }, /* GL_LIGHTING */
-   { 17449, 0x00000040 }, /* GL_LIGHTING_BIT */
-   { 17465, 0x00000B53 }, /* GL_LIGHT_MODEL_AMBIENT */
-   { 17488, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL */
-   { 17517, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL_EXT */
-   { 17550, 0x00000B51 }, /* GL_LIGHT_MODEL_LOCAL_VIEWER */
-   { 17578, 0x00000B52 }, /* GL_LIGHT_MODEL_TWO_SIDE */
-   { 17602, 0x00001B01 }, /* GL_LINE */
-   { 17610, 0x00002601 }, /* GL_LINEAR */
-   { 17620, 0x00001208 }, /* GL_LINEAR_ATTENUATION */
-   { 17642, 0x00008170 }, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */
-   { 17672, 0x0000844F }, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */
-   { 17703, 0x00002703 }, /* GL_LINEAR_MIPMAP_LINEAR */
-   { 17727, 0x00002701 }, /* GL_LINEAR_MIPMAP_NEAREST */
-   { 17752, 0x00000001 }, /* GL_LINES */
-   { 17761, 0x0000000A }, /* GL_LINES_ADJACENCY */
-   { 17780, 0x0000000A }, /* GL_LINES_ADJACENCY_ARB */
-   { 17803, 0x00000004 }, /* GL_LINE_BIT */
-   { 17815, 0x00000002 }, /* GL_LINE_LOOP */
-   { 17828, 0x00000707 }, /* GL_LINE_RESET_TOKEN */
-   { 17848, 0x00000B20 }, /* GL_LINE_SMOOTH */
-   { 17863, 0x00000C52 }, /* GL_LINE_SMOOTH_HINT */
-   { 17883, 0x00000B24 }, /* GL_LINE_STIPPLE */
-   { 17899, 0x00000B25 }, /* GL_LINE_STIPPLE_PATTERN */
-   { 17923, 0x00000B26 }, /* GL_LINE_STIPPLE_REPEAT */
-   { 17946, 0x00000003 }, /* GL_LINE_STRIP */
-   { 17960, 0x0000000B }, /* GL_LINE_STRIP_ADJACENCY */
-   { 17984, 0x0000000B }, /* GL_LINE_STRIP_ADJACENCY_ARB */
-   { 18012, 0x00000702 }, /* GL_LINE_TOKEN */
-   { 18026, 0x00000B21 }, /* GL_LINE_WIDTH */
-   { 18040, 0x00000B23 }, /* GL_LINE_WIDTH_GRANULARITY */
-   { 18066, 0x00000B22 }, /* GL_LINE_WIDTH_RANGE */
-   { 18086, 0x00008B82 }, /* GL_LINK_STATUS */
-   { 18101, 0x00000B32 }, /* GL_LIST_BASE */
-   { 18114, 0x00020000 }, /* GL_LIST_BIT */
-   { 18126, 0x00000B33 }, /* GL_LIST_INDEX */
-   { 18140, 0x00000B30 }, /* GL_LIST_MODE */
-   { 18153, 0x00000101 }, /* GL_LOAD */
-   { 18161, 0x00000BF1 }, /* GL_LOGIC_OP */
-   { 18173, 0x00000BF0 }, /* GL_LOGIC_OP_MODE */
-   { 18190, 0x00008CA1 }, /* GL_LOWER_LEFT */
-   { 18204, 0x00008DF0 }, /* GL_LOW_FLOAT */
-   { 18217, 0x00008DF3 }, /* GL_LOW_INT */
-   { 18228, 0x00001909 }, /* GL_LUMINANCE */
-   { 18241, 0x00008041 }, /* GL_LUMINANCE12 */
-   { 18256, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12 */
-   { 18279, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12_EXT */
-   { 18306, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4 */
-   { 18328, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4_EXT */
-   { 18354, 0x00008041 }, /* GL_LUMINANCE12_EXT */
-   { 18373, 0x00008042 }, /* GL_LUMINANCE16 */
-   { 18388, 0x00008D8C }, /* GL_LUMINANCE16I_EXT */
-   { 18408, 0x00008D7A }, /* GL_LUMINANCE16UI_EXT */
-   { 18429, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16 */
-   { 18452, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16_EXT */
-   { 18479, 0x00008042 }, /* GL_LUMINANCE16_EXT */
-   { 18498, 0x00008D86 }, /* GL_LUMINANCE32I_EXT */
-   { 18518, 0x00008D74 }, /* GL_LUMINANCE32UI_EXT */
-   { 18539, 0x0000803F }, /* GL_LUMINANCE4 */
-   { 18553, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4 */
-   { 18574, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4_EXT */
-   { 18599, 0x0000803F }, /* GL_LUMINANCE4_EXT */
-   { 18617, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2 */
-   { 18638, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2_EXT */
-   { 18663, 0x00008040 }, /* GL_LUMINANCE8 */
-   { 18677, 0x00008D92 }, /* GL_LUMINANCE8I_EXT */
-   { 18696, 0x00008D80 }, /* GL_LUMINANCE8UI_EXT */
-   { 18716, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8 */
-   { 18737, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8_EXT */
-   { 18762, 0x00008040 }, /* GL_LUMINANCE8_EXT */
-   { 18780, 0x0000190A }, /* GL_LUMINANCE_ALPHA */
-   { 18799, 0x00008D8D }, /* GL_LUMINANCE_ALPHA16I_EXT */
-   { 18825, 0x00008D7B }, /* GL_LUMINANCE_ALPHA16UI_EXT */
-   { 18852, 0x00008D87 }, /* GL_LUMINANCE_ALPHA32I_EXT */
-   { 18878, 0x00008D75 }, /* GL_LUMINANCE_ALPHA32UI_EXT */
-   { 18905, 0x00008D93 }, /* GL_LUMINANCE_ALPHA8I_EXT */
-   { 18930, 0x00008D81 }, /* GL_LUMINANCE_ALPHA8UI_EXT */
-   { 18956, 0x00008D9D }, /* GL_LUMINANCE_ALPHA_INTEGER_EXT */
-   { 18987, 0x00008D9C }, /* GL_LUMINANCE_INTEGER_EXT */
-   { 19012, 0x0000821B }, /* GL_MAJOR_VERSION */
-   { 19029, 0x00000D90 }, /* GL_MAP1_COLOR_4 */
-   { 19045, 0x00000DD0 }, /* GL_MAP1_GRID_DOMAIN */
-   { 19065, 0x00000DD1 }, /* GL_MAP1_GRID_SEGMENTS */
-   { 19087, 0x00000D91 }, /* GL_MAP1_INDEX */
-   { 19101, 0x00000D92 }, /* GL_MAP1_NORMAL */
-   { 19116, 0x00000D93 }, /* GL_MAP1_TEXTURE_COORD_1 */
-   { 19140, 0x00000D94 }, /* GL_MAP1_TEXTURE_COORD_2 */
-   { 19164, 0x00000D95 }, /* GL_MAP1_TEXTURE_COORD_3 */
-   { 19188, 0x00000D96 }, /* GL_MAP1_TEXTURE_COORD_4 */
-   { 19212, 0x00000D97 }, /* GL_MAP1_VERTEX_3 */
-   { 19229, 0x00000D98 }, /* GL_MAP1_VERTEX_4 */
-   { 19246, 0x00008660 }, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */
-   { 19274, 0x0000866A }, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */
-   { 19303, 0x0000866B }, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */
-   { 19332, 0x0000866C }, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */
-   { 19361, 0x0000866D }, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */
-   { 19390, 0x0000866E }, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */
-   { 19419, 0x0000866F }, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */
-   { 19448, 0x00008661 }, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */
-   { 19476, 0x00008662 }, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */
-   { 19504, 0x00008663 }, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */
-   { 19532, 0x00008664 }, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */
-   { 19560, 0x00008665 }, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */
-   { 19588, 0x00008666 }, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */
-   { 19616, 0x00008667 }, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */
-   { 19644, 0x00008668 }, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */
-   { 19672, 0x00008669 }, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */
-   { 19700, 0x00000DB0 }, /* GL_MAP2_COLOR_4 */
-   { 19716, 0x00000DD2 }, /* GL_MAP2_GRID_DOMAIN */
-   { 19736, 0x00000DD3 }, /* GL_MAP2_GRID_SEGMENTS */
-   { 19758, 0x00000DB1 }, /* GL_MAP2_INDEX */
-   { 19772, 0x00000DB2 }, /* GL_MAP2_NORMAL */
-   { 19787, 0x00000DB3 }, /* GL_MAP2_TEXTURE_COORD_1 */
-   { 19811, 0x00000DB4 }, /* GL_MAP2_TEXTURE_COORD_2 */
-   { 19835, 0x00000DB5 }, /* GL_MAP2_TEXTURE_COORD_3 */
-   { 19859, 0x00000DB6 }, /* GL_MAP2_TEXTURE_COORD_4 */
-   { 19883, 0x00000DB7 }, /* GL_MAP2_VERTEX_3 */
-   { 19900, 0x00000DB8 }, /* GL_MAP2_VERTEX_4 */
-   { 19917, 0x00008670 }, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */
-   { 19945, 0x0000867A }, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */
-   { 19974, 0x0000867B }, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */
-   { 20003, 0x0000867C }, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */
-   { 20032, 0x0000867D }, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */
-   { 20061, 0x0000867E }, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */
-   { 20090, 0x0000867F }, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */
-   { 20119, 0x00008671 }, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */
-   { 20147, 0x00008672 }, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */
-   { 20175, 0x00008673 }, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */
-   { 20203, 0x00008674 }, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */
-   { 20231, 0x00008675 }, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */
-   { 20259, 0x00008676 }, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */
-   { 20287, 0x00008677 }, /* GL_MAP2_VERTEX_ATTRIB7_4_NV */
-   { 20315, 0x00008678 }, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */
-   { 20343, 0x00008679 }, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */
-   { 20371, 0x00000D10 }, /* GL_MAP_COLOR */
-   { 20384, 0x00000010 }, /* GL_MAP_FLUSH_EXPLICIT_BIT */
-   { 20410, 0x00000008 }, /* GL_MAP_INVALIDATE_BUFFER_BIT */
-   { 20439, 0x00000004 }, /* GL_MAP_INVALIDATE_RANGE_BIT */
-   { 20467, 0x00000001 }, /* GL_MAP_READ_BIT */
-   { 20483, 0x00000D11 }, /* GL_MAP_STENCIL */
-   { 20498, 0x00000020 }, /* GL_MAP_UNSYNCHRONIZED_BIT */
-   { 20524, 0x00000002 }, /* GL_MAP_WRITE_BIT */
-   { 20541, 0x000088C0 }, /* GL_MATRIX0_ARB */
-   { 20556, 0x00008630 }, /* GL_MATRIX0_NV */
-   { 20570, 0x000088CA }, /* GL_MATRIX10_ARB */
-   { 20586, 0x000088CB }, /* GL_MATRIX11_ARB */
-   { 20602, 0x000088CC }, /* GL_MATRIX12_ARB */
-   { 20618, 0x000088CD }, /* GL_MATRIX13_ARB */
-   { 20634, 0x000088CE }, /* GL_MATRIX14_ARB */
-   { 20650, 0x000088CF }, /* GL_MATRIX15_ARB */
-   { 20666, 0x000088D0 }, /* GL_MATRIX16_ARB */
-   { 20682, 0x000088D1 }, /* GL_MATRIX17_ARB */
-   { 20698, 0x000088D2 }, /* GL_MATRIX18_ARB */
-   { 20714, 0x000088D3 }, /* GL_MATRIX19_ARB */
-   { 20730, 0x000088C1 }, /* GL_MATRIX1_ARB */
-   { 20745, 0x00008631 }, /* GL_MATRIX1_NV */
-   { 20759, 0x000088D4 }, /* GL_MATRIX20_ARB */
-   { 20775, 0x000088D5 }, /* GL_MATRIX21_ARB */
-   { 20791, 0x000088D6 }, /* GL_MATRIX22_ARB */
-   { 20807, 0x000088D7 }, /* GL_MATRIX23_ARB */
-   { 20823, 0x000088D8 }, /* GL_MATRIX24_ARB */
-   { 20839, 0x000088D9 }, /* GL_MATRIX25_ARB */
-   { 20855, 0x000088DA }, /* GL_MATRIX26_ARB */
-   { 20871, 0x000088DB }, /* GL_MATRIX27_ARB */
-   { 20887, 0x000088DC }, /* GL_MATRIX28_ARB */
-   { 20903, 0x000088DD }, /* GL_MATRIX29_ARB */
-   { 20919, 0x000088C2 }, /* GL_MATRIX2_ARB */
-   { 20934, 0x00008632 }, /* GL_MATRIX2_NV */
-   { 20948, 0x000088DE }, /* GL_MATRIX30_ARB */
-   { 20964, 0x000088DF }, /* GL_MATRIX31_ARB */
-   { 20980, 0x000088C3 }, /* GL_MATRIX3_ARB */
-   { 20995, 0x00008633 }, /* GL_MATRIX3_NV */
-   { 21009, 0x000088C4 }, /* GL_MATRIX4_ARB */
-   { 21024, 0x00008634 }, /* GL_MATRIX4_NV */
-   { 21038, 0x000088C5 }, /* GL_MATRIX5_ARB */
-   { 21053, 0x00008635 }, /* GL_MATRIX5_NV */
-   { 21067, 0x000088C6 }, /* GL_MATRIX6_ARB */
-   { 21082, 0x00008636 }, /* GL_MATRIX6_NV */
-   { 21096, 0x000088C7 }, /* GL_MATRIX7_ARB */
-   { 21111, 0x00008637 }, /* GL_MATRIX7_NV */
-   { 21125, 0x000088C8 }, /* GL_MATRIX8_ARB */
-   { 21140, 0x000088C9 }, /* GL_MATRIX9_ARB */
-   { 21155, 0x00008844 }, /* GL_MATRIX_INDEX_ARRAY_ARB */
-   { 21181, 0x00008B9E }, /* GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES */
-   { 21222, 0x00008844 }, /* GL_MATRIX_INDEX_ARRAY_OES */
-   { 21248, 0x00008849 }, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */
-   { 21282, 0x00008849 }, /* GL_MATRIX_INDEX_ARRAY_POINTER_OES */
-   { 21316, 0x00008846 }, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */
-   { 21347, 0x00008846 }, /* GL_MATRIX_INDEX_ARRAY_SIZE_OES */
-   { 21378, 0x00008848 }, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */
-   { 21411, 0x00008848 }, /* GL_MATRIX_INDEX_ARRAY_STRIDE_OES */
-   { 21444, 0x00008847 }, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */
-   { 21475, 0x00008847 }, /* GL_MATRIX_INDEX_ARRAY_TYPE_OES */
-   { 21506, 0x00000BA0 }, /* GL_MATRIX_MODE */
-   { 21521, 0x00008840 }, /* GL_MATRIX_PALETTE_ARB */
-   { 21543, 0x00008840 }, /* GL_MATRIX_PALETTE_OES */
-   { 21565, 0x00008008 }, /* GL_MAX */
-   { 21572, 0x00008073 }, /* GL_MAX_3D_TEXTURE_SIZE */
-   { 21595, 0x00008073 }, /* GL_MAX_3D_TEXTURE_SIZE_OES */
-   { 21622, 0x000088FF }, /* GL_MAX_ARRAY_TEXTURE_LAYERS */
-   { 21650, 0x000088FF }, /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */
-   { 21682, 0x00000D35 }, /* GL_MAX_ATTRIB_STACK_DEPTH */
-   { 21708, 0x00000D3B }, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */
-   { 21741, 0x00008177 }, /* GL_MAX_CLIPMAP_DEPTH_SGIX */
-   { 21767, 0x00008178 }, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */
-   { 21801, 0x00000D32 }, /* GL_MAX_CLIP_DISTANCES */
-   { 21823, 0x00000D32 }, /* GL_MAX_CLIP_PLANES */
-   { 21842, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS */
-   { 21867, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS_EXT */
-   { 21896, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */
-   { 21928, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI */
-   { 21964, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */
-   { 22000, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB */
-   { 22040, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT */
-   { 22066, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT_EXT */
-   { 22096, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH */
-   { 22121, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH_EXT */
-   { 22150, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */
-   { 22179, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB */
-   { 22212, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES */
-   { 22245, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS */
-   { 22265, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ARB */
-   { 22289, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ATI */
-   { 22313, 0x000080E9 }, /* GL_MAX_ELEMENTS_INDICES */
-   { 22337, 0x000080E8 }, /* GL_MAX_ELEMENTS_VERTICES */
-   { 22362, 0x00000D30 }, /* GL_MAX_EVAL_ORDER */
-   { 22380, 0x00008008 }, /* GL_MAX_EXT */
-   { 22391, 0x00009125 }, /* GL_MAX_FRAGMENT_INPUT_COMPONENTS */
-   { 22424, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */
-   { 22459, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB */
-   { 22498, 0x00008DFD }, /* GL_MAX_FRAGMENT_UNIFORM_VECTORS */
-   { 22530, 0x00009123 }, /* GL_MAX_GEOMETRY_INPUT_COMPONENTS */
-   { 22563, 0x00009124 }, /* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS */
-   { 22597, 0x00008DE0 }, /* GL_MAX_GEOMETRY_OUTPUT_VERTICES */
-   { 22629, 0x00008DE0 }, /* GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB */
-   { 22665, 0x00008C29 }, /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS */
-   { 22701, 0x00008C29 }, /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB */
-   { 22741, 0x00008DE1 }, /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS */
-   { 22781, 0x00008DE1 }, /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB */
-   { 22825, 0x00008DDF }, /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS */
-   { 22860, 0x00008DDF }, /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB */
-   { 22899, 0x00008DDD }, /* GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB */
-   { 22938, 0x00000D31 }, /* GL_MAX_LIGHTS */
-   { 22952, 0x00000B31 }, /* GL_MAX_LIST_NESTING */
-   { 22972, 0x00008841 }, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */
-   { 23010, 0x00000D36 }, /* GL_MAX_MODELVIEW_STACK_DEPTH */
-   { 23039, 0x00000D37 }, /* GL_MAX_NAME_STACK_DEPTH */
-   { 23063, 0x00008842 }, /* GL_MAX_PALETTE_MATRICES_ARB */
-   { 23091, 0x00008842 }, /* GL_MAX_PALETTE_MATRICES_OES */
-   { 23119, 0x00000D34 }, /* GL_MAX_PIXEL_MAP_TABLE */
-   { 23142, 0x000088B1 }, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */
-   { 23179, 0x0000880B }, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */
-   { 23215, 0x000088AD }, /* GL_MAX_PROGRAM_ATTRIBS_ARB */
-   { 23242, 0x000088F5 }, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */
-   { 23271, 0x000088B5 }, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */
-   { 23305, 0x000088F4 }, /* GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */
-   { 23341, 0x000088F6 }, /* GL_MAX_PROGRAM_IF_DEPTH_NV */
-   { 23368, 0x000088A1 }, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */
-   { 23400, 0x000088B4 }, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */
-   { 23436, 0x000088F8 }, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */
-   { 23465, 0x000088F7 }, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */
-   { 23494, 0x0000862F }, /* GL_MAX_PROGRAM_MATRICES_ARB */
-   { 23522, 0x0000862E }, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */
-   { 23560, 0x000088B3 }, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
-   { 23604, 0x0000880E }, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
-   { 23647, 0x000088AF }, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */
-   { 23681, 0x000088A3 }, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
-   { 23720, 0x000088AB }, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */
-   { 23757, 0x000088A7 }, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */
-   { 23795, 0x00008810 }, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
-   { 23838, 0x0000880F }, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
-   { 23881, 0x000088A9 }, /* GL_MAX_PROGRAM_PARAMETERS_ARB */
-   { 23911, 0x000088A5 }, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */
-   { 23942, 0x00008905 }, /* GL_MAX_PROGRAM_TEXEL_OFFSET */
-   { 23970, 0x00008905 }, /* GL_MAX_PROGRAM_TEXEL_OFFSET_EXT */
-   { 24002, 0x0000880D }, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */
-   { 24038, 0x0000880C }, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */
-   { 24074, 0x00000D38 }, /* GL_MAX_PROJECTION_STACK_DEPTH */
-   { 24104, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE */
-   { 24134, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */
-   { 24168, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_NV */
-   { 24201, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE */
-   { 24226, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE_EXT */
-   { 24255, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE_OES */
-   { 24284, 0x00008D57 }, /* GL_MAX_SAMPLES */
-   { 24299, 0x00008D57 }, /* GL_MAX_SAMPLES_EXT */
-   { 24318, 0x00009111 }, /* GL_MAX_SERVER_WAIT_TIMEOUT */
-   { 24345, 0x00008504 }, /* GL_MAX_SHININESS_NV */
-   { 24365, 0x00008505 }, /* GL_MAX_SPOT_EXPONENT_NV */
-   { 24389, 0x00008C2B }, /* GL_MAX_TEXTURE_BUFFER_SIZE */
-   { 24416, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS */
-   { 24438, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS_ARB */
-   { 24464, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS */
-   { 24491, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS_ARB */
-   { 24522, 0x000084FD }, /* GL_MAX_TEXTURE_LOD_BIAS */
-   { 24546, 0x000084FD }, /* GL_MAX_TEXTURE_LOD_BIAS_EXT */
-   { 24574, 0x000084FF }, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */
-   { 24608, 0x00000D33 }, /* GL_MAX_TEXTURE_SIZE */
-   { 24628, 0x00000D39 }, /* GL_MAX_TEXTURE_STACK_DEPTH */
-   { 24655, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS */
-   { 24676, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS_ARB */
-   { 24701, 0x0000862F }, /* GL_MAX_TRACK_MATRICES_NV */
-   { 24726, 0x0000862E }, /* GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV */
-   { 24761, 0x00008C8A }, /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS */
-   { 24810, 0x00008C8A }, /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT */
-   { 24863, 0x00008C8B }, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS */
-   { 24906, 0x00008C8B }, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT */
-   { 24953, 0x00008C80 }, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS */
-   { 24999, 0x00008C80 }, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT */
-   { 25049, 0x00008B4B }, /* GL_MAX_VARYING_COMPONENTS */
-   { 25075, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS */
-   { 25097, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS_ARB */
-   { 25123, 0x00008DFC }, /* GL_MAX_VARYING_VECTORS */
-   { 25146, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS */
-   { 25168, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS_ARB */
-   { 25194, 0x00009122 }, /* GL_MAX_VERTEX_OUTPUT_COMPONENTS */
-   { 25226, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */
-   { 25260, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */
-   { 25298, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */
-   { 25331, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB */
-   { 25368, 0x00008DFB }, /* GL_MAX_VERTEX_UNIFORM_VECTORS */
-   { 25398, 0x000086A4 }, /* GL_MAX_VERTEX_UNITS_ARB */
-   { 25422, 0x000086A4 }, /* GL_MAX_VERTEX_UNITS_OES */
-   { 25446, 0x00008DDE }, /* GL_MAX_VERTEX_VARYING_COMPONENTS_ARB */
-   { 25483, 0x00000D3A }, /* GL_MAX_VIEWPORT_DIMS */
-   { 25504, 0x00008DF1 }, /* GL_MEDIUM_FLOAT */
-   { 25520, 0x00008DF4 }, /* GL_MEDIUM_INT */
-   { 25534, 0x00008007 }, /* GL_MIN */
-   { 25541, 0x0000802E }, /* GL_MINMAX */
-   { 25551, 0x0000802E }, /* GL_MINMAX_EXT */
-   { 25565, 0x0000802F }, /* GL_MINMAX_FORMAT */
-   { 25582, 0x0000802F }, /* GL_MINMAX_FORMAT_EXT */
-   { 25603, 0x00008030 }, /* GL_MINMAX_SINK */
-   { 25618, 0x00008030 }, /* GL_MINMAX_SINK_EXT */
-   { 25637, 0x0000821C }, /* GL_MINOR_VERSION */
-   { 25654, 0x00008007 }, /* GL_MIN_EXT */
-   { 25665, 0x00008904 }, /* GL_MIN_PROGRAM_TEXEL_OFFSET */
-   { 25693, 0x00008904 }, /* GL_MIN_PROGRAM_TEXEL_OFFSET_EXT */
-   { 25725, 0x00008370 }, /* GL_MIRRORED_REPEAT */
-   { 25744, 0x00008370 }, /* GL_MIRRORED_REPEAT_ARB */
-   { 25767, 0x00008370 }, /* GL_MIRRORED_REPEAT_IBM */
-   { 25790, 0x00008742 }, /* GL_MIRROR_CLAMP_ATI */
-   { 25810, 0x00008742 }, /* GL_MIRROR_CLAMP_EXT */
-   { 25830, 0x00008912 }, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */
-   { 25860, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_ATI */
-   { 25888, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */
-   { 25916, 0x00001700 }, /* GL_MODELVIEW */
-   { 25929, 0x00001700 }, /* GL_MODELVIEW0_ARB */
-   { 25947, 0x0000872A }, /* GL_MODELVIEW10_ARB */
-   { 25966, 0x0000872B }, /* GL_MODELVIEW11_ARB */
-   { 25985, 0x0000872C }, /* GL_MODELVIEW12_ARB */
-   { 26004, 0x0000872D }, /* GL_MODELVIEW13_ARB */
-   { 26023, 0x0000872E }, /* GL_MODELVIEW14_ARB */
-   { 26042, 0x0000872F }, /* GL_MODELVIEW15_ARB */
-   { 26061, 0x00008730 }, /* GL_MODELVIEW16_ARB */
-   { 26080, 0x00008731 }, /* GL_MODELVIEW17_ARB */
-   { 26099, 0x00008732 }, /* GL_MODELVIEW18_ARB */
-   { 26118, 0x00008733 }, /* GL_MODELVIEW19_ARB */
-   { 26137, 0x0000850A }, /* GL_MODELVIEW1_ARB */
-   { 26155, 0x00008734 }, /* GL_MODELVIEW20_ARB */
-   { 26174, 0x00008735 }, /* GL_MODELVIEW21_ARB */
-   { 26193, 0x00008736 }, /* GL_MODELVIEW22_ARB */
-   { 26212, 0x00008737 }, /* GL_MODELVIEW23_ARB */
-   { 26231, 0x00008738 }, /* GL_MODELVIEW24_ARB */
-   { 26250, 0x00008739 }, /* GL_MODELVIEW25_ARB */
-   { 26269, 0x0000873A }, /* GL_MODELVIEW26_ARB */
-   { 26288, 0x0000873B }, /* GL_MODELVIEW27_ARB */
-   { 26307, 0x0000873C }, /* GL_MODELVIEW28_ARB */
-   { 26326, 0x0000873D }, /* GL_MODELVIEW29_ARB */
-   { 26345, 0x00008722 }, /* GL_MODELVIEW2_ARB */
-   { 26363, 0x0000873E }, /* GL_MODELVIEW30_ARB */
-   { 26382, 0x0000873F }, /* GL_MODELVIEW31_ARB */
-   { 26401, 0x00008723 }, /* GL_MODELVIEW3_ARB */
-   { 26419, 0x00008724 }, /* GL_MODELVIEW4_ARB */
-   { 26437, 0x00008725 }, /* GL_MODELVIEW5_ARB */
-   { 26455, 0x00008726 }, /* GL_MODELVIEW6_ARB */
-   { 26473, 0x00008727 }, /* GL_MODELVIEW7_ARB */
-   { 26491, 0x00008728 }, /* GL_MODELVIEW8_ARB */
-   { 26509, 0x00008729 }, /* GL_MODELVIEW9_ARB */
-   { 26527, 0x00000BA6 }, /* GL_MODELVIEW_MATRIX */
-   { 26547, 0x0000898D }, /* GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES */
-   { 26589, 0x00008629 }, /* GL_MODELVIEW_PROJECTION_NV */
-   { 26616, 0x00000BA3 }, /* GL_MODELVIEW_STACK_DEPTH */
-   { 26641, 0x00002100 }, /* GL_MODULATE */
-   { 26653, 0x00008744 }, /* GL_MODULATE_ADD_ATI */
-   { 26673, 0x00008745 }, /* GL_MODULATE_SIGNED_ADD_ATI */
-   { 26700, 0x00008746 }, /* GL_MODULATE_SUBTRACT_ATI */
-   { 26725, 0x00000103 }, /* GL_MULT */
-   { 26733, 0x0000809D }, /* GL_MULTISAMPLE */
-   { 26748, 0x000086B2 }, /* GL_MULTISAMPLE_3DFX */
-   { 26768, 0x0000809D }, /* GL_MULTISAMPLE_ARB */
-   { 26787, 0x20000000 }, /* GL_MULTISAMPLE_BIT */
-   { 26806, 0x20000000 }, /* GL_MULTISAMPLE_BIT_3DFX */
-   { 26830, 0x20000000 }, /* GL_MULTISAMPLE_BIT_ARB */
-   { 26853, 0x00008534 }, /* GL_MULTISAMPLE_FILTER_HINT_NV */
-   { 26883, 0x00002A25 }, /* GL_N3F_V3F */
-   { 26894, 0x00000D70 }, /* GL_NAME_STACK_DEPTH */
-   { 26914, 0x0000150E }, /* GL_NAND */
-   { 26922, 0x00002600 }, /* GL_NEAREST */
-   { 26933, 0x0000844E }, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */
-   { 26964, 0x0000844D }, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */
-   { 26996, 0x00002702 }, /* GL_NEAREST_MIPMAP_LINEAR */
-   { 27021, 0x00002700 }, /* GL_NEAREST_MIPMAP_NEAREST */
-   { 27047, 0x00000200 }, /* GL_NEVER */
-   { 27056, 0x00001102 }, /* GL_NICEST */
-   { 27066, 0x00000000 }, /* GL_NONE */
-   { 27074, 0x00000000 }, /* GL_NONE_OES */
-   { 27086, 0x00001505 }, /* GL_NOOP */
-   { 27094, 0x00001508 }, /* GL_NOR */
-   { 27101, 0x00000BA1 }, /* GL_NORMALIZE */
-   { 27114, 0x00008075 }, /* GL_NORMAL_ARRAY */
-   { 27130, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING */
-   { 27161, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING_ARB */
-   { 27196, 0x0000808F }, /* GL_NORMAL_ARRAY_POINTER */
-   { 27220, 0x0000807F }, /* GL_NORMAL_ARRAY_STRIDE */
-   { 27243, 0x0000807E }, /* GL_NORMAL_ARRAY_TYPE */
-   { 27264, 0x00008511 }, /* GL_NORMAL_MAP */
-   { 27278, 0x00008511 }, /* GL_NORMAL_MAP_ARB */
-   { 27296, 0x00008511 }, /* GL_NORMAL_MAP_NV */
-   { 27313, 0x00008511 }, /* GL_NORMAL_MAP_OES */
-   { 27331, 0x00000205 }, /* GL_NOTEQUAL */
-   { 27343, 0x00000000 }, /* GL_NO_ERROR */
-   { 27355, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */
-   { 27389, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB */
-   { 27427, 0x0000821D }, /* GL_NUM_EXTENSIONS */
-   { 27445, 0x000087FE }, /* GL_NUM_PROGRAM_BINARY_FORMATS_OES */
-   { 27479, 0x00008DF9 }, /* GL_NUM_SHADER_BINARY_FORMATS */
-   { 27508, 0x00008B89 }, /* GL_OBJECT_ACTIVE_ATTRIBUTES_ARB */
-   { 27540, 0x00008B8A }, /* GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB */
-   { 27582, 0x00008B86 }, /* GL_OBJECT_ACTIVE_UNIFORMS_ARB */
-   { 27612, 0x00008B87 }, /* GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB */
-   { 27652, 0x00008B85 }, /* GL_OBJECT_ATTACHED_OBJECTS_ARB */
-   { 27683, 0x00008B81 }, /* GL_OBJECT_COMPILE_STATUS_ARB */
-   { 27712, 0x00008B80 }, /* GL_OBJECT_DELETE_STATUS_ARB */
-   { 27740, 0x00008B84 }, /* GL_OBJECT_INFO_LOG_LENGTH_ARB */
-   { 27770, 0x00002401 }, /* GL_OBJECT_LINEAR */
-   { 27787, 0x00008B82 }, /* GL_OBJECT_LINK_STATUS_ARB */
-   { 27813, 0x00002501 }, /* GL_OBJECT_PLANE */
-   { 27829, 0x00008B88 }, /* GL_OBJECT_SHADER_SOURCE_LENGTH_ARB */
-   { 27864, 0x00008B4F }, /* GL_OBJECT_SUBTYPE_ARB */
-   { 27886, 0x00009112 }, /* GL_OBJECT_TYPE */
-   { 27901, 0x00008B4E }, /* GL_OBJECT_TYPE_ARB */
-   { 27920, 0x00008B83 }, /* GL_OBJECT_VALIDATE_STATUS_ARB */
-   { 27950, 0x00008165 }, /* GL_OCCLUSION_TEST_HP */
-   { 27971, 0x00008166 }, /* GL_OCCLUSION_TEST_RESULT_HP */
-   { 27999, 0x00000001 }, /* GL_ONE */
-   { 28006, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA */
-   { 28034, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA_EXT */
-   { 28066, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR */
-   { 28094, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR_EXT */
-   { 28126, 0x00000305 }, /* GL_ONE_MINUS_DST_ALPHA */
-   { 28149, 0x00000307 }, /* GL_ONE_MINUS_DST_COLOR */
-   { 28172, 0x00000303 }, /* GL_ONE_MINUS_SRC_ALPHA */
-   { 28195, 0x00000301 }, /* GL_ONE_MINUS_SRC_COLOR */
-   { 28218, 0x00008598 }, /* GL_OPERAND0_ALPHA */
-   { 28236, 0x00008598 }, /* GL_OPERAND0_ALPHA_ARB */
-   { 28258, 0x00008598 }, /* GL_OPERAND0_ALPHA_EXT */
-   { 28280, 0x00008590 }, /* GL_OPERAND0_RGB */
-   { 28296, 0x00008590 }, /* GL_OPERAND0_RGB_ARB */
-   { 28316, 0x00008590 }, /* GL_OPERAND0_RGB_EXT */
-   { 28336, 0x00008599 }, /* GL_OPERAND1_ALPHA */
-   { 28354, 0x00008599 }, /* GL_OPERAND1_ALPHA_ARB */
-   { 28376, 0x00008599 }, /* GL_OPERAND1_ALPHA_EXT */
-   { 28398, 0x00008591 }, /* GL_OPERAND1_RGB */
-   { 28414, 0x00008591 }, /* GL_OPERAND1_RGB_ARB */
-   { 28434, 0x00008591 }, /* GL_OPERAND1_RGB_EXT */
-   { 28454, 0x0000859A }, /* GL_OPERAND2_ALPHA */
-   { 28472, 0x0000859A }, /* GL_OPERAND2_ALPHA_ARB */
-   { 28494, 0x0000859A }, /* GL_OPERAND2_ALPHA_EXT */
-   { 28516, 0x00008592 }, /* GL_OPERAND2_RGB */
-   { 28532, 0x00008592 }, /* GL_OPERAND2_RGB_ARB */
-   { 28552, 0x00008592 }, /* GL_OPERAND2_RGB_EXT */
-   { 28572, 0x0000859B }, /* GL_OPERAND3_ALPHA_NV */
-   { 28593, 0x00008593 }, /* GL_OPERAND3_RGB_NV */
-   { 28612, 0x00001507 }, /* GL_OR */
-   { 28618, 0x00000A01 }, /* GL_ORDER */
-   { 28627, 0x0000150D }, /* GL_OR_INVERTED */
-   { 28642, 0x0000150B }, /* GL_OR_REVERSE */
-   { 28656, 0x00000505 }, /* GL_OUT_OF_MEMORY */
-   { 28673, 0x00000D05 }, /* GL_PACK_ALIGNMENT */
-   { 28691, 0x0000806C }, /* GL_PACK_IMAGE_HEIGHT */
-   { 28712, 0x00008758 }, /* GL_PACK_INVERT_MESA */
-   { 28732, 0x00000D01 }, /* GL_PACK_LSB_FIRST */
-   { 28750, 0x00000D02 }, /* GL_PACK_ROW_LENGTH */
-   { 28769, 0x0000806B }, /* GL_PACK_SKIP_IMAGES */
-   { 28789, 0x00000D04 }, /* GL_PACK_SKIP_PIXELS */
-   { 28809, 0x00000D03 }, /* GL_PACK_SKIP_ROWS */
-   { 28827, 0x00000D00 }, /* GL_PACK_SWAP_BYTES */
-   { 28846, 0x00008B92 }, /* GL_PALETTE4_R5_G6_B5_OES */
-   { 28871, 0x00008B94 }, /* GL_PALETTE4_RGB5_A1_OES */
-   { 28895, 0x00008B90 }, /* GL_PALETTE4_RGB8_OES */
-   { 28916, 0x00008B93 }, /* GL_PALETTE4_RGBA4_OES */
-   { 28938, 0x00008B91 }, /* GL_PALETTE4_RGBA8_OES */
-   { 28960, 0x00008B97 }, /* GL_PALETTE8_R5_G6_B5_OES */
-   { 28985, 0x00008B99 }, /* GL_PALETTE8_RGB5_A1_OES */
-   { 29009, 0x00008B95 }, /* GL_PALETTE8_RGB8_OES */
-   { 29030, 0x00008B98 }, /* GL_PALETTE8_RGBA4_OES */
-   { 29052, 0x00008B96 }, /* GL_PALETTE8_RGBA8_OES */
-   { 29074, 0x00000700 }, /* GL_PASS_THROUGH_TOKEN */
-   { 29096, 0x00000C50 }, /* GL_PERSPECTIVE_CORRECTION_HINT */
-   { 29127, 0x00000C79 }, /* GL_PIXEL_MAP_A_TO_A */
-   { 29147, 0x00000CB9 }, /* GL_PIXEL_MAP_A_TO_A_SIZE */
-   { 29172, 0x00000C78 }, /* GL_PIXEL_MAP_B_TO_B */
-   { 29192, 0x00000CB8 }, /* GL_PIXEL_MAP_B_TO_B_SIZE */
-   { 29217, 0x00000C77 }, /* GL_PIXEL_MAP_G_TO_G */
-   { 29237, 0x00000CB7 }, /* GL_PIXEL_MAP_G_TO_G_SIZE */
-   { 29262, 0x00000C75 }, /* GL_PIXEL_MAP_I_TO_A */
-   { 29282, 0x00000CB5 }, /* GL_PIXEL_MAP_I_TO_A_SIZE */
-   { 29307, 0x00000C74 }, /* GL_PIXEL_MAP_I_TO_B */
-   { 29327, 0x00000CB4 }, /* GL_PIXEL_MAP_I_TO_B_SIZE */
-   { 29352, 0x00000C73 }, /* GL_PIXEL_MAP_I_TO_G */
-   { 29372, 0x00000CB3 }, /* GL_PIXEL_MAP_I_TO_G_SIZE */
-   { 29397, 0x00000C70 }, /* GL_PIXEL_MAP_I_TO_I */
-   { 29417, 0x00000CB0 }, /* GL_PIXEL_MAP_I_TO_I_SIZE */
-   { 29442, 0x00000C72 }, /* GL_PIXEL_MAP_I_TO_R */
-   { 29462, 0x00000CB2 }, /* GL_PIXEL_MAP_I_TO_R_SIZE */
-   { 29487, 0x00000C76 }, /* GL_PIXEL_MAP_R_TO_R */
-   { 29507, 0x00000CB6 }, /* GL_PIXEL_MAP_R_TO_R_SIZE */
-   { 29532, 0x00000C71 }, /* GL_PIXEL_MAP_S_TO_S */
-   { 29552, 0x00000CB1 }, /* GL_PIXEL_MAP_S_TO_S_SIZE */
-   { 29577, 0x00000020 }, /* GL_PIXEL_MODE_BIT */
-   { 29595, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER */
-   { 29616, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING */
-   { 29645, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING_EXT */
-   { 29678, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER_EXT */
-   { 29703, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER */
-   { 29726, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING */
-   { 29757, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING_EXT */
-   { 29792, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER_EXT */
-   { 29819, 0x00001B00 }, /* GL_POINT */
-   { 29828, 0x00000000 }, /* GL_POINTS */
-   { 29838, 0x00000002 }, /* GL_POINT_BIT */
-   { 29851, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION */
-   { 29881, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_ARB */
-   { 29915, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_EXT */
-   { 29949, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_SGIS */
-   { 29984, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE */
-   { 30013, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_ARB */
-   { 30046, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_EXT */
-   { 30079, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_SGIS */
-   { 30113, 0x00000B11 }, /* GL_POINT_SIZE */
-   { 30127, 0x00008B9F }, /* GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES */
-   { 30166, 0x00008B9C }, /* GL_POINT_SIZE_ARRAY_OES */
-   { 30190, 0x0000898C }, /* GL_POINT_SIZE_ARRAY_POINTER_OES */
-   { 30222, 0x0000898B }, /* GL_POINT_SIZE_ARRAY_STRIDE_OES */
-   { 30253, 0x0000898A }, /* GL_POINT_SIZE_ARRAY_TYPE_OES */
-   { 30282, 0x00000B13 }, /* GL_POINT_SIZE_GRANULARITY */
-   { 30308, 0x00008127 }, /* GL_POINT_SIZE_MAX */
-   { 30326, 0x00008127 }, /* GL_POINT_SIZE_MAX_ARB */
-   { 30348, 0x00008127 }, /* GL_POINT_SIZE_MAX_EXT */
-   { 30370, 0x00008127 }, /* GL_POINT_SIZE_MAX_SGIS */
-   { 30393, 0x00008126 }, /* GL_POINT_SIZE_MIN */
-   { 30411, 0x00008126 }, /* GL_POINT_SIZE_MIN_ARB */
-   { 30433, 0x00008126 }, /* GL_POINT_SIZE_MIN_EXT */
-   { 30455, 0x00008126 }, /* GL_POINT_SIZE_MIN_SGIS */
-   { 30478, 0x00000B12 }, /* GL_POINT_SIZE_RANGE */
-   { 30498, 0x00000B10 }, /* GL_POINT_SMOOTH */
-   { 30514, 0x00000C51 }, /* GL_POINT_SMOOTH_HINT */
-   { 30535, 0x00008861 }, /* GL_POINT_SPRITE */
-   { 30551, 0x00008861 }, /* GL_POINT_SPRITE_ARB */
-   { 30571, 0x00008CA0 }, /* GL_POINT_SPRITE_COORD_ORIGIN */
-   { 30600, 0x00008861 }, /* GL_POINT_SPRITE_NV */
-   { 30619, 0x00008861 }, /* GL_POINT_SPRITE_OES */
-   { 30639, 0x00008863 }, /* GL_POINT_SPRITE_R_MODE_NV */
-   { 30665, 0x00000701 }, /* GL_POINT_TOKEN */
-   { 30680, 0x00000009 }, /* GL_POLYGON */
-   { 30691, 0x00000008 }, /* GL_POLYGON_BIT */
-   { 30706, 0x00000B40 }, /* GL_POLYGON_MODE */
-   { 30722, 0x00008039 }, /* GL_POLYGON_OFFSET_BIAS */
-   { 30745, 0x00008038 }, /* GL_POLYGON_OFFSET_FACTOR */
-   { 30770, 0x00008037 }, /* GL_POLYGON_OFFSET_FILL */
-   { 30793, 0x00002A02 }, /* GL_POLYGON_OFFSET_LINE */
-   { 30816, 0x00002A01 }, /* GL_POLYGON_OFFSET_POINT */
-   { 30840, 0x00002A00 }, /* GL_POLYGON_OFFSET_UNITS */
-   { 30864, 0x00000B41 }, /* GL_POLYGON_SMOOTH */
-   { 30882, 0x00000C53 }, /* GL_POLYGON_SMOOTH_HINT */
-   { 30905, 0x00000B42 }, /* GL_POLYGON_STIPPLE */
-   { 30924, 0x00000010 }, /* GL_POLYGON_STIPPLE_BIT */
-   { 30947, 0x00000703 }, /* GL_POLYGON_TOKEN */
-   { 30964, 0x00001203 }, /* GL_POSITION */
-   { 30976, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */
-   { 31008, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI */
-   { 31044, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */
-   { 31077, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI */
-   { 31114, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */
-   { 31145, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI */
-   { 31180, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */
-   { 31212, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI */
-   { 31248, 0x000080D2 }, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */
-   { 31281, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */
-   { 31313, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI */
-   { 31349, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */
-   { 31382, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI */
-   { 31419, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS */
-   { 31449, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS_SGI */
-   { 31483, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE */
-   { 31514, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE_SGI */
-   { 31549, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS */
-   { 31580, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS_EXT */
-   { 31615, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE */
-   { 31647, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE_EXT */
-   { 31683, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS */
-   { 31713, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS_EXT */
-   { 31747, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE */
-   { 31778, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE_EXT */
-   { 31813, 0x000080D1 }, /* GL_POST_CONVOLUTION_COLOR_TABLE */
-   { 31845, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS */
-   { 31876, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS_EXT */
-   { 31911, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE */
-   { 31943, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE_EXT */
-   { 31979, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS */
-   { 32008, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS_EXT */
-   { 32041, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE */
-   { 32071, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE_EXT */
-   { 32105, 0x0000817B }, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */
-   { 32144, 0x00008179 }, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */
-   { 32177, 0x0000817C }, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */
-   { 32217, 0x0000817A }, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */
-   { 32251, 0x00008578 }, /* GL_PREVIOUS */
-   { 32263, 0x00008578 }, /* GL_PREVIOUS_ARB */
-   { 32279, 0x00008578 }, /* GL_PREVIOUS_EXT */
-   { 32295, 0x00008577 }, /* GL_PRIMARY_COLOR */
-   { 32312, 0x00008577 }, /* GL_PRIMARY_COLOR_ARB */
-   { 32333, 0x00008577 }, /* GL_PRIMARY_COLOR_EXT */
-   { 32354, 0x00008C87 }, /* GL_PRIMITIVES_GENERATED */
-   { 32378, 0x00008C87 }, /* GL_PRIMITIVES_GENERATED_EXT */
-   { 32406, 0x00008F9D }, /* GL_PRIMITIVE_RESTART */
-   { 32427, 0x00008F9E }, /* GL_PRIMITIVE_RESTART_INDEX */
-   { 32454, 0x00008559 }, /* GL_PRIMITIVE_RESTART_INDEX_NV */
-   { 32484, 0x00008558 }, /* GL_PRIMITIVE_RESTART_NV */
-   { 32508, 0x000088B0 }, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */
-   { 32541, 0x00008805 }, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */
-   { 32573, 0x000088AC }, /* GL_PROGRAM_ATTRIBS_ARB */
-   { 32596, 0x000087FF }, /* GL_PROGRAM_BINARY_FORMATS_OES */
-   { 32626, 0x00008741 }, /* GL_PROGRAM_BINARY_LENGTH_OES */
-   { 32655, 0x00008677 }, /* GL_PROGRAM_BINDING_ARB */
-   { 32678, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_ARB */
-   { 32708, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_NV */
-   { 32737, 0x00008874 }, /* GL_PROGRAM_ERROR_STRING_ARB */
-   { 32765, 0x00008876 }, /* GL_PROGRAM_FORMAT_ARB */
-   { 32787, 0x00008875 }, /* GL_PROGRAM_FORMAT_ASCII_ARB */
-   { 32815, 0x000088A0 }, /* GL_PROGRAM_INSTRUCTIONS_ARB */
-   { 32843, 0x00008627 }, /* GL_PROGRAM_LENGTH_ARB */
-   { 32865, 0x00008627 }, /* GL_PROGRAM_LENGTH_NV */
-   { 32886, 0x000088B2 }, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
-   { 32926, 0x00008808 }, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
-   { 32965, 0x000088AE }, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */
-   { 32995, 0x000088A2 }, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
-   { 33030, 0x000088AA }, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */
-   { 33063, 0x000088A6 }, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */
-   { 33097, 0x0000880A }, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
-   { 33136, 0x00008809 }, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
-   { 33175, 0x00008B40 }, /* GL_PROGRAM_OBJECT_ARB */
-   { 33197, 0x000088A8 }, /* GL_PROGRAM_PARAMETERS_ARB */
-   { 33223, 0x00008644 }, /* GL_PROGRAM_PARAMETER_NV */
-   { 33247, 0x00008642 }, /* GL_PROGRAM_POINT_SIZE */
-   { 33269, 0x00008642 }, /* GL_PROGRAM_POINT_SIZE_ARB */
-   { 33295, 0x00008647 }, /* GL_PROGRAM_RESIDENT_NV */
-   { 33318, 0x00008628 }, /* GL_PROGRAM_STRING_ARB */
-   { 33340, 0x00008628 }, /* GL_PROGRAM_STRING_NV */
-   { 33361, 0x00008646 }, /* GL_PROGRAM_TARGET_NV */
-   { 33382, 0x000088A4 }, /* GL_PROGRAM_TEMPORARIES_ARB */
-   { 33409, 0x00008807 }, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */
-   { 33441, 0x00008806 }, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */
-   { 33473, 0x000088B6 }, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */
-   { 33508, 0x00001701 }, /* GL_PROJECTION */
-   { 33522, 0x00000BA7 }, /* GL_PROJECTION_MATRIX */
-   { 33543, 0x0000898E }, /* GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES */
-   { 33586, 0x00000BA4 }, /* GL_PROJECTION_STACK_DEPTH */
-   { 33612, 0x00008E4F }, /* GL_PROVOKING_VERTEX */
-   { 33632, 0x00008E4F }, /* GL_PROVOKING_VERTEX_EXT */
-   { 33656, 0x000080D3 }, /* GL_PROXY_COLOR_TABLE */
-   { 33677, 0x00008025 }, /* GL_PROXY_HISTOGRAM */
-   { 33696, 0x00008025 }, /* GL_PROXY_HISTOGRAM_EXT */
-   { 33719, 0x000080D5 }, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */
-   { 33758, 0x000080D4 }, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */
-   { 33796, 0x00008063 }, /* GL_PROXY_TEXTURE_1D */
-   { 33816, 0x00008C19 }, /* GL_PROXY_TEXTURE_1D_ARRAY */
-   { 33842, 0x00008C19 }, /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */
-   { 33872, 0x00008063 }, /* GL_PROXY_TEXTURE_1D_EXT */
-   { 33896, 0x00008064 }, /* GL_PROXY_TEXTURE_2D */
-   { 33916, 0x00008C1B }, /* GL_PROXY_TEXTURE_2D_ARRAY */
-   { 33942, 0x00008C1B }, /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */
-   { 33972, 0x00008064 }, /* GL_PROXY_TEXTURE_2D_EXT */
-   { 33996, 0x00008070 }, /* GL_PROXY_TEXTURE_3D */
-   { 34016, 0x000080BD }, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */
-   { 34049, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP */
-   { 34075, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP_ARB */
-   { 34105, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE */
-   { 34132, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */
-   { 34163, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_NV */
-   { 34193, 0x00008A1D }, /* GL_PURGEABLE_APPLE */
-   { 34212, 0x00002003 }, /* GL_Q */
-   { 34217, 0x00001209 }, /* GL_QUADRATIC_ATTENUATION */
-   { 34242, 0x00000007 }, /* GL_QUADS */
-   { 34251, 0x00008E4C }, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */
-   { 34295, 0x00008E4C }, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT */
-   { 34343, 0x00008614 }, /* GL_QUAD_MESH_SUN */
-   { 34360, 0x00000008 }, /* GL_QUAD_STRIP */
-   { 34374, 0x00008E16 }, /* GL_QUERY_BY_REGION_NO_WAIT */
-   { 34401, 0x00008E16 }, /* GL_QUERY_BY_REGION_NO_WAIT_NV */
-   { 34431, 0x00008E15 }, /* GL_QUERY_BY_REGION_WAIT */
-   { 34455, 0x00008E15 }, /* GL_QUERY_BY_REGION_WAIT_NV */
-   { 34482, 0x00008864 }, /* GL_QUERY_COUNTER_BITS */
-   { 34504, 0x00008864 }, /* GL_QUERY_COUNTER_BITS_ARB */
-   { 34530, 0x00008E14 }, /* GL_QUERY_NO_WAIT */
-   { 34547, 0x00008E14 }, /* GL_QUERY_NO_WAIT_NV */
-   { 34567, 0x00008866 }, /* GL_QUERY_RESULT */
-   { 34583, 0x00008866 }, /* GL_QUERY_RESULT_ARB */
-   { 34603, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE */
-   { 34629, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE_ARB */
-   { 34659, 0x00008E13 }, /* GL_QUERY_WAIT */
-   { 34673, 0x00008E13 }, /* GL_QUERY_WAIT_NV */
-   { 34690, 0x00002002 }, /* GL_R */
-   { 34695, 0x00008C3A }, /* GL_R11F_G11F_B10F */
-   { 34713, 0x00008F98 }, /* GL_R16_SNORM */
-   { 34726, 0x00002A10 }, /* GL_R3_G3_B2 */
-   { 34738, 0x00008F94 }, /* GL_R8_SNORM */
-   { 34750, 0x00008C89 }, /* GL_RASTERIZER_DISCARD */
-   { 34772, 0x00008C89 }, /* GL_RASTERIZER_DISCARD_EXT */
-   { 34798, 0x00019262 }, /* GL_RASTER_POSITION_UNCLIPPED_IBM */
-   { 34831, 0x00000C02 }, /* GL_READ_BUFFER */
-   { 34846, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER */
-   { 34866, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING */
-   { 34894, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING_EXT */
-   { 34926, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER_EXT */
-   { 34950, 0x000088B8 }, /* GL_READ_ONLY */
-   { 34963, 0x000088B8 }, /* GL_READ_ONLY_ARB */
-   { 34980, 0x000088BA }, /* GL_READ_WRITE */
-   { 34994, 0x000088BA }, /* GL_READ_WRITE_ARB */
-   { 35012, 0x00001903 }, /* GL_RED */
-   { 35019, 0x00008016 }, /* GL_REDUCE */
-   { 35029, 0x00008016 }, /* GL_REDUCE_EXT */
-   { 35043, 0x00000D15 }, /* GL_RED_BIAS */
-   { 35055, 0x00000D52 }, /* GL_RED_BITS */
-   { 35067, 0x00008D94 }, /* GL_RED_INTEGER */
-   { 35082, 0x00008D94 }, /* GL_RED_INTEGER_EXT */
-   { 35101, 0x00000D14 }, /* GL_RED_SCALE */
-   { 35114, 0x00008F90 }, /* GL_RED_SNORM */
-   { 35127, 0x00008512 }, /* GL_REFLECTION_MAP */
-   { 35145, 0x00008512 }, /* GL_REFLECTION_MAP_ARB */
-   { 35167, 0x00008512 }, /* GL_REFLECTION_MAP_NV */
-   { 35188, 0x00008512 }, /* GL_REFLECTION_MAP_OES */
-   { 35210, 0x00008A19 }, /* GL_RELEASED_APPLE */
-   { 35228, 0x00001C00 }, /* GL_RENDER */
-   { 35238, 0x00008D41 }, /* GL_RENDERBUFFER */
-   { 35254, 0x00008D53 }, /* GL_RENDERBUFFER_ALPHA_SIZE */
-   { 35281, 0x00008D53 }, /* GL_RENDERBUFFER_ALPHA_SIZE_OES */
-   { 35312, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING */
-   { 35336, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING_EXT */
-   { 35364, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING_OES */
-   { 35392, 0x00008D52 }, /* GL_RENDERBUFFER_BLUE_SIZE */
-   { 35418, 0x00008D52 }, /* GL_RENDERBUFFER_BLUE_SIZE_OES */
-   { 35448, 0x00008D54 }, /* GL_RENDERBUFFER_DEPTH_SIZE */
-   { 35475, 0x00008D54 }, /* GL_RENDERBUFFER_DEPTH_SIZE_OES */
-   { 35506, 0x00008D41 }, /* GL_RENDERBUFFER_EXT */
-   { 35526, 0x00008D51 }, /* GL_RENDERBUFFER_GREEN_SIZE */
-   { 35553, 0x00008D51 }, /* GL_RENDERBUFFER_GREEN_SIZE_OES */
-   { 35584, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT */
-   { 35607, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT_EXT */
-   { 35634, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT_OES */
-   { 35661, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT */
-   { 35693, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT_EXT */
-   { 35729, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT_OES */
-   { 35765, 0x00008D41 }, /* GL_RENDERBUFFER_OES */
-   { 35785, 0x00008D50 }, /* GL_RENDERBUFFER_RED_SIZE */
-   { 35810, 0x00008D50 }, /* GL_RENDERBUFFER_RED_SIZE_OES */
-   { 35839, 0x00008CAB }, /* GL_RENDERBUFFER_SAMPLES */
-   { 35863, 0x00008CAB }, /* GL_RENDERBUFFER_SAMPLES_EXT */
-   { 35891, 0x00008D55 }, /* GL_RENDERBUFFER_STENCIL_SIZE */
-   { 35920, 0x00008D55 }, /* GL_RENDERBUFFER_STENCIL_SIZE_OES */
-   { 35953, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH */
-   { 35975, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH_EXT */
-   { 36001, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH_OES */
-   { 36027, 0x00001F01 }, /* GL_RENDERER */
-   { 36039, 0x00000C40 }, /* GL_RENDER_MODE */
-   { 36054, 0x00002901 }, /* GL_REPEAT */
-   { 36064, 0x00001E01 }, /* GL_REPLACE */
-   { 36075, 0x00008062 }, /* GL_REPLACE_EXT */
-   { 36090, 0x00008153 }, /* GL_REPLICATE_BORDER_HP */
-   { 36113, 0x0000803A }, /* GL_RESCALE_NORMAL */
-   { 36131, 0x0000803A }, /* GL_RESCALE_NORMAL_EXT */
-   { 36153, 0x00008A1B }, /* GL_RETAINED_APPLE */
-   { 36171, 0x00000102 }, /* GL_RETURN */
-   { 36181, 0x00008F99 }, /* GL_RG16_SNORM */
-   { 36195, 0x00008F95 }, /* GL_RG8_SNORM */
-   { 36208, 0x00001907 }, /* GL_RGB */
-   { 36215, 0x00008052 }, /* GL_RGB10 */
-   { 36224, 0x00008059 }, /* GL_RGB10_A2 */
-   { 36236, 0x00008059 }, /* GL_RGB10_A2_EXT */
-   { 36252, 0x00008052 }, /* GL_RGB10_EXT */
-   { 36265, 0x00008053 }, /* GL_RGB12 */
-   { 36274, 0x00008053 }, /* GL_RGB12_EXT */
-   { 36287, 0x00008054 }, /* GL_RGB16 */
-   { 36296, 0x0000881B }, /* GL_RGB16F */
-   { 36306, 0x00008D89 }, /* GL_RGB16I */
-   { 36316, 0x00008D89 }, /* GL_RGB16I_EXT */
-   { 36330, 0x00008D77 }, /* GL_RGB16UI */
-   { 36341, 0x00008D77 }, /* GL_RGB16UI_EXT */
-   { 36356, 0x00008054 }, /* GL_RGB16_EXT */
-   { 36369, 0x00008F9A }, /* GL_RGB16_SNORM */
-   { 36384, 0x0000804E }, /* GL_RGB2_EXT */
-   { 36396, 0x00008815 }, /* GL_RGB32F */
-   { 36406, 0x00008D83 }, /* GL_RGB32I */
-   { 36416, 0x00008D83 }, /* GL_RGB32I_EXT */
-   { 36430, 0x00008D71 }, /* GL_RGB32UI */
-   { 36441, 0x00008D71 }, /* GL_RGB32UI_EXT */
-   { 36456, 0x0000804F }, /* GL_RGB4 */
-   { 36464, 0x0000804F }, /* GL_RGB4_EXT */
-   { 36476, 0x000083A1 }, /* GL_RGB4_S3TC */
-   { 36489, 0x00008050 }, /* GL_RGB5 */
-   { 36497, 0x00008D62 }, /* GL_RGB565 */
-   { 36507, 0x00008D62 }, /* GL_RGB565_OES */
-   { 36521, 0x00008057 }, /* GL_RGB5_A1 */
-   { 36532, 0x00008057 }, /* GL_RGB5_A1_EXT */
-   { 36547, 0x00008057 }, /* GL_RGB5_A1_OES */
-   { 36562, 0x00008050 }, /* GL_RGB5_EXT */
-   { 36574, 0x00008051 }, /* GL_RGB8 */
-   { 36582, 0x00008D8F }, /* GL_RGB8I */
-   { 36591, 0x00008D8F }, /* GL_RGB8I_EXT */
-   { 36604, 0x00008D7D }, /* GL_RGB8UI */
-   { 36614, 0x00008D7D }, /* GL_RGB8UI_EXT */
-   { 36628, 0x00008051 }, /* GL_RGB8_EXT */
-   { 36640, 0x00008051 }, /* GL_RGB8_OES */
-   { 36652, 0x00008F96 }, /* GL_RGB8_SNORM */
-   { 36666, 0x00008C3D }, /* GL_RGB9_E5 */
-   { 36677, 0x00001908 }, /* GL_RGBA */
-   { 36685, 0x0000805A }, /* GL_RGBA12 */
-   { 36695, 0x0000805A }, /* GL_RGBA12_EXT */
-   { 36709, 0x0000805B }, /* GL_RGBA16 */
-   { 36719, 0x0000881A }, /* GL_RGBA16F */
-   { 36730, 0x00008D88 }, /* GL_RGBA16I */
-   { 36741, 0x00008D88 }, /* GL_RGBA16I_EXT */
-   { 36756, 0x00008D76 }, /* GL_RGBA16UI */
-   { 36768, 0x00008D76 }, /* GL_RGBA16UI_EXT */
-   { 36784, 0x0000805B }, /* GL_RGBA16_EXT */
-   { 36798, 0x00008F9B }, /* GL_RGBA16_SNORM */
-   { 36814, 0x00008055 }, /* GL_RGBA2 */
-   { 36823, 0x00008055 }, /* GL_RGBA2_EXT */
-   { 36836, 0x00008814 }, /* GL_RGBA32F */
-   { 36847, 0x00008D82 }, /* GL_RGBA32I */
-   { 36858, 0x00008D82 }, /* GL_RGBA32I_EXT */
-   { 36873, 0x00008D70 }, /* GL_RGBA32UI */
-   { 36885, 0x00008D70 }, /* GL_RGBA32UI_EXT */
-   { 36901, 0x00008056 }, /* GL_RGBA4 */
-   { 36910, 0x000083A5 }, /* GL_RGBA4_DXT5_S3TC */
-   { 36929, 0x00008056 }, /* GL_RGBA4_EXT */
-   { 36942, 0x00008056 }, /* GL_RGBA4_OES */
-   { 36955, 0x000083A3 }, /* GL_RGBA4_S3TC */
-   { 36969, 0x00008058 }, /* GL_RGBA8 */
-   { 36978, 0x00008D8E }, /* GL_RGBA8I */
-   { 36988, 0x00008D8E }, /* GL_RGBA8I_EXT */
-   { 37002, 0x00008D7C }, /* GL_RGBA8UI */
-   { 37013, 0x00008D7C }, /* GL_RGBA8UI_EXT */
-   { 37028, 0x00008058 }, /* GL_RGBA8_EXT */
-   { 37041, 0x00008058 }, /* GL_RGBA8_OES */
-   { 37054, 0x00008F97 }, /* GL_RGBA8_SNORM */
-   { 37069, 0x000083A4 }, /* GL_RGBA_DXT5_S3TC */
-   { 37087, 0x00008D99 }, /* GL_RGBA_INTEGER */
-   { 37103, 0x00008D99 }, /* GL_RGBA_INTEGER_EXT */
-   { 37123, 0x00008D9E }, /* GL_RGBA_INTEGER_MODE_EXT */
-   { 37148, 0x00000C31 }, /* GL_RGBA_MODE */
-   { 37161, 0x000083A2 }, /* GL_RGBA_S3TC */
-   { 37174, 0x00008F93 }, /* GL_RGBA_SNORM */
-   { 37188, 0x00008D98 }, /* GL_RGB_INTEGER */
-   { 37203, 0x00008D98 }, /* GL_RGB_INTEGER_EXT */
-   { 37222, 0x000083A0 }, /* GL_RGB_S3TC */
-   { 37234, 0x00008573 }, /* GL_RGB_SCALE */
-   { 37247, 0x00008573 }, /* GL_RGB_SCALE_ARB */
-   { 37264, 0x00008573 }, /* GL_RGB_SCALE_EXT */
-   { 37281, 0x00008F92 }, /* GL_RGB_SNORM */
-   { 37294, 0x00008F91 }, /* GL_RG_SNORM */
-   { 37306, 0x00000407 }, /* GL_RIGHT */
-   { 37315, 0x00002000 }, /* GL_S */
-   { 37320, 0x00008B5D }, /* GL_SAMPLER_1D */
-   { 37334, 0x00008DC0 }, /* GL_SAMPLER_1D_ARRAY */
-   { 37354, 0x00008DC0 }, /* GL_SAMPLER_1D_ARRAY_EXT */
-   { 37378, 0x00008DC3 }, /* GL_SAMPLER_1D_ARRAY_SHADOW */
-   { 37405, 0x00008DC3 }, /* GL_SAMPLER_1D_ARRAY_SHADOW_EXT */
-   { 37436, 0x00008B61 }, /* GL_SAMPLER_1D_SHADOW */
-   { 37457, 0x00008B5E }, /* GL_SAMPLER_2D */
-   { 37471, 0x00008DC1 }, /* GL_SAMPLER_2D_ARRAY */
-   { 37491, 0x00008DC1 }, /* GL_SAMPLER_2D_ARRAY_EXT */
-   { 37515, 0x00008DC4 }, /* GL_SAMPLER_2D_ARRAY_SHADOW */
-   { 37542, 0x00008DC4 }, /* GL_SAMPLER_2D_ARRAY_SHADOW_EXT */
-   { 37573, 0x00008B63 }, /* GL_SAMPLER_2D_RECT */
-   { 37592, 0x00008B64 }, /* GL_SAMPLER_2D_RECT_SHADOW */
-   { 37618, 0x00008B62 }, /* GL_SAMPLER_2D_SHADOW */
-   { 37639, 0x00008B5F }, /* GL_SAMPLER_3D */
-   { 37653, 0x00008B5F }, /* GL_SAMPLER_3D_OES */
-   { 37671, 0x00008DC2 }, /* GL_SAMPLER_BUFFER */
-   { 37689, 0x00008DC2 }, /* GL_SAMPLER_BUFFER_EXT */
-   { 37711, 0x00008B60 }, /* GL_SAMPLER_CUBE */
-   { 37727, 0x00008DC5 }, /* GL_SAMPLER_CUBE_SHADOW */
-   { 37750, 0x00008DC5 }, /* GL_SAMPLER_CUBE_SHADOW_EXT */
-   { 37777, 0x000080A9 }, /* GL_SAMPLES */
-   { 37788, 0x000086B4 }, /* GL_SAMPLES_3DFX */
-   { 37804, 0x000080A9 }, /* GL_SAMPLES_ARB */
-   { 37819, 0x00008914 }, /* GL_SAMPLES_PASSED */
-   { 37837, 0x00008914 }, /* GL_SAMPLES_PASSED_ARB */
-   { 37859, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE */
-   { 37887, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE_ARB */
-   { 37919, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE */
-   { 37942, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE_ARB */
-   { 37969, 0x000080A8 }, /* GL_SAMPLE_BUFFERS */
-   { 37987, 0x000086B3 }, /* GL_SAMPLE_BUFFERS_3DFX */
-   { 38010, 0x000080A8 }, /* GL_SAMPLE_BUFFERS_ARB */
-   { 38032, 0x000080A0 }, /* GL_SAMPLE_COVERAGE */
-   { 38051, 0x000080A0 }, /* GL_SAMPLE_COVERAGE_ARB */
-   { 38074, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT */
-   { 38100, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT_ARB */
-   { 38130, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE */
-   { 38155, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE_ARB */
-   { 38184, 0x00080000 }, /* GL_SCISSOR_BIT */
-   { 38199, 0x00000C10 }, /* GL_SCISSOR_BOX */
-   { 38214, 0x00000C11 }, /* GL_SCISSOR_TEST */
-   { 38230, 0x0000845E }, /* GL_SECONDARY_COLOR_ARRAY */
-   { 38255, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */
-   { 38295, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB */
-   { 38339, 0x0000845D }, /* GL_SECONDARY_COLOR_ARRAY_POINTER */
-   { 38372, 0x0000845A }, /* GL_SECONDARY_COLOR_ARRAY_SIZE */
-   { 38402, 0x0000845C }, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */
-   { 38434, 0x0000845B }, /* GL_SECONDARY_COLOR_ARRAY_TYPE */
-   { 38464, 0x00001C02 }, /* GL_SELECT */
-   { 38474, 0x00000DF3 }, /* GL_SELECTION_BUFFER_POINTER */
-   { 38502, 0x00000DF4 }, /* GL_SELECTION_BUFFER_SIZE */
-   { 38527, 0x00008012 }, /* GL_SEPARABLE_2D */
-   { 38543, 0x00008C8D }, /* GL_SEPARATE_ATTRIBS */
-   { 38563, 0x00008C8D }, /* GL_SEPARATE_ATTRIBS_EXT */
-   { 38587, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR */
-   { 38614, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR_EXT */
-   { 38645, 0x0000150F }, /* GL_SET */
-   { 38652, 0x00008DF8 }, /* GL_SHADER_BINARY_FORMATS */
-   { 38677, 0x00008DFA }, /* GL_SHADER_COMPILER */
-   { 38696, 0x00008B48 }, /* GL_SHADER_OBJECT_ARB */
-   { 38717, 0x00008B88 }, /* GL_SHADER_SOURCE_LENGTH */
-   { 38741, 0x00008B4F }, /* GL_SHADER_TYPE */
-   { 38756, 0x00000B54 }, /* GL_SHADE_MODEL */
-   { 38771, 0x00008B8C }, /* GL_SHADING_LANGUAGE_VERSION */
-   { 38799, 0x000080BF }, /* GL_SHADOW_AMBIENT_SGIX */
-   { 38822, 0x000081FB }, /* GL_SHARED_TEXTURE_PALETTE_EXT */
-   { 38852, 0x00001601 }, /* GL_SHININESS */
-   { 38865, 0x00001402 }, /* GL_SHORT */
-   { 38874, 0x00009119 }, /* GL_SIGNALED */
-   { 38886, 0x00008F9C }, /* GL_SIGNED_NORMALIZED */
-   { 38907, 0x000081F9 }, /* GL_SINGLE_COLOR */
-   { 38923, 0x000081F9 }, /* GL_SINGLE_COLOR_EXT */
-   { 38943, 0x000085CC }, /* GL_SLICE_ACCUM_SUN */
-   { 38962, 0x00008C46 }, /* GL_SLUMINANCE */
-   { 38976, 0x00008C47 }, /* GL_SLUMINANCE8 */
-   { 38991, 0x00008C45 }, /* GL_SLUMINANCE8_ALPHA8 */
-   { 39013, 0x00008C44 }, /* GL_SLUMINANCE_ALPHA */
-   { 39033, 0x00001D01 }, /* GL_SMOOTH */
-   { 39043, 0x00000B23 }, /* GL_SMOOTH_LINE_WIDTH_GRANULARITY */
-   { 39076, 0x00000B22 }, /* GL_SMOOTH_LINE_WIDTH_RANGE */
-   { 39103, 0x00000B13 }, /* GL_SMOOTH_POINT_SIZE_GRANULARITY */
-   { 39136, 0x00000B12 }, /* GL_SMOOTH_POINT_SIZE_RANGE */
-   { 39163, 0x00008588 }, /* GL_SOURCE0_ALPHA */
-   { 39180, 0x00008588 }, /* GL_SOURCE0_ALPHA_ARB */
-   { 39201, 0x00008588 }, /* GL_SOURCE0_ALPHA_EXT */
-   { 39222, 0x00008580 }, /* GL_SOURCE0_RGB */
-   { 39237, 0x00008580 }, /* GL_SOURCE0_RGB_ARB */
-   { 39256, 0x00008580 }, /* GL_SOURCE0_RGB_EXT */
-   { 39275, 0x00008589 }, /* GL_SOURCE1_ALPHA */
-   { 39292, 0x00008589 }, /* GL_SOURCE1_ALPHA_ARB */
-   { 39313, 0x00008589 }, /* GL_SOURCE1_ALPHA_EXT */
-   { 39334, 0x00008581 }, /* GL_SOURCE1_RGB */
-   { 39349, 0x00008581 }, /* GL_SOURCE1_RGB_ARB */
-   { 39368, 0x00008581 }, /* GL_SOURCE1_RGB_EXT */
-   { 39387, 0x0000858A }, /* GL_SOURCE2_ALPHA */
-   { 39404, 0x0000858A }, /* GL_SOURCE2_ALPHA_ARB */
-   { 39425, 0x0000858A }, /* GL_SOURCE2_ALPHA_EXT */
-   { 39446, 0x00008582 }, /* GL_SOURCE2_RGB */
-   { 39461, 0x00008582 }, /* GL_SOURCE2_RGB_ARB */
-   { 39480, 0x00008582 }, /* GL_SOURCE2_RGB_EXT */
-   { 39499, 0x0000858B }, /* GL_SOURCE3_ALPHA_NV */
-   { 39519, 0x00008583 }, /* GL_SOURCE3_RGB_NV */
-   { 39537, 0x00001202 }, /* GL_SPECULAR */
-   { 39549, 0x00002402 }, /* GL_SPHERE_MAP */
-   { 39563, 0x00001206 }, /* GL_SPOT_CUTOFF */
-   { 39578, 0x00001204 }, /* GL_SPOT_DIRECTION */
-   { 39596, 0x00001205 }, /* GL_SPOT_EXPONENT */
-   { 39613, 0x00008588 }, /* GL_SRC0_ALPHA */
-   { 39627, 0x00008580 }, /* GL_SRC0_RGB */
-   { 39639, 0x00008589 }, /* GL_SRC1_ALPHA */
-   { 39653, 0x00008581 }, /* GL_SRC1_RGB */
-   { 39665, 0x0000858A }, /* GL_SRC2_ALPHA */
-   { 39679, 0x00008582 }, /* GL_SRC2_RGB */
-   { 39691, 0x00000302 }, /* GL_SRC_ALPHA */
-   { 39704, 0x00000308 }, /* GL_SRC_ALPHA_SATURATE */
-   { 39726, 0x00000300 }, /* GL_SRC_COLOR */
-   { 39739, 0x00008C40 }, /* GL_SRGB */
-   { 39747, 0x00008C41 }, /* GL_SRGB8 */
-   { 39756, 0x00008C43 }, /* GL_SRGB8_ALPHA8 */
-   { 39772, 0x00008C42 }, /* GL_SRGB_ALPHA */
-   { 39786, 0x00000503 }, /* GL_STACK_OVERFLOW */
-   { 39804, 0x00000504 }, /* GL_STACK_UNDERFLOW */
-   { 39823, 0x000088E6 }, /* GL_STATIC_COPY */
-   { 39838, 0x000088E6 }, /* GL_STATIC_COPY_ARB */
-   { 39857, 0x000088E4 }, /* GL_STATIC_DRAW */
-   { 39872, 0x000088E4 }, /* GL_STATIC_DRAW_ARB */
-   { 39891, 0x000088E5 }, /* GL_STATIC_READ */
-   { 39906, 0x000088E5 }, /* GL_STATIC_READ_ARB */
-   { 39925, 0x00001802 }, /* GL_STENCIL */
-   { 39936, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT */
-   { 39958, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT_EXT */
-   { 39984, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT_OES */
-   { 40010, 0x00008801 }, /* GL_STENCIL_BACK_FAIL */
-   { 40031, 0x00008801 }, /* GL_STENCIL_BACK_FAIL_ATI */
-   { 40056, 0x00008800 }, /* GL_STENCIL_BACK_FUNC */
-   { 40077, 0x00008800 }, /* GL_STENCIL_BACK_FUNC_ATI */
-   { 40102, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */
-   { 40134, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI */
-   { 40170, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */
-   { 40202, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI */
-   { 40238, 0x00008CA3 }, /* GL_STENCIL_BACK_REF */
-   { 40258, 0x00008CA4 }, /* GL_STENCIL_BACK_VALUE_MASK */
-   { 40285, 0x00008CA5 }, /* GL_STENCIL_BACK_WRITEMASK */
-   { 40311, 0x00000D57 }, /* GL_STENCIL_BITS */
-   { 40327, 0x00008224 }, /* GL_STENCIL_BUFFER */
-   { 40345, 0x00000400 }, /* GL_STENCIL_BUFFER_BIT */
-   { 40367, 0x00000B91 }, /* GL_STENCIL_CLEAR_VALUE */
-   { 40390, 0x00000B94 }, /* GL_STENCIL_FAIL */
-   { 40406, 0x00000B92 }, /* GL_STENCIL_FUNC */
-   { 40422, 0x00001901 }, /* GL_STENCIL_INDEX */
-   { 40439, 0x00008D46 }, /* GL_STENCIL_INDEX1 */
-   { 40457, 0x00008D49 }, /* GL_STENCIL_INDEX16 */
-   { 40476, 0x00008D49 }, /* GL_STENCIL_INDEX16_EXT */
-   { 40499, 0x00008D46 }, /* GL_STENCIL_INDEX1_EXT */
-   { 40521, 0x00008D46 }, /* GL_STENCIL_INDEX1_OES */
-   { 40543, 0x00008D47 }, /* GL_STENCIL_INDEX4 */
-   { 40561, 0x00008D47 }, /* GL_STENCIL_INDEX4_EXT */
-   { 40583, 0x00008D47 }, /* GL_STENCIL_INDEX4_OES */
-   { 40605, 0x00008D48 }, /* GL_STENCIL_INDEX8 */
-   { 40623, 0x00008D48 }, /* GL_STENCIL_INDEX8_EXT */
-   { 40645, 0x00008D48 }, /* GL_STENCIL_INDEX8_OES */
-   { 40667, 0x00008D45 }, /* GL_STENCIL_INDEX_EXT */
-   { 40688, 0x00000B95 }, /* GL_STENCIL_PASS_DEPTH_FAIL */
-   { 40715, 0x00000B96 }, /* GL_STENCIL_PASS_DEPTH_PASS */
-   { 40742, 0x00000B97 }, /* GL_STENCIL_REF */
-   { 40757, 0x00000B90 }, /* GL_STENCIL_TEST */
-   { 40773, 0x00008910 }, /* GL_STENCIL_TEST_TWO_SIDE_EXT */
-   { 40802, 0x00000B93 }, /* GL_STENCIL_VALUE_MASK */
-   { 40824, 0x00000B98 }, /* GL_STENCIL_WRITEMASK */
-   { 40845, 0x00000C33 }, /* GL_STEREO */
-   { 40855, 0x000085BE }, /* GL_STORAGE_CACHED_APPLE */
-   { 40879, 0x000085BD }, /* GL_STORAGE_PRIVATE_APPLE */
-   { 40904, 0x000085BF }, /* GL_STORAGE_SHARED_APPLE */
-   { 40928, 0x000088E2 }, /* GL_STREAM_COPY */
-   { 40943, 0x000088E2 }, /* GL_STREAM_COPY_ARB */
-   { 40962, 0x000088E0 }, /* GL_STREAM_DRAW */
-   { 40977, 0x000088E0 }, /* GL_STREAM_DRAW_ARB */
-   { 40996, 0x000088E1 }, /* GL_STREAM_READ */
-   { 41011, 0x000088E1 }, /* GL_STREAM_READ_ARB */
-   { 41030, 0x00000D50 }, /* GL_SUBPIXEL_BITS */
-   { 41047, 0x000084E7 }, /* GL_SUBTRACT */
-   { 41059, 0x000084E7 }, /* GL_SUBTRACT_ARB */
-   { 41075, 0x00009113 }, /* GL_SYNC_CONDITION */
-   { 41093, 0x00009116 }, /* GL_SYNC_FENCE */
-   { 41107, 0x00009115 }, /* GL_SYNC_FLAGS */
-   { 41121, 0x00000001 }, /* GL_SYNC_FLUSH_COMMANDS_BIT */
-   { 41148, 0x00009117 }, /* GL_SYNC_GPU_COMMANDS_COMPLETE */
-   { 41178, 0x00009114 }, /* GL_SYNC_STATUS */
-   { 41193, 0x00002001 }, /* GL_T */
-   { 41198, 0x00002A2A }, /* GL_T2F_C3F_V3F */
-   { 41213, 0x00002A2C }, /* GL_T2F_C4F_N3F_V3F */
-   { 41232, 0x00002A29 }, /* GL_T2F_C4UB_V3F */
-   { 41248, 0x00002A2B }, /* GL_T2F_N3F_V3F */
-   { 41263, 0x00002A27 }, /* GL_T2F_V3F */
-   { 41274, 0x00002A2D }, /* GL_T4F_C4F_N3F_V4F */
-   { 41293, 0x00002A28 }, /* GL_T4F_V4F */
-   { 41304, 0x00008031 }, /* GL_TABLE_TOO_LARGE_EXT */
-   { 41327, 0x00001702 }, /* GL_TEXTURE */
-   { 41338, 0x000084C0 }, /* GL_TEXTURE0 */
-   { 41350, 0x000084C0 }, /* GL_TEXTURE0_ARB */
-   { 41366, 0x000084C1 }, /* GL_TEXTURE1 */
-   { 41378, 0x000084CA }, /* GL_TEXTURE10 */
-   { 41391, 0x000084CA }, /* GL_TEXTURE10_ARB */
-   { 41408, 0x000084CB }, /* GL_TEXTURE11 */
-   { 41421, 0x000084CB }, /* GL_TEXTURE11_ARB */
-   { 41438, 0x000084CC }, /* GL_TEXTURE12 */
-   { 41451, 0x000084CC }, /* GL_TEXTURE12_ARB */
-   { 41468, 0x000084CD }, /* GL_TEXTURE13 */
-   { 41481, 0x000084CD }, /* GL_TEXTURE13_ARB */
-   { 41498, 0x000084CE }, /* GL_TEXTURE14 */
-   { 41511, 0x000084CE }, /* GL_TEXTURE14_ARB */
-   { 41528, 0x000084CF }, /* GL_TEXTURE15 */
-   { 41541, 0x000084CF }, /* GL_TEXTURE15_ARB */
-   { 41558, 0x000084D0 }, /* GL_TEXTURE16 */
-   { 41571, 0x000084D0 }, /* GL_TEXTURE16_ARB */
-   { 41588, 0x000084D1 }, /* GL_TEXTURE17 */
-   { 41601, 0x000084D1 }, /* GL_TEXTURE17_ARB */
-   { 41618, 0x000084D2 }, /* GL_TEXTURE18 */
-   { 41631, 0x000084D2 }, /* GL_TEXTURE18_ARB */
-   { 41648, 0x000084D3 }, /* GL_TEXTURE19 */
-   { 41661, 0x000084D3 }, /* GL_TEXTURE19_ARB */
-   { 41678, 0x000084C1 }, /* GL_TEXTURE1_ARB */
-   { 41694, 0x000084C2 }, /* GL_TEXTURE2 */
-   { 41706, 0x000084D4 }, /* GL_TEXTURE20 */
-   { 41719, 0x000084D4 }, /* GL_TEXTURE20_ARB */
-   { 41736, 0x000084D5 }, /* GL_TEXTURE21 */
-   { 41749, 0x000084D5 }, /* GL_TEXTURE21_ARB */
-   { 41766, 0x000084D6 }, /* GL_TEXTURE22 */
-   { 41779, 0x000084D6 }, /* GL_TEXTURE22_ARB */
-   { 41796, 0x000084D7 }, /* GL_TEXTURE23 */
-   { 41809, 0x000084D7 }, /* GL_TEXTURE23_ARB */
-   { 41826, 0x000084D8 }, /* GL_TEXTURE24 */
-   { 41839, 0x000084D8 }, /* GL_TEXTURE24_ARB */
-   { 41856, 0x000084D9 }, /* GL_TEXTURE25 */
-   { 41869, 0x000084D9 }, /* GL_TEXTURE25_ARB */
-   { 41886, 0x000084DA }, /* GL_TEXTURE26 */
-   { 41899, 0x000084DA }, /* GL_TEXTURE26_ARB */
-   { 41916, 0x000084DB }, /* GL_TEXTURE27 */
-   { 41929, 0x000084DB }, /* GL_TEXTURE27_ARB */
-   { 41946, 0x000084DC }, /* GL_TEXTURE28 */
-   { 41959, 0x000084DC }, /* GL_TEXTURE28_ARB */
-   { 41976, 0x000084DD }, /* GL_TEXTURE29 */
-   { 41989, 0x000084DD }, /* GL_TEXTURE29_ARB */
-   { 42006, 0x000084C2 }, /* GL_TEXTURE2_ARB */
-   { 42022, 0x000084C3 }, /* GL_TEXTURE3 */
-   { 42034, 0x000084DE }, /* GL_TEXTURE30 */
-   { 42047, 0x000084DE }, /* GL_TEXTURE30_ARB */
-   { 42064, 0x000084DF }, /* GL_TEXTURE31 */
-   { 42077, 0x000084DF }, /* GL_TEXTURE31_ARB */
-   { 42094, 0x000084C3 }, /* GL_TEXTURE3_ARB */
-   { 42110, 0x000084C4 }, /* GL_TEXTURE4 */
-   { 42122, 0x000084C4 }, /* GL_TEXTURE4_ARB */
-   { 42138, 0x000084C5 }, /* GL_TEXTURE5 */
-   { 42150, 0x000084C5 }, /* GL_TEXTURE5_ARB */
-   { 42166, 0x000084C6 }, /* GL_TEXTURE6 */
-   { 42178, 0x000084C6 }, /* GL_TEXTURE6_ARB */
-   { 42194, 0x000084C7 }, /* GL_TEXTURE7 */
-   { 42206, 0x000084C7 }, /* GL_TEXTURE7_ARB */
-   { 42222, 0x000084C8 }, /* GL_TEXTURE8 */
-   { 42234, 0x000084C8 }, /* GL_TEXTURE8_ARB */
-   { 42250, 0x000084C9 }, /* GL_TEXTURE9 */
-   { 42262, 0x000084C9 }, /* GL_TEXTURE9_ARB */
-   { 42278, 0x00000DE0 }, /* GL_TEXTURE_1D */
-   { 42292, 0x00008C18 }, /* GL_TEXTURE_1D_ARRAY */
-   { 42312, 0x00008C18 }, /* GL_TEXTURE_1D_ARRAY_EXT */
-   { 42336, 0x00000DE1 }, /* GL_TEXTURE_2D */
-   { 42350, 0x00008C1A }, /* GL_TEXTURE_2D_ARRAY */
-   { 42370, 0x00008C1A }, /* GL_TEXTURE_2D_ARRAY_EXT */
-   { 42394, 0x0000806F }, /* GL_TEXTURE_3D */
-   { 42408, 0x0000806F }, /* GL_TEXTURE_3D_OES */
-   { 42426, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE */
-   { 42448, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE_EXT */
-   { 42474, 0x0000813C }, /* GL_TEXTURE_BASE_LEVEL */
-   { 42496, 0x00008068 }, /* GL_TEXTURE_BINDING_1D */
-   { 42518, 0x00008C1C }, /* GL_TEXTURE_BINDING_1D_ARRAY */
-   { 42546, 0x00008C1C }, /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */
-   { 42578, 0x00008069 }, /* GL_TEXTURE_BINDING_2D */
-   { 42600, 0x00008C1D }, /* GL_TEXTURE_BINDING_2D_ARRAY */
-   { 42628, 0x00008C1D }, /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */
-   { 42660, 0x0000806A }, /* GL_TEXTURE_BINDING_3D */
-   { 42682, 0x0000806A }, /* GL_TEXTURE_BINDING_3D_OES */
-   { 42708, 0x00008C2C }, /* GL_TEXTURE_BINDING_BUFFER */
-   { 42734, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP */
-   { 42762, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP_ARB */
-   { 42794, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP_OES */
-   { 42826, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE */
-   { 42855, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */
-   { 42888, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_NV */
-   { 42920, 0x00040000 }, /* GL_TEXTURE_BIT */
-   { 42935, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE */
-   { 42956, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE_EXT */
-   { 42981, 0x00001005 }, /* GL_TEXTURE_BORDER */
-   { 42999, 0x00001004 }, /* GL_TEXTURE_BORDER_COLOR */
-   { 43023, 0x00008C2A }, /* GL_TEXTURE_BUFFER */
-   { 43041, 0x00008C2D }, /* GL_TEXTURE_BUFFER_DATA_STORE_BINDING */
-   { 43078, 0x00008C2E }, /* GL_TEXTURE_BUFFER_FORMAT */
-   { 43103, 0x00008171 }, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */
-   { 43134, 0x00008176 }, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */
-   { 43164, 0x00008172 }, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */
-   { 43194, 0x00008175 }, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */
-   { 43229, 0x00008173 }, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */
-   { 43260, 0x00008174 }, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */
-   { 43298, 0x000080BC }, /* GL_TEXTURE_COLOR_TABLE_SGI */
-   { 43325, 0x000081EF }, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */
-   { 43357, 0x000080BF }, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */
-   { 43391, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC */
-   { 43415, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC_ARB */
-   { 43443, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE */
-   { 43467, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE_ARB */
-   { 43495, 0x0000819B }, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */
-   { 43528, 0x0000819A }, /* GL_TEXTURE_COMPARE_SGIX */
-   { 43552, 0x00001003 }, /* GL_TEXTURE_COMPONENTS */
-   { 43574, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED */
-   { 43596, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED_ARB */
-   { 43622, 0x000086A3 }, /* GL_TEXTURE_COMPRESSED_FORMATS_ARB */
-   { 43656, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */
-   { 43689, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB */
-   { 43726, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT */
-   { 43754, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT_ARB */
-   { 43786, 0x00008078 }, /* GL_TEXTURE_COORD_ARRAY */
-   { 43809, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */
-   { 43847, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB */
-   { 43889, 0x00008092 }, /* GL_TEXTURE_COORD_ARRAY_POINTER */
-   { 43920, 0x00008088 }, /* GL_TEXTURE_COORD_ARRAY_SIZE */
-   { 43948, 0x0000808A }, /* GL_TEXTURE_COORD_ARRAY_STRIDE */
-   { 43978, 0x00008089 }, /* GL_TEXTURE_COORD_ARRAY_TYPE */
-   { 44006, 0x00008B9D }, /* GL_TEXTURE_CROP_RECT_OES */
-   { 44031, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP */
-   { 44051, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP_ARB */
-   { 44075, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */
-   { 44106, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB */
-   { 44141, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES */
-   { 44176, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */
-   { 44207, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB */
-   { 44242, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES */
-   { 44277, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */
-   { 44308, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB */
-   { 44343, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES */
-   { 44378, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP_OES */
-   { 44402, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */
-   { 44433, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB */
-   { 44468, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES */
-   { 44503, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */
-   { 44534, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB */
-   { 44569, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES */
-   { 44604, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */
-   { 44635, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB */
-   { 44670, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES */
-   { 44705, 0x000088F4 }, /* GL_TEXTURE_CUBE_MAP_SEAMLESS */
-   { 44734, 0x00008071 }, /* GL_TEXTURE_DEPTH */
-   { 44751, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE */
-   { 44773, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE_ARB */
-   { 44799, 0x00002300 }, /* GL_TEXTURE_ENV */
-   { 44814, 0x00002201 }, /* GL_TEXTURE_ENV_COLOR */
-   { 44835, 0x00002200 }, /* GL_TEXTURE_ENV_MODE */
-   { 44855, 0x00008500 }, /* GL_TEXTURE_FILTER_CONTROL */
-   { 44881, 0x00008500 }, /* GL_TEXTURE_FILTER_CONTROL_EXT */
-   { 44911, 0x00002500 }, /* GL_TEXTURE_GEN_MODE */
-   { 44931, 0x00002500 }, /* GL_TEXTURE_GEN_MODE_OES */
-   { 44955, 0x00000C63 }, /* GL_TEXTURE_GEN_Q */
-   { 44972, 0x00000C62 }, /* GL_TEXTURE_GEN_R */
-   { 44989, 0x00000C60 }, /* GL_TEXTURE_GEN_S */
-   { 45006, 0x00008D60 }, /* GL_TEXTURE_GEN_STR_OES */
-   { 45029, 0x00000C61 }, /* GL_TEXTURE_GEN_T */
-   { 45046, 0x0000819D }, /* GL_TEXTURE_GEQUAL_R_SGIX */
-   { 45071, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE */
-   { 45093, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE_EXT */
-   { 45119, 0x00001001 }, /* GL_TEXTURE_HEIGHT */
-   { 45137, 0x000080ED }, /* GL_TEXTURE_INDEX_SIZE_EXT */
-   { 45163, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE */
-   { 45189, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE_EXT */
-   { 45219, 0x00001003 }, /* GL_TEXTURE_INTERNAL_FORMAT */
-   { 45246, 0x0000819C }, /* GL_TEXTURE_LEQUAL_R_SGIX */
-   { 45271, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS */
-   { 45291, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS_EXT */
-   { 45315, 0x00008190 }, /* GL_TEXTURE_LOD_BIAS_R_SGIX */
-   { 45342, 0x0000818E }, /* GL_TEXTURE_LOD_BIAS_S_SGIX */
-   { 45369, 0x0000818F }, /* GL_TEXTURE_LOD_BIAS_T_SGIX */
-   { 45396, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE */
-   { 45422, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE_EXT */
-   { 45452, 0x00002800 }, /* GL_TEXTURE_MAG_FILTER */
-   { 45474, 0x00000BA8 }, /* GL_TEXTURE_MATRIX */
-   { 45492, 0x0000898F }, /* GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES */
-   { 45532, 0x000084FE }, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */
-   { 45562, 0x0000836B }, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */
-   { 45590, 0x00008369 }, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */
-   { 45618, 0x0000836A }, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */
-   { 45646, 0x0000813D }, /* GL_TEXTURE_MAX_LEVEL */
-   { 45667, 0x0000813B }, /* GL_TEXTURE_MAX_LOD */
-   { 45686, 0x00002801 }, /* GL_TEXTURE_MIN_FILTER */
-   { 45708, 0x0000813A }, /* GL_TEXTURE_MIN_LOD */
-   { 45727, 0x00008066 }, /* GL_TEXTURE_PRIORITY */
-   { 45747, 0x000085B7 }, /* GL_TEXTURE_RANGE_LENGTH_APPLE */
-   { 45777, 0x000085B8 }, /* GL_TEXTURE_RANGE_POINTER_APPLE */
-   { 45808, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE */
-   { 45829, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_ARB */
-   { 45854, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_NV */
-   { 45878, 0x0000805C }, /* GL_TEXTURE_RED_SIZE */
-   { 45898, 0x0000805C }, /* GL_TEXTURE_RED_SIZE_EXT */
-   { 45922, 0x00008067 }, /* GL_TEXTURE_RESIDENT */
-   { 45942, 0x00008C3F }, /* GL_TEXTURE_SHARED_SIZE */
-   { 45965, 0x00000BA5 }, /* GL_TEXTURE_STACK_DEPTH */
-   { 45988, 0x000088F1 }, /* GL_TEXTURE_STENCIL_SIZE */
-   { 46012, 0x000088F1 }, /* GL_TEXTURE_STENCIL_SIZE_EXT */
-   { 46040, 0x000085BC }, /* GL_TEXTURE_STORAGE_HINT_APPLE */
-   { 46070, 0x00008065 }, /* GL_TEXTURE_TOO_LARGE_EXT */
-   { 46095, 0x0000888F }, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */
-   { 46129, 0x00001000 }, /* GL_TEXTURE_WIDTH */
-   { 46146, 0x00008072 }, /* GL_TEXTURE_WRAP_R */
-   { 46164, 0x00008072 }, /* GL_TEXTURE_WRAP_R_OES */
-   { 46186, 0x00002802 }, /* GL_TEXTURE_WRAP_S */
-   { 46204, 0x00002803 }, /* GL_TEXTURE_WRAP_T */
-   { 46222, 0x0000911B }, /* GL_TIMEOUT_EXPIRED */
-   { 46241, 0x000088BF }, /* GL_TIME_ELAPSED_EXT */
-   { 46261, 0x00008648 }, /* GL_TRACK_MATRIX_NV */
-   { 46280, 0x00008649 }, /* GL_TRACK_MATRIX_TRANSFORM_NV */
-   { 46309, 0x00001000 }, /* GL_TRANSFORM_BIT */
-   { 46326, 0x00008E22 }, /* GL_TRANSFORM_FEEDBACK */
-   { 46348, 0x00008E25 }, /* GL_TRANSFORM_FEEDBACK_BINDING */
-   { 46378, 0x00008C8E }, /* GL_TRANSFORM_FEEDBACK_BUFFER */
-   { 46407, 0x00008E24 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */
-   { 46443, 0x00008C8F }, /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING */
-   { 46480, 0x00008C8F }, /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT */
-   { 46521, 0x00008C8E }, /* GL_TRANSFORM_FEEDBACK_BUFFER_EXT */
-   { 46554, 0x00008C7F }, /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE */
-   { 46588, 0x00008C7F }, /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT */
-   { 46626, 0x00008E23 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */
-   { 46662, 0x00008C85 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE */
-   { 46696, 0x00008C85 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT */
-   { 46734, 0x00008C84 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_START */
-   { 46769, 0x00008C84 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT */
-   { 46808, 0x00008C88 }, /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN */
-   { 46849, 0x00008C88 }, /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT */
-   { 46894, 0x00008C83 }, /* GL_TRANSFORM_FEEDBACK_VARYINGS */
-   { 46925, 0x00008C83 }, /* GL_TRANSFORM_FEEDBACK_VARYINGS_EXT */
-   { 46960, 0x00008C76 }, /* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH */
-   { 47001, 0x00008C76 }, /* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT */
-   { 47046, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX */
-   { 47072, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX_ARB */
-   { 47102, 0x000088B7 }, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */
-   { 47134, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX */
-   { 47164, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX_ARB */
-   { 47198, 0x0000862C }, /* GL_TRANSPOSE_NV */
-   { 47214, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX */
-   { 47245, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX_ARB */
-   { 47280, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX */
-   { 47308, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX_ARB */
-   { 47340, 0x00000004 }, /* GL_TRIANGLES */
-   { 47353, 0x0000000C }, /* GL_TRIANGLES_ADJACENCY */
-   { 47376, 0x0000000C }, /* GL_TRIANGLES_ADJACENCY_ARB */
-   { 47403, 0x00000006 }, /* GL_TRIANGLE_FAN */
-   { 47419, 0x00008615 }, /* GL_TRIANGLE_MESH_SUN */
-   { 47440, 0x00000005 }, /* GL_TRIANGLE_STRIP */
-   { 47458, 0x0000000D }, /* GL_TRIANGLE_STRIP_ADJACENCY */
-   { 47486, 0x0000000D }, /* GL_TRIANGLE_STRIP_ADJACENCY_ARB */
-   { 47518, 0x00000001 }, /* GL_TRUE */
-   { 47526, 0x00008A1C }, /* GL_UNDEFINED_APPLE */
-   { 47545, 0x00000CF5 }, /* GL_UNPACK_ALIGNMENT */
-   { 47565, 0x0000806E }, /* GL_UNPACK_IMAGE_HEIGHT */
-   { 47588, 0x00000CF1 }, /* GL_UNPACK_LSB_FIRST */
-   { 47608, 0x00000CF2 }, /* GL_UNPACK_ROW_LENGTH */
-   { 47629, 0x0000806D }, /* GL_UNPACK_SKIP_IMAGES */
-   { 47651, 0x00000CF4 }, /* GL_UNPACK_SKIP_PIXELS */
-   { 47673, 0x00000CF3 }, /* GL_UNPACK_SKIP_ROWS */
-   { 47693, 0x00000CF0 }, /* GL_UNPACK_SWAP_BYTES */
-   { 47714, 0x00009118 }, /* GL_UNSIGNALED */
-   { 47728, 0x00001401 }, /* GL_UNSIGNED_BYTE */
-   { 47745, 0x00008362 }, /* GL_UNSIGNED_BYTE_2_3_3_REV */
-   { 47772, 0x00008032 }, /* GL_UNSIGNED_BYTE_3_3_2 */
-   { 47795, 0x00001405 }, /* GL_UNSIGNED_INT */
-   { 47811, 0x00008C3B }, /* GL_UNSIGNED_INT_10F_11F_11F_REV */
-   { 47843, 0x00008036 }, /* GL_UNSIGNED_INT_10_10_10_2 */
-   { 47870, 0x00008DF6 }, /* GL_UNSIGNED_INT_10_10_10_2_OES */
-   { 47901, 0x000084FA }, /* GL_UNSIGNED_INT_24_8 */
-   { 47922, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_EXT */
-   { 47947, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_NV */
-   { 47971, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_OES */
-   { 47996, 0x00008368 }, /* GL_UNSIGNED_INT_2_10_10_10_REV */
-   { 48027, 0x00008368 }, /* GL_UNSIGNED_INT_2_10_10_10_REV_EXT */
-   { 48062, 0x00008C3E }, /* GL_UNSIGNED_INT_5_9_9_9_REV */
-   { 48090, 0x00008035 }, /* GL_UNSIGNED_INT_8_8_8_8 */
-   { 48114, 0x00008367 }, /* GL_UNSIGNED_INT_8_8_8_8_REV */
-   { 48142, 0x00008DD1 }, /* GL_UNSIGNED_INT_SAMPLER_1D */
-   { 48169, 0x00008DD6 }, /* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY */
-   { 48202, 0x00008DD6 }, /* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT */
-   { 48239, 0x00008DD1 }, /* GL_UNSIGNED_INT_SAMPLER_1D_EXT */
-   { 48270, 0x00008DD2 }, /* GL_UNSIGNED_INT_SAMPLER_2D */
-   { 48297, 0x00008DD7 }, /* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY */
-   { 48330, 0x00008DD7 }, /* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT */
-   { 48367, 0x00008DD2 }, /* GL_UNSIGNED_INT_SAMPLER_2D_EXT */
-   { 48398, 0x00008DD5 }, /* GL_UNSIGNED_INT_SAMPLER_2D_RECT */
-   { 48430, 0x00008DD5 }, /* GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT */
-   { 48466, 0x00008DD3 }, /* GL_UNSIGNED_INT_SAMPLER_3D */
-   { 48493, 0x00008DD3 }, /* GL_UNSIGNED_INT_SAMPLER_3D_EXT */
-   { 48524, 0x00008DD8 }, /* GL_UNSIGNED_INT_SAMPLER_BUFFER */
-   { 48555, 0x00008DD8 }, /* GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT */
-   { 48590, 0x00008DD4 }, /* GL_UNSIGNED_INT_SAMPLER_CUBE */
-   { 48619, 0x00008DD4 }, /* GL_UNSIGNED_INT_SAMPLER_CUBE_EXT */
-   { 48652, 0x00008DC6 }, /* GL_UNSIGNED_INT_VEC2 */
-   { 48673, 0x00008DC6 }, /* GL_UNSIGNED_INT_VEC2_EXT */
-   { 48698, 0x00008DC7 }, /* GL_UNSIGNED_INT_VEC3 */
-   { 48719, 0x00008DC7 }, /* GL_UNSIGNED_INT_VEC3_EXT */
-   { 48744, 0x00008DC8 }, /* GL_UNSIGNED_INT_VEC4 */
-   { 48765, 0x00008DC8 }, /* GL_UNSIGNED_INT_VEC4_EXT */
-   { 48790, 0x00008C17 }, /* GL_UNSIGNED_NORMALIZED */
-   { 48813, 0x00001403 }, /* GL_UNSIGNED_SHORT */
-   { 48831, 0x00008366 }, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */
-   { 48861, 0x00008366 }, /* GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT */
-   { 48895, 0x00008033 }, /* GL_UNSIGNED_SHORT_4_4_4_4 */
-   { 48921, 0x00008365 }, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */
-   { 48951, 0x00008365 }, /* GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT */
-   { 48985, 0x00008034 }, /* GL_UNSIGNED_SHORT_5_5_5_1 */
-   { 49011, 0x00008363 }, /* GL_UNSIGNED_SHORT_5_6_5 */
-   { 49035, 0x00008364 }, /* GL_UNSIGNED_SHORT_5_6_5_REV */
-   { 49063, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_APPLE */
-   { 49091, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_MESA */
-   { 49118, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */
-   { 49150, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_MESA */
-   { 49181, 0x00008CA2 }, /* GL_UPPER_LEFT */
-   { 49195, 0x00002A20 }, /* GL_V2F */
-   { 49202, 0x00002A21 }, /* GL_V3F */
-   { 49209, 0x00008B83 }, /* GL_VALIDATE_STATUS */
-   { 49228, 0x00001F00 }, /* GL_VENDOR */
-   { 49238, 0x00001F02 }, /* GL_VERSION */
-   { 49249, 0x00008074 }, /* GL_VERTEX_ARRAY */
-   { 49265, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING */
-   { 49289, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING_APPLE */
-   { 49319, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING */
-   { 49350, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING_ARB */
-   { 49385, 0x0000808E }, /* GL_VERTEX_ARRAY_POINTER */
-   { 49409, 0x0000807A }, /* GL_VERTEX_ARRAY_SIZE */
-   { 49430, 0x0000807C }, /* GL_VERTEX_ARRAY_STRIDE */
-   { 49453, 0x0000807B }, /* GL_VERTEX_ARRAY_TYPE */
-   { 49474, 0x00008650 }, /* GL_VERTEX_ATTRIB_ARRAY0_NV */
-   { 49501, 0x0000865A }, /* GL_VERTEX_ATTRIB_ARRAY10_NV */
-   { 49529, 0x0000865B }, /* GL_VERTEX_ATTRIB_ARRAY11_NV */
-   { 49557, 0x0000865C }, /* GL_VERTEX_ATTRIB_ARRAY12_NV */
-   { 49585, 0x0000865D }, /* GL_VERTEX_ATTRIB_ARRAY13_NV */
-   { 49613, 0x0000865E }, /* GL_VERTEX_ATTRIB_ARRAY14_NV */
-   { 49641, 0x0000865F }, /* GL_VERTEX_ATTRIB_ARRAY15_NV */
-   { 49669, 0x00008651 }, /* GL_VERTEX_ATTRIB_ARRAY1_NV */
-   { 49696, 0x00008652 }, /* GL_VERTEX_ATTRIB_ARRAY2_NV */
-   { 49723, 0x00008653 }, /* GL_VERTEX_ATTRIB_ARRAY3_NV */
-   { 49750, 0x00008654 }, /* GL_VERTEX_ATTRIB_ARRAY4_NV */
-   { 49777, 0x00008655 }, /* GL_VERTEX_ATTRIB_ARRAY5_NV */
-   { 49804, 0x00008656 }, /* GL_VERTEX_ATTRIB_ARRAY6_NV */
-   { 49831, 0x00008657 }, /* GL_VERTEX_ATTRIB_ARRAY7_NV */
-   { 49858, 0x00008658 }, /* GL_VERTEX_ATTRIB_ARRAY8_NV */
-   { 49885, 0x00008659 }, /* GL_VERTEX_ATTRIB_ARRAY9_NV */
-   { 49912, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */
-   { 49950, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB */
-   { 49992, 0x000088FE }, /* GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB */
-   { 50027, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */
-   { 50058, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB */
-   { 50093, 0x000088FD }, /* GL_VERTEX_ATTRIB_ARRAY_INTEGER */
-   { 50124, 0x000088FD }, /* GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT */
-   { 50159, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */
-   { 50193, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB */
-   { 50231, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */
-   { 50262, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB */
-   { 50297, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */
-   { 50325, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB */
-   { 50357, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */
-   { 50387, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB */
-   { 50421, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */
-   { 50449, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB */
-   { 50481, 0x000086A7 }, /* GL_VERTEX_BLEND_ARB */
-   { 50501, 0x00008620 }, /* GL_VERTEX_PROGRAM_ARB */
-   { 50523, 0x0000864A }, /* GL_VERTEX_PROGRAM_BINDING_NV */
-   { 50552, 0x00008620 }, /* GL_VERTEX_PROGRAM_NV */
-   { 50573, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE */
-   { 50602, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_ARB */
-   { 50635, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_NV */
-   { 50667, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE */
-   { 50694, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_ARB */
-   { 50725, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_NV */
-   { 50755, 0x00008B31 }, /* GL_VERTEX_SHADER */
-   { 50772, 0x00008B31 }, /* GL_VERTEX_SHADER_ARB */
-   { 50793, 0x00008621 }, /* GL_VERTEX_STATE_PROGRAM_NV */
-   { 50820, 0x00000BA2 }, /* GL_VIEWPORT */
-   { 50832, 0x00000800 }, /* GL_VIEWPORT_BIT */
-   { 50848, 0x00008A1A }, /* GL_VOLATILE_APPLE */
-   { 50866, 0x0000911D }, /* GL_WAIT_FAILED */
-   { 50881, 0x000086AD }, /* GL_WEIGHT_ARRAY_ARB */
-   { 50901, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */
-   { 50932, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB */
-   { 50967, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_OES */
-   { 51002, 0x000086AD }, /* GL_WEIGHT_ARRAY_OES */
-   { 51022, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_ARB */
-   { 51050, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_OES */
-   { 51078, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_ARB */
-   { 51103, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_OES */
-   { 51128, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_ARB */
-   { 51155, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_OES */
-   { 51182, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_ARB */
-   { 51207, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_OES */
-   { 51232, 0x000086A6 }, /* GL_WEIGHT_SUM_UNITY_ARB */
-   { 51256, 0x000081D4 }, /* GL_WRAP_BORDER_SUN */
-   { 51275, 0x000088B9 }, /* GL_WRITE_ONLY */
-   { 51289, 0x000088B9 }, /* GL_WRITE_ONLY_ARB */
-   { 51307, 0x000088B9 }, /* GL_WRITE_ONLY_OES */
-   { 51325, 0x00001506 }, /* GL_XOR */
-   { 51332, 0x000085B9 }, /* GL_YCBCR_422_APPLE */
-   { 51351, 0x00008757 }, /* GL_YCBCR_MESA */
-   { 51365, 0x00000000 }, /* GL_ZERO */
-   { 51373, 0x00000D16 }, /* GL_ZOOM_X */
-   { 51383, 0x00000D17 }, /* GL_ZOOM_Y */
+   {  2717, 0x0000891B }, /* GL_CLAMP_FRAGMENT_COLOR_ARB */
+   {  2745, 0x0000891C }, /* GL_CLAMP_READ_COLOR */
+   {  2765, 0x0000891C }, /* GL_CLAMP_READ_COLOR_ARB */
+   {  2789, 0x0000812D }, /* GL_CLAMP_TO_BORDER */
+   {  2808, 0x0000812D }, /* GL_CLAMP_TO_BORDER_ARB */
+   {  2831, 0x0000812D }, /* GL_CLAMP_TO_BORDER_SGIS */
+   {  2855, 0x0000812F }, /* GL_CLAMP_TO_EDGE */
+   {  2872, 0x0000812F }, /* GL_CLAMP_TO_EDGE_SGIS */
+   {  2894, 0x0000891A }, /* GL_CLAMP_VERTEX_COLOR_ARB */
+   {  2920, 0x00001500 }, /* GL_CLEAR */
+   {  2929, 0x000084E1 }, /* GL_CLIENT_ACTIVE_TEXTURE */
+   {  2954, 0x000084E1 }, /* GL_CLIENT_ACTIVE_TEXTURE_ARB */
+   {  2983, 0xFFFFFFFF }, /* GL_CLIENT_ALL_ATTRIB_BITS */
+   {  3009, 0x00000BB1 }, /* GL_CLIENT_ATTRIB_STACK_DEPTH */
+   {  3038, 0x00000001 }, /* GL_CLIENT_PIXEL_STORE_BIT */
+   {  3064, 0x00000002 }, /* GL_CLIENT_VERTEX_ARRAY_BIT */
+   {  3091, 0x00003000 }, /* GL_CLIP_DISTANCE0 */
+   {  3109, 0x00003001 }, /* GL_CLIP_DISTANCE1 */
+   {  3127, 0x00003002 }, /* GL_CLIP_DISTANCE2 */
+   {  3145, 0x00003003 }, /* GL_CLIP_DISTANCE3 */
+   {  3163, 0x00003004 }, /* GL_CLIP_DISTANCE4 */
+   {  3181, 0x00003005 }, /* GL_CLIP_DISTANCE5 */
+   {  3199, 0x00003006 }, /* GL_CLIP_DISTANCE6 */
+   {  3217, 0x00003007 }, /* GL_CLIP_DISTANCE7 */
+   {  3235, 0x00003000 }, /* GL_CLIP_PLANE0 */
+   {  3250, 0x00003001 }, /* GL_CLIP_PLANE1 */
+   {  3265, 0x00003002 }, /* GL_CLIP_PLANE2 */
+   {  3280, 0x00003003 }, /* GL_CLIP_PLANE3 */
+   {  3295, 0x00003004 }, /* GL_CLIP_PLANE4 */
+   {  3310, 0x00003005 }, /* GL_CLIP_PLANE5 */
+   {  3325, 0x000080F0 }, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */
+   {  3358, 0x00000A00 }, /* GL_COEFF */
+   {  3367, 0x00001800 }, /* GL_COLOR */
+   {  3376, 0x00008076 }, /* GL_COLOR_ARRAY */
+   {  3391, 0x00008898 }, /* GL_COLOR_ARRAY_BUFFER_BINDING */
+   {  3421, 0x00008898 }, /* GL_COLOR_ARRAY_BUFFER_BINDING_ARB */
+   {  3455, 0x00008090 }, /* GL_COLOR_ARRAY_POINTER */
+   {  3478, 0x00008081 }, /* GL_COLOR_ARRAY_SIZE */
+   {  3498, 0x00008083 }, /* GL_COLOR_ARRAY_STRIDE */
+   {  3520, 0x00008082 }, /* GL_COLOR_ARRAY_TYPE */
+   {  3540, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0 */
+   {  3561, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0_EXT */
+   {  3586, 0x00008CE0 }, /* GL_COLOR_ATTACHMENT0_OES */
+   {  3611, 0x00008CE1 }, /* GL_COLOR_ATTACHMENT1 */
+   {  3632, 0x00008CEA }, /* GL_COLOR_ATTACHMENT10 */
+   {  3654, 0x00008CEA }, /* GL_COLOR_ATTACHMENT10_EXT */
+   {  3680, 0x00008CEB }, /* GL_COLOR_ATTACHMENT11 */
+   {  3702, 0x00008CEB }, /* GL_COLOR_ATTACHMENT11_EXT */
+   {  3728, 0x00008CEC }, /* GL_COLOR_ATTACHMENT12 */
+   {  3750, 0x00008CEC }, /* GL_COLOR_ATTACHMENT12_EXT */
+   {  3776, 0x00008CED }, /* GL_COLOR_ATTACHMENT13 */
+   {  3798, 0x00008CED }, /* GL_COLOR_ATTACHMENT13_EXT */
+   {  3824, 0x00008CEE }, /* GL_COLOR_ATTACHMENT14 */
+   {  3846, 0x00008CEE }, /* GL_COLOR_ATTACHMENT14_EXT */
+   {  3872, 0x00008CEF }, /* GL_COLOR_ATTACHMENT15 */
+   {  3894, 0x00008CEF }, /* GL_COLOR_ATTACHMENT15_EXT */
+   {  3920, 0x00008CE1 }, /* GL_COLOR_ATTACHMENT1_EXT */
+   {  3945, 0x00008CE2 }, /* GL_COLOR_ATTACHMENT2 */
+   {  3966, 0x00008CE2 }, /* GL_COLOR_ATTACHMENT2_EXT */
+   {  3991, 0x00008CE3 }, /* GL_COLOR_ATTACHMENT3 */
+   {  4012, 0x00008CE3 }, /* GL_COLOR_ATTACHMENT3_EXT */
+   {  4037, 0x00008CE4 }, /* GL_COLOR_ATTACHMENT4 */
+   {  4058, 0x00008CE4 }, /* GL_COLOR_ATTACHMENT4_EXT */
+   {  4083, 0x00008CE5 }, /* GL_COLOR_ATTACHMENT5 */
+   {  4104, 0x00008CE5 }, /* GL_COLOR_ATTACHMENT5_EXT */
+   {  4129, 0x00008CE6 }, /* GL_COLOR_ATTACHMENT6 */
+   {  4150, 0x00008CE6 }, /* GL_COLOR_ATTACHMENT6_EXT */
+   {  4175, 0x00008CE7 }, /* GL_COLOR_ATTACHMENT7 */
+   {  4196, 0x00008CE7 }, /* GL_COLOR_ATTACHMENT7_EXT */
+   {  4221, 0x00008CE8 }, /* GL_COLOR_ATTACHMENT8 */
+   {  4242, 0x00008CE8 }, /* GL_COLOR_ATTACHMENT8_EXT */
+   {  4267, 0x00008CE9 }, /* GL_COLOR_ATTACHMENT9 */
+   {  4288, 0x00008CE9 }, /* GL_COLOR_ATTACHMENT9_EXT */
+   {  4313, 0x00004000 }, /* GL_COLOR_BUFFER_BIT */
+   {  4333, 0x00000C22 }, /* GL_COLOR_CLEAR_VALUE */
+   {  4354, 0x00001900 }, /* GL_COLOR_INDEX */
+   {  4369, 0x00001603 }, /* GL_COLOR_INDEXES */
+   {  4386, 0x00000BF2 }, /* GL_COLOR_LOGIC_OP */
+   {  4404, 0x00000B57 }, /* GL_COLOR_MATERIAL */
+   {  4422, 0x00000B55 }, /* GL_COLOR_MATERIAL_FACE */
+   {  4445, 0x00000B56 }, /* GL_COLOR_MATERIAL_PARAMETER */
+   {  4473, 0x000080B1 }, /* GL_COLOR_MATRIX */
+   {  4489, 0x000080B1 }, /* GL_COLOR_MATRIX_SGI */
+   {  4509, 0x000080B2 }, /* GL_COLOR_MATRIX_STACK_DEPTH */
+   {  4537, 0x000080B2 }, /* GL_COLOR_MATRIX_STACK_DEPTH_SGI */
+   {  4569, 0x00008458 }, /* GL_COLOR_SUM */
+   {  4582, 0x00008458 }, /* GL_COLOR_SUM_ARB */
+   {  4599, 0x000080D0 }, /* GL_COLOR_TABLE */
+   {  4614, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE */
+   {  4640, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE_EXT */
+   {  4670, 0x000080DD }, /* GL_COLOR_TABLE_ALPHA_SIZE_SGI */
+   {  4700, 0x000080D7 }, /* GL_COLOR_TABLE_BIAS */
+   {  4720, 0x000080D7 }, /* GL_COLOR_TABLE_BIAS_SGI */
+   {  4744, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE */
+   {  4769, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE_EXT */
+   {  4798, 0x000080DC }, /* GL_COLOR_TABLE_BLUE_SIZE_SGI */
+   {  4827, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT */
+   {  4849, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT_EXT */
+   {  4875, 0x000080D8 }, /* GL_COLOR_TABLE_FORMAT_SGI */
+   {  4901, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE */
+   {  4927, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE_EXT */
+   {  4957, 0x000080DB }, /* GL_COLOR_TABLE_GREEN_SIZE_SGI */
+   {  4987, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE */
+   {  5017, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE_EXT */
+   {  5051, 0x000080DF }, /* GL_COLOR_TABLE_INTENSITY_SIZE_SGI */
+   {  5085, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE */
+   {  5115, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE_EXT */
+   {  5149, 0x000080DE }, /* GL_COLOR_TABLE_LUMINANCE_SIZE_SGI */
+   {  5183, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE */
+   {  5207, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE_EXT */
+   {  5235, 0x000080DA }, /* GL_COLOR_TABLE_RED_SIZE_SGI */
+   {  5263, 0x000080D6 }, /* GL_COLOR_TABLE_SCALE */
+   {  5284, 0x000080D6 }, /* GL_COLOR_TABLE_SCALE_SGI */
+   {  5309, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH */
+   {  5330, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH_EXT */
+   {  5355, 0x000080D9 }, /* GL_COLOR_TABLE_WIDTH_SGI */
+   {  5380, 0x00000C23 }, /* GL_COLOR_WRITEMASK */
+   {  5399, 0x00008570 }, /* GL_COMBINE */
+   {  5410, 0x00008503 }, /* GL_COMBINE4 */
+   {  5422, 0x00008572 }, /* GL_COMBINE_ALPHA */
+   {  5439, 0x00008572 }, /* GL_COMBINE_ALPHA_ARB */
+   {  5460, 0x00008572 }, /* GL_COMBINE_ALPHA_EXT */
+   {  5481, 0x00008570 }, /* GL_COMBINE_ARB */
+   {  5496, 0x00008570 }, /* GL_COMBINE_EXT */
+   {  5511, 0x00008571 }, /* GL_COMBINE_RGB */
+   {  5526, 0x00008571 }, /* GL_COMBINE_RGB_ARB */
+   {  5545, 0x00008571 }, /* GL_COMBINE_RGB_EXT */
+   {  5564, 0x0000884E }, /* GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT */
+   {  5600, 0x0000884E }, /* GL_COMPARE_REF_TO_TEXTURE */
+   {  5626, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE */
+   {  5650, 0x0000884E }, /* GL_COMPARE_R_TO_TEXTURE_ARB */
+   {  5678, 0x00001300 }, /* GL_COMPILE */
+   {  5689, 0x00001301 }, /* GL_COMPILE_AND_EXECUTE */
+   {  5712, 0x00008B81 }, /* GL_COMPILE_STATUS */
+   {  5730, 0x000084E9 }, /* GL_COMPRESSED_ALPHA */
+   {  5750, 0x000084E9 }, /* GL_COMPRESSED_ALPHA_ARB */
+   {  5774, 0x000084EC }, /* GL_COMPRESSED_INTENSITY */
+   {  5798, 0x000084EC }, /* GL_COMPRESSED_INTENSITY_ARB */
+   {  5826, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE */
+   {  5850, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA */
+   {  5880, 0x000084EB }, /* GL_COMPRESSED_LUMINANCE_ALPHA_ARB */
+   {  5914, 0x000084EA }, /* GL_COMPRESSED_LUMINANCE_ARB */
+   {  5942, 0x00008225 }, /* GL_COMPRESSED_RED */
+   {  5960, 0x00008226 }, /* GL_COMPRESSED_RG */
+   {  5977, 0x000084ED }, /* GL_COMPRESSED_RGB */
+   {  5995, 0x000084EE }, /* GL_COMPRESSED_RGBA */
+   {  6014, 0x000084EE }, /* GL_COMPRESSED_RGBA_ARB */
+   {  6037, 0x000086B1 }, /* GL_COMPRESSED_RGBA_FXT1_3DFX */
+   {  6066, 0x000083F1 }, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */
+   {  6099, 0x000083F2 }, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */
+   {  6132, 0x000083F3 }, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */
+   {  6165, 0x000084ED }, /* GL_COMPRESSED_RGB_ARB */
+   {  6187, 0x000086B0 }, /* GL_COMPRESSED_RGB_FXT1_3DFX */
+   {  6215, 0x000083F0 }, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */
+   {  6247, 0x00008C4A }, /* GL_COMPRESSED_SLUMINANCE */
+   {  6272, 0x00008C4B }, /* GL_COMPRESSED_SLUMINANCE_ALPHA */
+   {  6303, 0x00008C48 }, /* GL_COMPRESSED_SRGB */
+   {  6322, 0x00008C49 }, /* GL_COMPRESSED_SRGB_ALPHA */
+   {  6347, 0x000086A3 }, /* GL_COMPRESSED_TEXTURE_FORMATS */
+   {  6377, 0x0000911C }, /* GL_CONDITION_SATISFIED */
+   {  6400, 0x00008576 }, /* GL_CONSTANT */
+   {  6412, 0x00008003 }, /* GL_CONSTANT_ALPHA */
+   {  6430, 0x00008003 }, /* GL_CONSTANT_ALPHA_EXT */
+   {  6452, 0x00008576 }, /* GL_CONSTANT_ARB */
+   {  6468, 0x00001207 }, /* GL_CONSTANT_ATTENUATION */
+   {  6492, 0x00008151 }, /* GL_CONSTANT_BORDER_HP */
+   {  6514, 0x00008001 }, /* GL_CONSTANT_COLOR */
+   {  6532, 0x00008001 }, /* GL_CONSTANT_COLOR_EXT */
+   {  6554, 0x00008576 }, /* GL_CONSTANT_EXT */
+   {  6570, 0x00000002 }, /* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT */
+   {  6607, 0x00000001 }, /* GL_CONTEXT_CORE_PROFILE_BIT */
+   {  6635, 0x0000821E }, /* GL_CONTEXT_FLAGS */
+   {  6652, 0x00000001 }, /* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT */
+   {  6691, 0x00009126 }, /* GL_CONTEXT_PROFILE_MASK */
+   {  6715, 0x00008010 }, /* GL_CONVOLUTION_1D */
+   {  6733, 0x00008011 }, /* GL_CONVOLUTION_2D */
+   {  6751, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR */
+   {  6779, 0x00008154 }, /* GL_CONVOLUTION_BORDER_COLOR_HP */
+   {  6810, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE */
+   {  6837, 0x00008013 }, /* GL_CONVOLUTION_BORDER_MODE_EXT */
+   {  6868, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS */
+   {  6895, 0x00008015 }, /* GL_CONVOLUTION_FILTER_BIAS_EXT */
+   {  6926, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE */
+   {  6954, 0x00008014 }, /* GL_CONVOLUTION_FILTER_SCALE_EXT */
+   {  6986, 0x00008017 }, /* GL_CONVOLUTION_FORMAT */
+   {  7008, 0x00008017 }, /* GL_CONVOLUTION_FORMAT_EXT */
+   {  7034, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT */
+   {  7056, 0x00008019 }, /* GL_CONVOLUTION_HEIGHT_EXT */
+   {  7082, 0x00008018 }, /* GL_CONVOLUTION_WIDTH */
+   {  7103, 0x00008018 }, /* GL_CONVOLUTION_WIDTH_EXT */
+   {  7128, 0x00008862 }, /* GL_COORD_REPLACE */
+   {  7145, 0x00008862 }, /* GL_COORD_REPLACE_ARB */
+   {  7166, 0x00008862 }, /* GL_COORD_REPLACE_NV */
+   {  7186, 0x00008862 }, /* GL_COORD_REPLACE_OES */
+   {  7207, 0x00001503 }, /* GL_COPY */
+   {  7215, 0x0000150C }, /* GL_COPY_INVERTED */
+   {  7232, 0x00000706 }, /* GL_COPY_PIXEL_TOKEN */
+   {  7252, 0x00008F36 }, /* GL_COPY_READ_BUFFER */
+   {  7272, 0x00008F37 }, /* GL_COPY_WRITE_BUFFER */
+   {  7293, 0x00000B44 }, /* GL_CULL_FACE */
+   {  7306, 0x00000B45 }, /* GL_CULL_FACE_MODE */
+   {  7324, 0x000081AA }, /* GL_CULL_VERTEX_EXT */
+   {  7343, 0x000081AC }, /* GL_CULL_VERTEX_EYE_POSITION_EXT */
+   {  7375, 0x000081AB }, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */
+   {  7410, 0x00008626 }, /* GL_CURRENT_ATTRIB_NV */
+   {  7431, 0x00000001 }, /* GL_CURRENT_BIT */
+   {  7446, 0x00000B00 }, /* GL_CURRENT_COLOR */
+   {  7463, 0x00008453 }, /* GL_CURRENT_FOG_COORD */
+   {  7484, 0x00008453 }, /* GL_CURRENT_FOG_COORDINATE */
+   {  7510, 0x00000B01 }, /* GL_CURRENT_INDEX */
+   {  7527, 0x00008641 }, /* GL_CURRENT_MATRIX_ARB */
+   {  7549, 0x00008845 }, /* GL_CURRENT_MATRIX_INDEX_ARB */
+   {  7577, 0x00008641 }, /* GL_CURRENT_MATRIX_NV */
+   {  7598, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */
+   {  7632, 0x00008640 }, /* GL_CURRENT_MATRIX_STACK_DEPTH_NV */
+   {  7665, 0x00000B02 }, /* GL_CURRENT_NORMAL */
+   {  7683, 0x00008843 }, /* GL_CURRENT_PALETTE_MATRIX_ARB */
+   {  7713, 0x00008843 }, /* GL_CURRENT_PALETTE_MATRIX_OES */
+   {  7743, 0x00008B8D }, /* GL_CURRENT_PROGRAM */
+   {  7762, 0x00008865 }, /* GL_CURRENT_QUERY */
+   {  7779, 0x00008865 }, /* GL_CURRENT_QUERY_ARB */
+   {  7800, 0x00000B04 }, /* GL_CURRENT_RASTER_COLOR */
+   {  7824, 0x00000B09 }, /* GL_CURRENT_RASTER_DISTANCE */
+   {  7851, 0x00000B05 }, /* GL_CURRENT_RASTER_INDEX */
+   {  7875, 0x00000B07 }, /* GL_CURRENT_RASTER_POSITION */
+   {  7902, 0x00000B08 }, /* GL_CURRENT_RASTER_POSITION_VALID */
+   {  7935, 0x0000845F }, /* GL_CURRENT_RASTER_SECONDARY_COLOR */
+   {  7969, 0x00000B06 }, /* GL_CURRENT_RASTER_TEXTURE_COORDS */
+   {  8002, 0x00008459 }, /* GL_CURRENT_SECONDARY_COLOR */
+   {  8029, 0x00000B03 }, /* GL_CURRENT_TEXTURE_COORDS */
+   {  8055, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB */
+   {  8080, 0x00008626 }, /* GL_CURRENT_VERTEX_ATTRIB_ARB */
+   {  8109, 0x000086A8 }, /* GL_CURRENT_WEIGHT_ARB */
+   {  8131, 0x00000900 }, /* GL_CW */
+   {  8137, 0x0000875B }, /* GL_DEBUG_ASSERT_MESA */
+   {  8158, 0x00008759 }, /* GL_DEBUG_OBJECT_MESA */
+   {  8179, 0x0000875A }, /* GL_DEBUG_PRINT_MESA */
+   {  8199, 0x00002101 }, /* GL_DECAL */
+   {  8208, 0x00001E03 }, /* GL_DECR */
+   {  8216, 0x00008508 }, /* GL_DECR_WRAP */
+   {  8229, 0x00008508 }, /* GL_DECR_WRAP_EXT */
+   {  8246, 0x00008B80 }, /* GL_DELETE_STATUS */
+   {  8263, 0x00001801 }, /* GL_DEPTH */
+   {  8272, 0x000088F0 }, /* GL_DEPTH24_STENCIL8 */
+   {  8292, 0x000088F0 }, /* GL_DEPTH24_STENCIL8_EXT */
+   {  8316, 0x000088F0 }, /* GL_DEPTH24_STENCIL8_OES */
+   {  8340, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT */
+   {  8360, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT_EXT */
+   {  8384, 0x00008D00 }, /* GL_DEPTH_ATTACHMENT_OES */
+   {  8408, 0x00000D1F }, /* GL_DEPTH_BIAS */
+   {  8422, 0x00000D56 }, /* GL_DEPTH_BITS */
+   {  8436, 0x00008891 }, /* GL_DEPTH_BOUNDS_EXT */
+   {  8456, 0x00008890 }, /* GL_DEPTH_BOUNDS_TEST_EXT */
+   {  8481, 0x00008223 }, /* GL_DEPTH_BUFFER */
+   {  8497, 0x00000100 }, /* GL_DEPTH_BUFFER_BIT */
+   {  8517, 0x0000864F }, /* GL_DEPTH_CLAMP */
+   {  8532, 0x0000864F }, /* GL_DEPTH_CLAMP_NV */
+   {  8550, 0x00000B73 }, /* GL_DEPTH_CLEAR_VALUE */
+   {  8571, 0x00001902 }, /* GL_DEPTH_COMPONENT */
+   {  8590, 0x000081A5 }, /* GL_DEPTH_COMPONENT16 */
+   {  8611, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_ARB */
+   {  8636, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_OES */
+   {  8661, 0x000081A5 }, /* GL_DEPTH_COMPONENT16_SGIX */
+   {  8687, 0x000081A6 }, /* GL_DEPTH_COMPONENT24 */
+   {  8708, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_ARB */
+   {  8733, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_OES */
+   {  8758, 0x000081A6 }, /* GL_DEPTH_COMPONENT24_SGIX */
+   {  8784, 0x000081A7 }, /* GL_DEPTH_COMPONENT32 */
+   {  8805, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_ARB */
+   {  8830, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_OES */
+   {  8855, 0x000081A7 }, /* GL_DEPTH_COMPONENT32_SGIX */
+   {  8881, 0x00000B74 }, /* GL_DEPTH_FUNC */
+   {  8895, 0x00000B70 }, /* GL_DEPTH_RANGE */
+   {  8910, 0x00000D1E }, /* GL_DEPTH_SCALE */
+   {  8925, 0x000084F9 }, /* GL_DEPTH_STENCIL */
+   {  8942, 0x0000821A }, /* GL_DEPTH_STENCIL_ATTACHMENT */
+   {  8970, 0x000084F9 }, /* GL_DEPTH_STENCIL_EXT */
+   {  8991, 0x000084F9 }, /* GL_DEPTH_STENCIL_NV */
+   {  9011, 0x000084F9 }, /* GL_DEPTH_STENCIL_OES */
+   {  9032, 0x0000886F }, /* GL_DEPTH_STENCIL_TO_BGRA_NV */
+   {  9060, 0x0000886E }, /* GL_DEPTH_STENCIL_TO_RGBA_NV */
+   {  9088, 0x00000B71 }, /* GL_DEPTH_TEST */
+   {  9102, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE */
+   {  9124, 0x0000884B }, /* GL_DEPTH_TEXTURE_MODE_ARB */
+   {  9150, 0x00000B72 }, /* GL_DEPTH_WRITEMASK */
+   {  9169, 0x00001201 }, /* GL_DIFFUSE */
+   {  9180, 0x00000BD0 }, /* GL_DITHER */
+   {  9190, 0x00000A02 }, /* GL_DOMAIN */
+   {  9200, 0x00001100 }, /* GL_DONT_CARE */
+   {  9213, 0x000086AE }, /* GL_DOT3_RGB */
+   {  9225, 0x000086AF }, /* GL_DOT3_RGBA */
+   {  9238, 0x000086AF }, /* GL_DOT3_RGBA_ARB */
+   {  9255, 0x00008741 }, /* GL_DOT3_RGBA_EXT */
+   {  9272, 0x000086AE }, /* GL_DOT3_RGB_ARB */
+   {  9288, 0x00008740 }, /* GL_DOT3_RGB_EXT */
+   {  9304, 0x0000140A }, /* GL_DOUBLE */
+   {  9314, 0x00000C32 }, /* GL_DOUBLEBUFFER */
+   {  9330, 0x00000C01 }, /* GL_DRAW_BUFFER */
+   {  9345, 0x00008825 }, /* GL_DRAW_BUFFER0 */
+   {  9361, 0x00008825 }, /* GL_DRAW_BUFFER0_ARB */
+   {  9381, 0x00008825 }, /* GL_DRAW_BUFFER0_ATI */
+   {  9401, 0x00008826 }, /* GL_DRAW_BUFFER1 */
+   {  9417, 0x0000882F }, /* GL_DRAW_BUFFER10 */
+   {  9434, 0x0000882F }, /* GL_DRAW_BUFFER10_ARB */
+   {  9455, 0x0000882F }, /* GL_DRAW_BUFFER10_ATI */
+   {  9476, 0x00008830 }, /* GL_DRAW_BUFFER11 */
+   {  9493, 0x00008830 }, /* GL_DRAW_BUFFER11_ARB */
+   {  9514, 0x00008830 }, /* GL_DRAW_BUFFER11_ATI */
+   {  9535, 0x00008831 }, /* GL_DRAW_BUFFER12 */
+   {  9552, 0x00008831 }, /* GL_DRAW_BUFFER12_ARB */
+   {  9573, 0x00008831 }, /* GL_DRAW_BUFFER12_ATI */
+   {  9594, 0x00008832 }, /* GL_DRAW_BUFFER13 */
+   {  9611, 0x00008832 }, /* GL_DRAW_BUFFER13_ARB */
+   {  9632, 0x00008832 }, /* GL_DRAW_BUFFER13_ATI */
+   {  9653, 0x00008833 }, /* GL_DRAW_BUFFER14 */
+   {  9670, 0x00008833 }, /* GL_DRAW_BUFFER14_ARB */
+   {  9691, 0x00008833 }, /* GL_DRAW_BUFFER14_ATI */
+   {  9712, 0x00008834 }, /* GL_DRAW_BUFFER15 */
+   {  9729, 0x00008834 }, /* GL_DRAW_BUFFER15_ARB */
+   {  9750, 0x00008834 }, /* GL_DRAW_BUFFER15_ATI */
+   {  9771, 0x00008826 }, /* GL_DRAW_BUFFER1_ARB */
+   {  9791, 0x00008826 }, /* GL_DRAW_BUFFER1_ATI */
+   {  9811, 0x00008827 }, /* GL_DRAW_BUFFER2 */
+   {  9827, 0x00008827 }, /* GL_DRAW_BUFFER2_ARB */
+   {  9847, 0x00008827 }, /* GL_DRAW_BUFFER2_ATI */
+   {  9867, 0x00008828 }, /* GL_DRAW_BUFFER3 */
+   {  9883, 0x00008828 }, /* GL_DRAW_BUFFER3_ARB */
+   {  9903, 0x00008828 }, /* GL_DRAW_BUFFER3_ATI */
+   {  9923, 0x00008829 }, /* GL_DRAW_BUFFER4 */
+   {  9939, 0x00008829 }, /* GL_DRAW_BUFFER4_ARB */
+   {  9959, 0x00008829 }, /* GL_DRAW_BUFFER4_ATI */
+   {  9979, 0x0000882A }, /* GL_DRAW_BUFFER5 */
+   {  9995, 0x0000882A }, /* GL_DRAW_BUFFER5_ARB */
+   { 10015, 0x0000882A }, /* GL_DRAW_BUFFER5_ATI */
+   { 10035, 0x0000882B }, /* GL_DRAW_BUFFER6 */
+   { 10051, 0x0000882B }, /* GL_DRAW_BUFFER6_ARB */
+   { 10071, 0x0000882B }, /* GL_DRAW_BUFFER6_ATI */
+   { 10091, 0x0000882C }, /* GL_DRAW_BUFFER7 */
+   { 10107, 0x0000882C }, /* GL_DRAW_BUFFER7_ARB */
+   { 10127, 0x0000882C }, /* GL_DRAW_BUFFER7_ATI */
+   { 10147, 0x0000882D }, /* GL_DRAW_BUFFER8 */
+   { 10163, 0x0000882D }, /* GL_DRAW_BUFFER8_ARB */
+   { 10183, 0x0000882D }, /* GL_DRAW_BUFFER8_ATI */
+   { 10203, 0x0000882E }, /* GL_DRAW_BUFFER9 */
+   { 10219, 0x0000882E }, /* GL_DRAW_BUFFER9_ARB */
+   { 10239, 0x0000882E }, /* GL_DRAW_BUFFER9_ATI */
+   { 10259, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER */
+   { 10279, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING */
+   { 10307, 0x00008CA6 }, /* GL_DRAW_FRAMEBUFFER_BINDING_EXT */
+   { 10339, 0x00008CA9 }, /* GL_DRAW_FRAMEBUFFER_EXT */
+   { 10363, 0x00000705 }, /* GL_DRAW_PIXEL_TOKEN */
+   { 10383, 0x00000304 }, /* GL_DST_ALPHA */
+   { 10396, 0x00000306 }, /* GL_DST_COLOR */
+   { 10409, 0x0000877A }, /* GL_DU8DV8_ATI */
+   { 10423, 0x00008779 }, /* GL_DUDV_ATI */
+   { 10435, 0x000088EA }, /* GL_DYNAMIC_COPY */
+   { 10451, 0x000088EA }, /* GL_DYNAMIC_COPY_ARB */
+   { 10471, 0x000088E8 }, /* GL_DYNAMIC_DRAW */
+   { 10487, 0x000088E8 }, /* GL_DYNAMIC_DRAW_ARB */
+   { 10507, 0x000088E9 }, /* GL_DYNAMIC_READ */
+   { 10523, 0x000088E9 }, /* GL_DYNAMIC_READ_ARB */
+   { 10543, 0x00000B43 }, /* GL_EDGE_FLAG */
+   { 10556, 0x00008079 }, /* GL_EDGE_FLAG_ARRAY */
+   { 10575, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */
+   { 10609, 0x0000889B }, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB */
+   { 10647, 0x00008093 }, /* GL_EDGE_FLAG_ARRAY_POINTER */
+   { 10674, 0x0000808C }, /* GL_EDGE_FLAG_ARRAY_STRIDE */
+   { 10700, 0x00008893 }, /* GL_ELEMENT_ARRAY_BUFFER */
+   { 10724, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */
+   { 10756, 0x00008895 }, /* GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB */
+   { 10792, 0x00001600 }, /* GL_EMISSION */
+   { 10804, 0x00002000 }, /* GL_ENABLE_BIT */
+   { 10818, 0x00000202 }, /* GL_EQUAL */
+   { 10827, 0x00001509 }, /* GL_EQUIV */
+   { 10836, 0x00010000 }, /* GL_EVAL_BIT */
+   { 10848, 0x00000800 }, /* GL_EXP */
+   { 10855, 0x00000801 }, /* GL_EXP2 */
+   { 10863, 0x00001F03 }, /* GL_EXTENSIONS */
+   { 10877, 0x00002400 }, /* GL_EYE_LINEAR */
+   { 10891, 0x00002502 }, /* GL_EYE_PLANE */
+   { 10904, 0x0000855C }, /* GL_EYE_PLANE_ABSOLUTE_NV */
+   { 10929, 0x0000855B }, /* GL_EYE_RADIAL_NV */
+   { 10946, 0x00000000 }, /* GL_FALSE */
+   { 10955, 0x00001101 }, /* GL_FASTEST */
+   { 10966, 0x00001C01 }, /* GL_FEEDBACK */
+   { 10978, 0x00000DF0 }, /* GL_FEEDBACK_BUFFER_POINTER */
+   { 11005, 0x00000DF1 }, /* GL_FEEDBACK_BUFFER_SIZE */
+   { 11029, 0x00000DF2 }, /* GL_FEEDBACK_BUFFER_TYPE */
+   { 11053, 0x00001B02 }, /* GL_FILL */
+   { 11061, 0x00008E4D }, /* GL_FIRST_VERTEX_CONVENTION */
+   { 11088, 0x00008E4D }, /* GL_FIRST_VERTEX_CONVENTION_EXT */
+   { 11119, 0x0000140C }, /* GL_FIXED */
+   { 11128, 0x0000140C }, /* GL_FIXED_OES */
+   { 11141, 0x0000891D }, /* GL_FIXED_ONLY */
+   { 11155, 0x0000891D }, /* GL_FIXED_ONLY_ARB */
+   { 11173, 0x00001D00 }, /* GL_FLAT */
+   { 11181, 0x00001406 }, /* GL_FLOAT */
+   { 11190, 0x00008B5A }, /* GL_FLOAT_MAT2 */
+   { 11204, 0x00008B5A }, /* GL_FLOAT_MAT2_ARB */
+   { 11222, 0x00008B65 }, /* GL_FLOAT_MAT2x3 */
+   { 11238, 0x00008B66 }, /* GL_FLOAT_MAT2x4 */
+   { 11254, 0x00008B5B }, /* GL_FLOAT_MAT3 */
+   { 11268, 0x00008B5B }, /* GL_FLOAT_MAT3_ARB */
+   { 11286, 0x00008B67 }, /* GL_FLOAT_MAT3x2 */
+   { 11302, 0x00008B68 }, /* GL_FLOAT_MAT3x4 */
+   { 11318, 0x00008B5C }, /* GL_FLOAT_MAT4 */
+   { 11332, 0x00008B5C }, /* GL_FLOAT_MAT4_ARB */
+   { 11350, 0x00008B69 }, /* GL_FLOAT_MAT4x2 */
+   { 11366, 0x00008B6A }, /* GL_FLOAT_MAT4x3 */
+   { 11382, 0x00008B50 }, /* GL_FLOAT_VEC2 */
+   { 11396, 0x00008B50 }, /* GL_FLOAT_VEC2_ARB */
+   { 11414, 0x00008B51 }, /* GL_FLOAT_VEC3 */
+   { 11428, 0x00008B51 }, /* GL_FLOAT_VEC3_ARB */
+   { 11446, 0x00008B52 }, /* GL_FLOAT_VEC4 */
+   { 11460, 0x00008B52 }, /* GL_FLOAT_VEC4_ARB */
+   { 11478, 0x00000B60 }, /* GL_FOG */
+   { 11485, 0x00000080 }, /* GL_FOG_BIT */
+   { 11496, 0x00000B66 }, /* GL_FOG_COLOR */
+   { 11509, 0x00008451 }, /* GL_FOG_COORD */
+   { 11522, 0x00008451 }, /* GL_FOG_COORDINATE */
+   { 11540, 0x00008457 }, /* GL_FOG_COORDINATE_ARRAY */
+   { 11564, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */
+   { 11603, 0x0000889D }, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB */
+   { 11646, 0x00008456 }, /* GL_FOG_COORDINATE_ARRAY_POINTER */
+   { 11678, 0x00008455 }, /* GL_FOG_COORDINATE_ARRAY_STRIDE */
+   { 11709, 0x00008454 }, /* GL_FOG_COORDINATE_ARRAY_TYPE */
+   { 11738, 0x00008450 }, /* GL_FOG_COORDINATE_SOURCE */
+   { 11763, 0x00008457 }, /* GL_FOG_COORD_ARRAY */
+   { 11782, 0x0000889D }, /* GL_FOG_COORD_ARRAY_BUFFER_BINDING */
+   { 11816, 0x00008456 }, /* GL_FOG_COORD_ARRAY_POINTER */
+   { 11843, 0x00008455 }, /* GL_FOG_COORD_ARRAY_STRIDE */
+   { 11869, 0x00008454 }, /* GL_FOG_COORD_ARRAY_TYPE */
+   { 11893, 0x00008450 }, /* GL_FOG_COORD_SRC */
+   { 11910, 0x00000B62 }, /* GL_FOG_DENSITY */
+   { 11925, 0x0000855A }, /* GL_FOG_DISTANCE_MODE_NV */
+   { 11949, 0x00000B64 }, /* GL_FOG_END */
+   { 11960, 0x00000C54 }, /* GL_FOG_HINT */
+   { 11972, 0x00000B61 }, /* GL_FOG_INDEX */
+   { 11985, 0x00000B65 }, /* GL_FOG_MODE */
+   { 11997, 0x00008198 }, /* GL_FOG_OFFSET_SGIX */
+   { 12016, 0x00008199 }, /* GL_FOG_OFFSET_VALUE_SGIX */
+   { 12041, 0x00000B63 }, /* GL_FOG_START */
+   { 12054, 0x00008452 }, /* GL_FRAGMENT_DEPTH */
+   { 12072, 0x00008804 }, /* GL_FRAGMENT_PROGRAM_ARB */
+   { 12096, 0x00008B30 }, /* GL_FRAGMENT_SHADER */
+   { 12115, 0x00008B30 }, /* GL_FRAGMENT_SHADER_ARB */
+   { 12138, 0x00008B8B }, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */
+   { 12173, 0x00008B8B }, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES */
+   { 12212, 0x00008D40 }, /* GL_FRAMEBUFFER */
+   { 12227, 0x00008215 }, /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */
+   { 12264, 0x00008214 }, /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */
+   { 12300, 0x00008210 }, /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */
+   { 12341, 0x00008211 }, /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */
+   { 12382, 0x00008216 }, /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */
+   { 12419, 0x00008213 }, /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */
+   { 12456, 0x00008DA7 }, /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED */
+   { 12490, 0x00008DA7 }, /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB */
+   { 12528, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */
+   { 12566, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT */
+   { 12608, 0x00008CD1 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES */
+   { 12650, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */
+   { 12688, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT */
+   { 12730, 0x00008CD0 }, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES */
+   { 12772, 0x00008212 }, /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */
+   { 12807, 0x00008217 }, /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */
+   { 12846, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT */
+   { 12895, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES */
+   { 12944, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */
+   { 12992, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT */
+   { 13044, 0x00008CD3 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES */
+   { 13096, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */
+   { 13136, 0x00008CD4 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */
+   { 13180, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */
+   { 13220, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT */
+   { 13264, 0x00008CD2 }, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES */
+   { 13308, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING */
+   { 13331, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING_EXT */
+   { 13358, 0x00008CA6 }, /* GL_FRAMEBUFFER_BINDING_OES */
+   { 13385, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE */
+   { 13409, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE_EXT */
+   { 13437, 0x00008CD5 }, /* GL_FRAMEBUFFER_COMPLETE_OES */
+   { 13465, 0x00008218 }, /* GL_FRAMEBUFFER_DEFAULT */
+   { 13488, 0x00008D40 }, /* GL_FRAMEBUFFER_EXT */
+   { 13507, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */
+   { 13544, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT */
+   { 13585, 0x00008CD6 }, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES */
+   { 13626, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS */
+   { 13663, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */
+   { 13704, 0x00008CD9 }, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES */
+   { 13745, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */
+   { 13783, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT */
+   { 13825, 0x00008CDB }, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES */
+   { 13867, 0x00008CD8 }, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */
+   { 13918, 0x00008CDA }, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */
+   { 13956, 0x00008CDA }, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES */
+   { 13994, 0x00008DA9 }, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB */
+   { 14036, 0x00008DA8 }, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS */
+   { 14076, 0x00008DA8 }, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB */
+   { 14120, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */
+   { 14165, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT */
+   { 14214, 0x00008CD7 }, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES */
+   { 14263, 0x00008D56 }, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */
+   { 14301, 0x00008D56 }, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT */
+   { 14343, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */
+   { 14381, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT */
+   { 14423, 0x00008CDC }, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES */
+   { 14465, 0x00008D40 }, /* GL_FRAMEBUFFER_OES */
+   { 14484, 0x00008CDE }, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */
+   { 14516, 0x00008219 }, /* GL_FRAMEBUFFER_UNDEFINED */
+   { 14541, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED */
+   { 14568, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED_EXT */
+   { 14599, 0x00008CDD }, /* GL_FRAMEBUFFER_UNSUPPORTED_OES */
+   { 14630, 0x00000404 }, /* GL_FRONT */
+   { 14639, 0x00000408 }, /* GL_FRONT_AND_BACK */
+   { 14657, 0x00000B46 }, /* GL_FRONT_FACE */
+   { 14671, 0x00000400 }, /* GL_FRONT_LEFT */
+   { 14685, 0x00000401 }, /* GL_FRONT_RIGHT */
+   { 14700, 0x00008006 }, /* GL_FUNC_ADD */
+   { 14712, 0x00008006 }, /* GL_FUNC_ADD_EXT */
+   { 14728, 0x00008006 }, /* GL_FUNC_ADD_OES */
+   { 14744, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT */
+   { 14769, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT_EXT */
+   { 14798, 0x0000800B }, /* GL_FUNC_REVERSE_SUBTRACT_OES */
+   { 14827, 0x0000800A }, /* GL_FUNC_SUBTRACT */
+   { 14844, 0x0000800A }, /* GL_FUNC_SUBTRACT_EXT */
+   { 14865, 0x0000800A }, /* GL_FUNC_SUBTRACT_OES */
+   { 14886, 0x00008191 }, /* GL_GENERATE_MIPMAP */
+   { 14905, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT */
+   { 14929, 0x00008192 }, /* GL_GENERATE_MIPMAP_HINT_SGIS */
+   { 14958, 0x00008191 }, /* GL_GENERATE_MIPMAP_SGIS */
+   { 14982, 0x00008917 }, /* GL_GEOMETRY_INPUT_TYPE */
+   { 15005, 0x00008DDB }, /* GL_GEOMETRY_INPUT_TYPE_ARB */
+   { 15032, 0x00008918 }, /* GL_GEOMETRY_OUTPUT_TYPE */
+   { 15056, 0x00008DDC }, /* GL_GEOMETRY_OUTPUT_TYPE_ARB */
+   { 15084, 0x00008DD9 }, /* GL_GEOMETRY_SHADER */
+   { 15103, 0x00008DD9 }, /* GL_GEOMETRY_SHADER_ARB */
+   { 15126, 0x00008916 }, /* GL_GEOMETRY_VERTICES_OUT */
+   { 15151, 0x00008DDA }, /* GL_GEOMETRY_VERTICES_OUT_ARB */
+   { 15180, 0x00000206 }, /* GL_GEQUAL */
+   { 15190, 0x00000204 }, /* GL_GREATER */
+   { 15201, 0x00001904 }, /* GL_GREEN */
+   { 15210, 0x00000D19 }, /* GL_GREEN_BIAS */
+   { 15224, 0x00000D53 }, /* GL_GREEN_BITS */
+   { 15238, 0x00008D95 }, /* GL_GREEN_INTEGER */
+   { 15255, 0x00008D95 }, /* GL_GREEN_INTEGER_EXT */
+   { 15276, 0x00000D18 }, /* GL_GREEN_SCALE */
+   { 15291, 0x0000140B }, /* GL_HALF_FLOAT */
+   { 15305, 0x00008D61 }, /* GL_HALF_FLOAT_OES */
+   { 15323, 0x00008DF2 }, /* GL_HIGH_FLOAT */
+   { 15337, 0x00008DF5 }, /* GL_HIGH_INT */
+   { 15349, 0x00008000 }, /* GL_HINT_BIT */
+   { 15361, 0x00008024 }, /* GL_HISTOGRAM */
+   { 15374, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE */
+   { 15398, 0x0000802B }, /* GL_HISTOGRAM_ALPHA_SIZE_EXT */
+   { 15426, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE */
+   { 15449, 0x0000802A }, /* GL_HISTOGRAM_BLUE_SIZE_EXT */
+   { 15476, 0x00008024 }, /* GL_HISTOGRAM_EXT */
+   { 15493, 0x00008027 }, /* GL_HISTOGRAM_FORMAT */
+   { 15513, 0x00008027 }, /* GL_HISTOGRAM_FORMAT_EXT */
+   { 15537, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE */
+   { 15561, 0x00008029 }, /* GL_HISTOGRAM_GREEN_SIZE_EXT */
+   { 15589, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE */
+   { 15617, 0x0000802C }, /* GL_HISTOGRAM_LUMINANCE_SIZE_EXT */
+   { 15649, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE */
+   { 15671, 0x00008028 }, /* GL_HISTOGRAM_RED_SIZE_EXT */
+   { 15697, 0x0000802D }, /* GL_HISTOGRAM_SINK */
+   { 15715, 0x0000802D }, /* GL_HISTOGRAM_SINK_EXT */
+   { 15737, 0x00008026 }, /* GL_HISTOGRAM_WIDTH */
+   { 15756, 0x00008026 }, /* GL_HISTOGRAM_WIDTH_EXT */
+   { 15779, 0x0000862A }, /* GL_IDENTITY_NV */
+   { 15794, 0x00008150 }, /* GL_IGNORE_BORDER_HP */
+   { 15814, 0x00008B9B }, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT */
+   { 15850, 0x00008B9B }, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES */
+   { 15890, 0x00008B9A }, /* GL_IMPLEMENTATION_COLOR_READ_TYPE */
+   { 15924, 0x00008B9A }, /* GL_IMPLEMENTATION_COLOR_READ_TYPE_OES */
+   { 15962, 0x00001E02 }, /* GL_INCR */
+   { 15970, 0x00008507 }, /* GL_INCR_WRAP */
+   { 15983, 0x00008507 }, /* GL_INCR_WRAP_EXT */
+   { 16000, 0x00008222 }, /* GL_INDEX */
+   { 16009, 0x00008077 }, /* GL_INDEX_ARRAY */
+   { 16024, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING */
+   { 16054, 0x00008899 }, /* GL_INDEX_ARRAY_BUFFER_BINDING_ARB */
+   { 16088, 0x00008091 }, /* GL_INDEX_ARRAY_POINTER */
+   { 16111, 0x00008086 }, /* GL_INDEX_ARRAY_STRIDE */
+   { 16133, 0x00008085 }, /* GL_INDEX_ARRAY_TYPE */
+   { 16153, 0x00000D51 }, /* GL_INDEX_BITS */
+   { 16167, 0x00000C20 }, /* GL_INDEX_CLEAR_VALUE */
+   { 16188, 0x00000BF1 }, /* GL_INDEX_LOGIC_OP */
+   { 16206, 0x00000C30 }, /* GL_INDEX_MODE */
+   { 16220, 0x00000D13 }, /* GL_INDEX_OFFSET */
+   { 16236, 0x00000D12 }, /* GL_INDEX_SHIFT */
+   { 16251, 0x00000C21 }, /* GL_INDEX_WRITEMASK */
+   { 16270, 0x00008B84 }, /* GL_INFO_LOG_LENGTH */
+   { 16289, 0x00001404 }, /* GL_INT */
+   { 16296, 0x00008049 }, /* GL_INTENSITY */
+   { 16309, 0x0000804C }, /* GL_INTENSITY12 */
+   { 16324, 0x0000804C }, /* GL_INTENSITY12_EXT */
+   { 16343, 0x0000804D }, /* GL_INTENSITY16 */
+   { 16358, 0x00008D8B }, /* GL_INTENSITY16I_EXT */
+   { 16378, 0x00008D79 }, /* GL_INTENSITY16UI_EXT */
+   { 16399, 0x0000804D }, /* GL_INTENSITY16_EXT */
+   { 16418, 0x00008D85 }, /* GL_INTENSITY32I_EXT */
+   { 16438, 0x00008D73 }, /* GL_INTENSITY32UI_EXT */
+   { 16459, 0x0000804A }, /* GL_INTENSITY4 */
+   { 16473, 0x0000804A }, /* GL_INTENSITY4_EXT */
+   { 16491, 0x0000804B }, /* GL_INTENSITY8 */
+   { 16505, 0x00008D91 }, /* GL_INTENSITY8I_EXT */
+   { 16524, 0x00008D7F }, /* GL_INTENSITY8UI_EXT */
+   { 16544, 0x0000804B }, /* GL_INTENSITY8_EXT */
+   { 16562, 0x00008049 }, /* GL_INTENSITY_EXT */
+   { 16579, 0x00008C8C }, /* GL_INTERLEAVED_ATTRIBS */
+   { 16602, 0x00008C8C }, /* GL_INTERLEAVED_ATTRIBS_EXT */
+   { 16629, 0x00008575 }, /* GL_INTERPOLATE */
+   { 16644, 0x00008575 }, /* GL_INTERPOLATE_ARB */
+   { 16663, 0x00008575 }, /* GL_INTERPOLATE_EXT */
+   { 16682, 0x00008DF7 }, /* GL_INT_10_10_10_2_OES */
+   { 16704, 0x00008DC9 }, /* GL_INT_SAMPLER_1D */
+   { 16722, 0x00008DCE }, /* GL_INT_SAMPLER_1D_ARRAY */
+   { 16746, 0x00008DCE }, /* GL_INT_SAMPLER_1D_ARRAY_EXT */
+   { 16774, 0x00008DC9 }, /* GL_INT_SAMPLER_1D_EXT */
+   { 16796, 0x00008DCA }, /* GL_INT_SAMPLER_2D */
+   { 16814, 0x00008DCF }, /* GL_INT_SAMPLER_2D_ARRAY */
+   { 16838, 0x00008DCF }, /* GL_INT_SAMPLER_2D_ARRAY_EXT */
+   { 16866, 0x00008DCA }, /* GL_INT_SAMPLER_2D_EXT */
+   { 16888, 0x00008DCD }, /* GL_INT_SAMPLER_2D_RECT */
+   { 16911, 0x00008DCD }, /* GL_INT_SAMPLER_2D_RECT_EXT */
+   { 16938, 0x00008DCB }, /* GL_INT_SAMPLER_3D */
+   { 16956, 0x00008DCB }, /* GL_INT_SAMPLER_3D_EXT */
+   { 16978, 0x00008DD0 }, /* GL_INT_SAMPLER_BUFFER */
+   { 17000, 0x00008DD0 }, /* GL_INT_SAMPLER_BUFFER_EXT */
+   { 17026, 0x00008DCC }, /* GL_INT_SAMPLER_CUBE */
+   { 17046, 0x00008DCC }, /* GL_INT_SAMPLER_CUBE_EXT */
+   { 17070, 0x00008B53 }, /* GL_INT_VEC2 */
+   { 17082, 0x00008B53 }, /* GL_INT_VEC2_ARB */
+   { 17098, 0x00008B54 }, /* GL_INT_VEC3 */
+   { 17110, 0x00008B54 }, /* GL_INT_VEC3_ARB */
+   { 17126, 0x00008B55 }, /* GL_INT_VEC4 */
+   { 17138, 0x00008B55 }, /* GL_INT_VEC4_ARB */
+   { 17154, 0x00000500 }, /* GL_INVALID_ENUM */
+   { 17170, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION */
+   { 17203, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION_EXT */
+   { 17240, 0x00000506 }, /* GL_INVALID_FRAMEBUFFER_OPERATION_OES */
+   { 17277, 0x00000502 }, /* GL_INVALID_OPERATION */
+   { 17298, 0x00000501 }, /* GL_INVALID_VALUE */
+   { 17315, 0x0000862B }, /* GL_INVERSE_NV */
+   { 17329, 0x0000862D }, /* GL_INVERSE_TRANSPOSE_NV */
+   { 17353, 0x0000150A }, /* GL_INVERT */
+   { 17363, 0x00001E00 }, /* GL_KEEP */
+   { 17371, 0x00008E4E }, /* GL_LAST_VERTEX_CONVENTION */
+   { 17397, 0x00008E4E }, /* GL_LAST_VERTEX_CONVENTION_EXT */
+   { 17427, 0x00000406 }, /* GL_LEFT */
+   { 17435, 0x00000203 }, /* GL_LEQUAL */
+   { 17445, 0x00000201 }, /* GL_LESS */
+   { 17453, 0x00004000 }, /* GL_LIGHT0 */
+   { 17463, 0x00004001 }, /* GL_LIGHT1 */
+   { 17473, 0x00004002 }, /* GL_LIGHT2 */
+   { 17483, 0x00004003 }, /* GL_LIGHT3 */
+   { 17493, 0x00004004 }, /* GL_LIGHT4 */
+   { 17503, 0x00004005 }, /* GL_LIGHT5 */
+   { 17513, 0x00004006 }, /* GL_LIGHT6 */
+   { 17523, 0x00004007 }, /* GL_LIGHT7 */
+   { 17533, 0x00000B50 }, /* GL_LIGHTING */
+   { 17545, 0x00000040 }, /* GL_LIGHTING_BIT */
+   { 17561, 0x00000B53 }, /* GL_LIGHT_MODEL_AMBIENT */
+   { 17584, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL */
+   { 17613, 0x000081F8 }, /* GL_LIGHT_MODEL_COLOR_CONTROL_EXT */
+   { 17646, 0x00000B51 }, /* GL_LIGHT_MODEL_LOCAL_VIEWER */
+   { 17674, 0x00000B52 }, /* GL_LIGHT_MODEL_TWO_SIDE */
+   { 17698, 0x00001B01 }, /* GL_LINE */
+   { 17706, 0x00002601 }, /* GL_LINEAR */
+   { 17716, 0x00001208 }, /* GL_LINEAR_ATTENUATION */
+   { 17738, 0x00008170 }, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */
+   { 17768, 0x0000844F }, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */
+   { 17799, 0x00002703 }, /* GL_LINEAR_MIPMAP_LINEAR */
+   { 17823, 0x00002701 }, /* GL_LINEAR_MIPMAP_NEAREST */
+   { 17848, 0x00000001 }, /* GL_LINES */
+   { 17857, 0x0000000A }, /* GL_LINES_ADJACENCY */
+   { 17876, 0x0000000A }, /* GL_LINES_ADJACENCY_ARB */
+   { 17899, 0x00000004 }, /* GL_LINE_BIT */
+   { 17911, 0x00000002 }, /* GL_LINE_LOOP */
+   { 17924, 0x00000707 }, /* GL_LINE_RESET_TOKEN */
+   { 17944, 0x00000B20 }, /* GL_LINE_SMOOTH */
+   { 17959, 0x00000C52 }, /* GL_LINE_SMOOTH_HINT */
+   { 17979, 0x00000B24 }, /* GL_LINE_STIPPLE */
+   { 17995, 0x00000B25 }, /* GL_LINE_STIPPLE_PATTERN */
+   { 18019, 0x00000B26 }, /* GL_LINE_STIPPLE_REPEAT */
+   { 18042, 0x00000003 }, /* GL_LINE_STRIP */
+   { 18056, 0x0000000B }, /* GL_LINE_STRIP_ADJACENCY */
+   { 18080, 0x0000000B }, /* GL_LINE_STRIP_ADJACENCY_ARB */
+   { 18108, 0x00000702 }, /* GL_LINE_TOKEN */
+   { 18122, 0x00000B21 }, /* GL_LINE_WIDTH */
+   { 18136, 0x00000B23 }, /* GL_LINE_WIDTH_GRANULARITY */
+   { 18162, 0x00000B22 }, /* GL_LINE_WIDTH_RANGE */
+   { 18182, 0x00008B82 }, /* GL_LINK_STATUS */
+   { 18197, 0x00000B32 }, /* GL_LIST_BASE */
+   { 18210, 0x00020000 }, /* GL_LIST_BIT */
+   { 18222, 0x00000B33 }, /* GL_LIST_INDEX */
+   { 18236, 0x00000B30 }, /* GL_LIST_MODE */
+   { 18249, 0x00000101 }, /* GL_LOAD */
+   { 18257, 0x00000BF1 }, /* GL_LOGIC_OP */
+   { 18269, 0x00000BF0 }, /* GL_LOGIC_OP_MODE */
+   { 18286, 0x00008CA1 }, /* GL_LOWER_LEFT */
+   { 18300, 0x00008DF0 }, /* GL_LOW_FLOAT */
+   { 18313, 0x00008DF3 }, /* GL_LOW_INT */
+   { 18324, 0x00001909 }, /* GL_LUMINANCE */
+   { 18337, 0x00008041 }, /* GL_LUMINANCE12 */
+   { 18352, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12 */
+   { 18375, 0x00008047 }, /* GL_LUMINANCE12_ALPHA12_EXT */
+   { 18402, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4 */
+   { 18424, 0x00008046 }, /* GL_LUMINANCE12_ALPHA4_EXT */
+   { 18450, 0x00008041 }, /* GL_LUMINANCE12_EXT */
+   { 18469, 0x00008042 }, /* GL_LUMINANCE16 */
+   { 18484, 0x00008D8C }, /* GL_LUMINANCE16I_EXT */
+   { 18504, 0x00008D7A }, /* GL_LUMINANCE16UI_EXT */
+   { 18525, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16 */
+   { 18548, 0x00008048 }, /* GL_LUMINANCE16_ALPHA16_EXT */
+   { 18575, 0x00008042 }, /* GL_LUMINANCE16_EXT */
+   { 18594, 0x00008D86 }, /* GL_LUMINANCE32I_EXT */
+   { 18614, 0x00008D74 }, /* GL_LUMINANCE32UI_EXT */
+   { 18635, 0x0000803F }, /* GL_LUMINANCE4 */
+   { 18649, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4 */
+   { 18670, 0x00008043 }, /* GL_LUMINANCE4_ALPHA4_EXT */
+   { 18695, 0x0000803F }, /* GL_LUMINANCE4_EXT */
+   { 18713, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2 */
+   { 18734, 0x00008044 }, /* GL_LUMINANCE6_ALPHA2_EXT */
+   { 18759, 0x00008040 }, /* GL_LUMINANCE8 */
+   { 18773, 0x00008D92 }, /* GL_LUMINANCE8I_EXT */
+   { 18792, 0x00008D80 }, /* GL_LUMINANCE8UI_EXT */
+   { 18812, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8 */
+   { 18833, 0x00008045 }, /* GL_LUMINANCE8_ALPHA8_EXT */
+   { 18858, 0x00008040 }, /* GL_LUMINANCE8_EXT */
+   { 18876, 0x0000190A }, /* GL_LUMINANCE_ALPHA */
+   { 18895, 0x00008D8D }, /* GL_LUMINANCE_ALPHA16I_EXT */
+   { 18921, 0x00008D7B }, /* GL_LUMINANCE_ALPHA16UI_EXT */
+   { 18948, 0x00008D87 }, /* GL_LUMINANCE_ALPHA32I_EXT */
+   { 18974, 0x00008D75 }, /* GL_LUMINANCE_ALPHA32UI_EXT */
+   { 19001, 0x00008D93 }, /* GL_LUMINANCE_ALPHA8I_EXT */
+   { 19026, 0x00008D81 }, /* GL_LUMINANCE_ALPHA8UI_EXT */
+   { 19052, 0x00008D9D }, /* GL_LUMINANCE_ALPHA_INTEGER_EXT */
+   { 19083, 0x00008D9C }, /* GL_LUMINANCE_INTEGER_EXT */
+   { 19108, 0x0000821B }, /* GL_MAJOR_VERSION */
+   { 19125, 0x00000D90 }, /* GL_MAP1_COLOR_4 */
+   { 19141, 0x00000DD0 }, /* GL_MAP1_GRID_DOMAIN */
+   { 19161, 0x00000DD1 }, /* GL_MAP1_GRID_SEGMENTS */
+   { 19183, 0x00000D91 }, /* GL_MAP1_INDEX */
+   { 19197, 0x00000D92 }, /* GL_MAP1_NORMAL */
+   { 19212, 0x00000D93 }, /* GL_MAP1_TEXTURE_COORD_1 */
+   { 19236, 0x00000D94 }, /* GL_MAP1_TEXTURE_COORD_2 */
+   { 19260, 0x00000D95 }, /* GL_MAP1_TEXTURE_COORD_3 */
+   { 19284, 0x00000D96 }, /* GL_MAP1_TEXTURE_COORD_4 */
+   { 19308, 0x00000D97 }, /* GL_MAP1_VERTEX_3 */
+   { 19325, 0x00000D98 }, /* GL_MAP1_VERTEX_4 */
+   { 19342, 0x00008660 }, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */
+   { 19370, 0x0000866A }, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */
+   { 19399, 0x0000866B }, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */
+   { 19428, 0x0000866C }, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */
+   { 19457, 0x0000866D }, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */
+   { 19486, 0x0000866E }, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */
+   { 19515, 0x0000866F }, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */
+   { 19544, 0x00008661 }, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */
+   { 19572, 0x00008662 }, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */
+   { 19600, 0x00008663 }, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */
+   { 19628, 0x00008664 }, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */
+   { 19656, 0x00008665 }, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */
+   { 19684, 0x00008666 }, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */
+   { 19712, 0x00008667 }, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */
+   { 19740, 0x00008668 }, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */
+   { 19768, 0x00008669 }, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */
+   { 19796, 0x00000DB0 }, /* GL_MAP2_COLOR_4 */
+   { 19812, 0x00000DD2 }, /* GL_MAP2_GRID_DOMAIN */
+   { 19832, 0x00000DD3 }, /* GL_MAP2_GRID_SEGMENTS */
+   { 19854, 0x00000DB1 }, /* GL_MAP2_INDEX */
+   { 19868, 0x00000DB2 }, /* GL_MAP2_NORMAL */
+   { 19883, 0x00000DB3 }, /* GL_MAP2_TEXTURE_COORD_1 */
+   { 19907, 0x00000DB4 }, /* GL_MAP2_TEXTURE_COORD_2 */
+   { 19931, 0x00000DB5 }, /* GL_MAP2_TEXTURE_COORD_3 */
+   { 19955, 0x00000DB6 }, /* GL_MAP2_TEXTURE_COORD_4 */
+   { 19979, 0x00000DB7 }, /* GL_MAP2_VERTEX_3 */
+   { 19996, 0x00000DB8 }, /* GL_MAP2_VERTEX_4 */
+   { 20013, 0x00008670 }, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */
+   { 20041, 0x0000867A }, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */
+   { 20070, 0x0000867B }, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */
+   { 20099, 0x0000867C }, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */
+   { 20128, 0x0000867D }, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */
+   { 20157, 0x0000867E }, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */
+   { 20186, 0x0000867F }, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */
+   { 20215, 0x00008671 }, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */
+   { 20243, 0x00008672 }, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */
+   { 20271, 0x00008673 }, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */
+   { 20299, 0x00008674 }, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */
+   { 20327, 0x00008675 }, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */
+   { 20355, 0x00008676 }, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */
+   { 20383, 0x00008677 }, /* GL_MAP2_VERTEX_ATTRIB7_4_NV */
+   { 20411, 0x00008678 }, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */
+   { 20439, 0x00008679 }, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */
+   { 20467, 0x00000D10 }, /* GL_MAP_COLOR */
+   { 20480, 0x00000010 }, /* GL_MAP_FLUSH_EXPLICIT_BIT */
+   { 20506, 0x00000008 }, /* GL_MAP_INVALIDATE_BUFFER_BIT */
+   { 20535, 0x00000004 }, /* GL_MAP_INVALIDATE_RANGE_BIT */
+   { 20563, 0x00000001 }, /* GL_MAP_READ_BIT */
+   { 20579, 0x00000D11 }, /* GL_MAP_STENCIL */
+   { 20594, 0x00000020 }, /* GL_MAP_UNSYNCHRONIZED_BIT */
+   { 20620, 0x00000002 }, /* GL_MAP_WRITE_BIT */
+   { 20637, 0x000088C0 }, /* GL_MATRIX0_ARB */
+   { 20652, 0x00008630 }, /* GL_MATRIX0_NV */
+   { 20666, 0x000088CA }, /* GL_MATRIX10_ARB */
+   { 20682, 0x000088CB }, /* GL_MATRIX11_ARB */
+   { 20698, 0x000088CC }, /* GL_MATRIX12_ARB */
+   { 20714, 0x000088CD }, /* GL_MATRIX13_ARB */
+   { 20730, 0x000088CE }, /* GL_MATRIX14_ARB */
+   { 20746, 0x000088CF }, /* GL_MATRIX15_ARB */
+   { 20762, 0x000088D0 }, /* GL_MATRIX16_ARB */
+   { 20778, 0x000088D1 }, /* GL_MATRIX17_ARB */
+   { 20794, 0x000088D2 }, /* GL_MATRIX18_ARB */
+   { 20810, 0x000088D3 }, /* GL_MATRIX19_ARB */
+   { 20826, 0x000088C1 }, /* GL_MATRIX1_ARB */
+   { 20841, 0x00008631 }, /* GL_MATRIX1_NV */
+   { 20855, 0x000088D4 }, /* GL_MATRIX20_ARB */
+   { 20871, 0x000088D5 }, /* GL_MATRIX21_ARB */
+   { 20887, 0x000088D6 }, /* GL_MATRIX22_ARB */
+   { 20903, 0x000088D7 }, /* GL_MATRIX23_ARB */
+   { 20919, 0x000088D8 }, /* GL_MATRIX24_ARB */
+   { 20935, 0x000088D9 }, /* GL_MATRIX25_ARB */
+   { 20951, 0x000088DA }, /* GL_MATRIX26_ARB */
+   { 20967, 0x000088DB }, /* GL_MATRIX27_ARB */
+   { 20983, 0x000088DC }, /* GL_MATRIX28_ARB */
+   { 20999, 0x000088DD }, /* GL_MATRIX29_ARB */
+   { 21015, 0x000088C2 }, /* GL_MATRIX2_ARB */
+   { 21030, 0x00008632 }, /* GL_MATRIX2_NV */
+   { 21044, 0x000088DE }, /* GL_MATRIX30_ARB */
+   { 21060, 0x000088DF }, /* GL_MATRIX31_ARB */
+   { 21076, 0x000088C3 }, /* GL_MATRIX3_ARB */
+   { 21091, 0x00008633 }, /* GL_MATRIX3_NV */
+   { 21105, 0x000088C4 }, /* GL_MATRIX4_ARB */
+   { 21120, 0x00008634 }, /* GL_MATRIX4_NV */
+   { 21134, 0x000088C5 }, /* GL_MATRIX5_ARB */
+   { 21149, 0x00008635 }, /* GL_MATRIX5_NV */
+   { 21163, 0x000088C6 }, /* GL_MATRIX6_ARB */
+   { 21178, 0x00008636 }, /* GL_MATRIX6_NV */
+   { 21192, 0x000088C7 }, /* GL_MATRIX7_ARB */
+   { 21207, 0x00008637 }, /* GL_MATRIX7_NV */
+   { 21221, 0x000088C8 }, /* GL_MATRIX8_ARB */
+   { 21236, 0x000088C9 }, /* GL_MATRIX9_ARB */
+   { 21251, 0x00008844 }, /* GL_MATRIX_INDEX_ARRAY_ARB */
+   { 21277, 0x00008B9E }, /* GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES */
+   { 21318, 0x00008844 }, /* GL_MATRIX_INDEX_ARRAY_OES */
+   { 21344, 0x00008849 }, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */
+   { 21378, 0x00008849 }, /* GL_MATRIX_INDEX_ARRAY_POINTER_OES */
+   { 21412, 0x00008846 }, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */
+   { 21443, 0x00008846 }, /* GL_MATRIX_INDEX_ARRAY_SIZE_OES */
+   { 21474, 0x00008848 }, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */
+   { 21507, 0x00008848 }, /* GL_MATRIX_INDEX_ARRAY_STRIDE_OES */
+   { 21540, 0x00008847 }, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */
+   { 21571, 0x00008847 }, /* GL_MATRIX_INDEX_ARRAY_TYPE_OES */
+   { 21602, 0x00000BA0 }, /* GL_MATRIX_MODE */
+   { 21617, 0x00008840 }, /* GL_MATRIX_PALETTE_ARB */
+   { 21639, 0x00008840 }, /* GL_MATRIX_PALETTE_OES */
+   { 21661, 0x00008008 }, /* GL_MAX */
+   { 21668, 0x00008073 }, /* GL_MAX_3D_TEXTURE_SIZE */
+   { 21691, 0x00008073 }, /* GL_MAX_3D_TEXTURE_SIZE_OES */
+   { 21718, 0x000088FF }, /* GL_MAX_ARRAY_TEXTURE_LAYERS */
+   { 21746, 0x000088FF }, /* GL_MAX_ARRAY_TEXTURE_LAYERS_EXT */
+   { 21778, 0x00000D35 }, /* GL_MAX_ATTRIB_STACK_DEPTH */
+   { 21804, 0x00000D3B }, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */
+   { 21837, 0x00008177 }, /* GL_MAX_CLIPMAP_DEPTH_SGIX */
+   { 21863, 0x00008178 }, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */
+   { 21897, 0x00000D32 }, /* GL_MAX_CLIP_DISTANCES */
+   { 21919, 0x00000D32 }, /* GL_MAX_CLIP_PLANES */
+   { 21938, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS */
+   { 21963, 0x00008CDF }, /* GL_MAX_COLOR_ATTACHMENTS_EXT */
+   { 21992, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */
+   { 22024, 0x000080B3 }, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI */
+   { 22060, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */
+   { 22096, 0x00008B4D }, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB */
+   { 22136, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT */
+   { 22162, 0x0000801B }, /* GL_MAX_CONVOLUTION_HEIGHT_EXT */
+   { 22192, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH */
+   { 22217, 0x0000801A }, /* GL_MAX_CONVOLUTION_WIDTH_EXT */
+   { 22246, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */
+   { 22275, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB */
+   { 22308, 0x0000851C }, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES */
+   { 22341, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS */
+   { 22361, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ARB */
+   { 22385, 0x00008824 }, /* GL_MAX_DRAW_BUFFERS_ATI */
+   { 22409, 0x000080E9 }, /* GL_MAX_ELEMENTS_INDICES */
+   { 22433, 0x000080E8 }, /* GL_MAX_ELEMENTS_VERTICES */
+   { 22458, 0x00000D30 }, /* GL_MAX_EVAL_ORDER */
+   { 22476, 0x00008008 }, /* GL_MAX_EXT */
+   { 22487, 0x00009125 }, /* GL_MAX_FRAGMENT_INPUT_COMPONENTS */
+   { 22520, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */
+   { 22555, 0x00008B49 }, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB */
+   { 22594, 0x00008DFD }, /* GL_MAX_FRAGMENT_UNIFORM_VECTORS */
+   { 22626, 0x00009123 }, /* GL_MAX_GEOMETRY_INPUT_COMPONENTS */
+   { 22659, 0x00009124 }, /* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS */
+   { 22693, 0x00008DE0 }, /* GL_MAX_GEOMETRY_OUTPUT_VERTICES */
+   { 22725, 0x00008DE0 }, /* GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB */
+   { 22761, 0x00008C29 }, /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS */
+   { 22797, 0x00008C29 }, /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB */
+   { 22837, 0x00008DE1 }, /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS */
+   { 22877, 0x00008DE1 }, /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB */
+   { 22921, 0x00008DDF }, /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS */
+   { 22956, 0x00008DDF }, /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB */
+   { 22995, 0x00008DDD }, /* GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB */
+   { 23034, 0x00000D31 }, /* GL_MAX_LIGHTS */
+   { 23048, 0x00000B31 }, /* GL_MAX_LIST_NESTING */
+   { 23068, 0x00008841 }, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */
+   { 23106, 0x00000D36 }, /* GL_MAX_MODELVIEW_STACK_DEPTH */
+   { 23135, 0x00000D37 }, /* GL_MAX_NAME_STACK_DEPTH */
+   { 23159, 0x00008842 }, /* GL_MAX_PALETTE_MATRICES_ARB */
+   { 23187, 0x00008842 }, /* GL_MAX_PALETTE_MATRICES_OES */
+   { 23215, 0x00000D34 }, /* GL_MAX_PIXEL_MAP_TABLE */
+   { 23238, 0x000088B1 }, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */
+   { 23275, 0x0000880B }, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */
+   { 23311, 0x000088AD }, /* GL_MAX_PROGRAM_ATTRIBS_ARB */
+   { 23338, 0x000088F5 }, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */
+   { 23367, 0x000088B5 }, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */
+   { 23401, 0x000088F4 }, /* GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */
+   { 23437, 0x000088F6 }, /* GL_MAX_PROGRAM_IF_DEPTH_NV */
+   { 23464, 0x000088A1 }, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */
+   { 23496, 0x000088B4 }, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */
+   { 23532, 0x000088F8 }, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */
+   { 23561, 0x000088F7 }, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */
+   { 23590, 0x0000862F }, /* GL_MAX_PROGRAM_MATRICES_ARB */
+   { 23618, 0x0000862E }, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */
+   { 23656, 0x000088B3 }, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
+   { 23700, 0x0000880E }, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
+   { 23743, 0x000088AF }, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */
+   { 23777, 0x000088A3 }, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
+   { 23816, 0x000088AB }, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */
+   { 23853, 0x000088A7 }, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */
+   { 23891, 0x00008810 }, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
+   { 23934, 0x0000880F }, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
+   { 23977, 0x000088A9 }, /* GL_MAX_PROGRAM_PARAMETERS_ARB */
+   { 24007, 0x000088A5 }, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */
+   { 24038, 0x00008905 }, /* GL_MAX_PROGRAM_TEXEL_OFFSET */
+   { 24066, 0x00008905 }, /* GL_MAX_PROGRAM_TEXEL_OFFSET_EXT */
+   { 24098, 0x0000880D }, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */
+   { 24134, 0x0000880C }, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */
+   { 24170, 0x00000D38 }, /* GL_MAX_PROJECTION_STACK_DEPTH */
+   { 24200, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE */
+   { 24230, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB */
+   { 24264, 0x000084F8 }, /* GL_MAX_RECTANGLE_TEXTURE_SIZE_NV */
+   { 24297, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE */
+   { 24322, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE_EXT */
+   { 24351, 0x000084E8 }, /* GL_MAX_RENDERBUFFER_SIZE_OES */
+   { 24380, 0x00008D57 }, /* GL_MAX_SAMPLES */
+   { 24395, 0x00008D57 }, /* GL_MAX_SAMPLES_EXT */
+   { 24414, 0x00009111 }, /* GL_MAX_SERVER_WAIT_TIMEOUT */
+   { 24441, 0x00008504 }, /* GL_MAX_SHININESS_NV */
+   { 24461, 0x00008505 }, /* GL_MAX_SPOT_EXPONENT_NV */
+   { 24485, 0x00008C2B }, /* GL_MAX_TEXTURE_BUFFER_SIZE */
+   { 24512, 0x00008C2B }, /* GL_MAX_TEXTURE_BUFFER_SIZE_ARB */
+   { 24543, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS */
+   { 24565, 0x00008871 }, /* GL_MAX_TEXTURE_COORDS_ARB */
+   { 24591, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS */
+   { 24618, 0x00008872 }, /* GL_MAX_TEXTURE_IMAGE_UNITS_ARB */
+   { 24649, 0x000084FD }, /* GL_MAX_TEXTURE_LOD_BIAS */
+   { 24673, 0x000084FD }, /* GL_MAX_TEXTURE_LOD_BIAS_EXT */
+   { 24701, 0x000084FF }, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */
+   { 24735, 0x00000D33 }, /* GL_MAX_TEXTURE_SIZE */
+   { 24755, 0x00000D39 }, /* GL_MAX_TEXTURE_STACK_DEPTH */
+   { 24782, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS */
+   { 24803, 0x000084E2 }, /* GL_MAX_TEXTURE_UNITS_ARB */
+   { 24828, 0x0000862F }, /* GL_MAX_TRACK_MATRICES_NV */
+   { 24853, 0x0000862E }, /* GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV */
+   { 24888, 0x00008C8A }, /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS */
+   { 24937, 0x00008C8A }, /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT */
+   { 24990, 0x00008C8B }, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS */
+   { 25033, 0x00008C8B }, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT */
+   { 25080, 0x00008C80 }, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS */
+   { 25126, 0x00008C80 }, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT */
+   { 25176, 0x00008B4B }, /* GL_MAX_VARYING_COMPONENTS */
+   { 25202, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS */
+   { 25224, 0x00008B4B }, /* GL_MAX_VARYING_FLOATS_ARB */
+   { 25250, 0x00008DFC }, /* GL_MAX_VARYING_VECTORS */
+   { 25273, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS */
+   { 25295, 0x00008869 }, /* GL_MAX_VERTEX_ATTRIBS_ARB */
+   { 25321, 0x00009122 }, /* GL_MAX_VERTEX_OUTPUT_COMPONENTS */
+   { 25353, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */
+   { 25387, 0x00008B4C }, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */
+   { 25425, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */
+   { 25458, 0x00008B4A }, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB */
+   { 25495, 0x00008DFB }, /* GL_MAX_VERTEX_UNIFORM_VECTORS */
+   { 25525, 0x000086A4 }, /* GL_MAX_VERTEX_UNITS_ARB */
+   { 25549, 0x000086A4 }, /* GL_MAX_VERTEX_UNITS_OES */
+   { 25573, 0x00008DDE }, /* GL_MAX_VERTEX_VARYING_COMPONENTS_ARB */
+   { 25610, 0x00000D3A }, /* GL_MAX_VIEWPORT_DIMS */
+   { 25631, 0x00008DF1 }, /* GL_MEDIUM_FLOAT */
+   { 25647, 0x00008DF4 }, /* GL_MEDIUM_INT */
+   { 25661, 0x00008007 }, /* GL_MIN */
+   { 25668, 0x0000802E }, /* GL_MINMAX */
+   { 25678, 0x0000802E }, /* GL_MINMAX_EXT */
+   { 25692, 0x0000802F }, /* GL_MINMAX_FORMAT */
+   { 25709, 0x0000802F }, /* GL_MINMAX_FORMAT_EXT */
+   { 25730, 0x00008030 }, /* GL_MINMAX_SINK */
+   { 25745, 0x00008030 }, /* GL_MINMAX_SINK_EXT */
+   { 25764, 0x0000821C }, /* GL_MINOR_VERSION */
+   { 25781, 0x00008007 }, /* GL_MIN_EXT */
+   { 25792, 0x00008904 }, /* GL_MIN_PROGRAM_TEXEL_OFFSET */
+   { 25820, 0x00008904 }, /* GL_MIN_PROGRAM_TEXEL_OFFSET_EXT */
+   { 25852, 0x00008370 }, /* GL_MIRRORED_REPEAT */
+   { 25871, 0x00008370 }, /* GL_MIRRORED_REPEAT_ARB */
+   { 25894, 0x00008370 }, /* GL_MIRRORED_REPEAT_IBM */
+   { 25917, 0x00008742 }, /* GL_MIRROR_CLAMP_ATI */
+   { 25937, 0x00008742 }, /* GL_MIRROR_CLAMP_EXT */
+   { 25957, 0x00008912 }, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */
+   { 25987, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_ATI */
+   { 26015, 0x00008743 }, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */
+   { 26043, 0x00001700 }, /* GL_MODELVIEW */
+   { 26056, 0x00001700 }, /* GL_MODELVIEW0_ARB */
+   { 26074, 0x0000872A }, /* GL_MODELVIEW10_ARB */
+   { 26093, 0x0000872B }, /* GL_MODELVIEW11_ARB */
+   { 26112, 0x0000872C }, /* GL_MODELVIEW12_ARB */
+   { 26131, 0x0000872D }, /* GL_MODELVIEW13_ARB */
+   { 26150, 0x0000872E }, /* GL_MODELVIEW14_ARB */
+   { 26169, 0x0000872F }, /* GL_MODELVIEW15_ARB */
+   { 26188, 0x00008730 }, /* GL_MODELVIEW16_ARB */
+   { 26207, 0x00008731 }, /* GL_MODELVIEW17_ARB */
+   { 26226, 0x00008732 }, /* GL_MODELVIEW18_ARB */
+   { 26245, 0x00008733 }, /* GL_MODELVIEW19_ARB */
+   { 26264, 0x0000850A }, /* GL_MODELVIEW1_ARB */
+   { 26282, 0x00008734 }, /* GL_MODELVIEW20_ARB */
+   { 26301, 0x00008735 }, /* GL_MODELVIEW21_ARB */
+   { 26320, 0x00008736 }, /* GL_MODELVIEW22_ARB */
+   { 26339, 0x00008737 }, /* GL_MODELVIEW23_ARB */
+   { 26358, 0x00008738 }, /* GL_MODELVIEW24_ARB */
+   { 26377, 0x00008739 }, /* GL_MODELVIEW25_ARB */
+   { 26396, 0x0000873A }, /* GL_MODELVIEW26_ARB */
+   { 26415, 0x0000873B }, /* GL_MODELVIEW27_ARB */
+   { 26434, 0x0000873C }, /* GL_MODELVIEW28_ARB */
+   { 26453, 0x0000873D }, /* GL_MODELVIEW29_ARB */
+   { 26472, 0x00008722 }, /* GL_MODELVIEW2_ARB */
+   { 26490, 0x0000873E }, /* GL_MODELVIEW30_ARB */
+   { 26509, 0x0000873F }, /* GL_MODELVIEW31_ARB */
+   { 26528, 0x00008723 }, /* GL_MODELVIEW3_ARB */
+   { 26546, 0x00008724 }, /* GL_MODELVIEW4_ARB */
+   { 26564, 0x00008725 }, /* GL_MODELVIEW5_ARB */
+   { 26582, 0x00008726 }, /* GL_MODELVIEW6_ARB */
+   { 26600, 0x00008727 }, /* GL_MODELVIEW7_ARB */
+   { 26618, 0x00008728 }, /* GL_MODELVIEW8_ARB */
+   { 26636, 0x00008729 }, /* GL_MODELVIEW9_ARB */
+   { 26654, 0x00000BA6 }, /* GL_MODELVIEW_MATRIX */
+   { 26674, 0x0000898D }, /* GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES */
+   { 26716, 0x00008629 }, /* GL_MODELVIEW_PROJECTION_NV */
+   { 26743, 0x00000BA3 }, /* GL_MODELVIEW_STACK_DEPTH */
+   { 26768, 0x00002100 }, /* GL_MODULATE */
+   { 26780, 0x00008744 }, /* GL_MODULATE_ADD_ATI */
+   { 26800, 0x00008745 }, /* GL_MODULATE_SIGNED_ADD_ATI */
+   { 26827, 0x00008746 }, /* GL_MODULATE_SUBTRACT_ATI */
+   { 26852, 0x00000103 }, /* GL_MULT */
+   { 26860, 0x0000809D }, /* GL_MULTISAMPLE */
+   { 26875, 0x000086B2 }, /* GL_MULTISAMPLE_3DFX */
+   { 26895, 0x0000809D }, /* GL_MULTISAMPLE_ARB */
+   { 26914, 0x20000000 }, /* GL_MULTISAMPLE_BIT */
+   { 26933, 0x20000000 }, /* GL_MULTISAMPLE_BIT_3DFX */
+   { 26957, 0x20000000 }, /* GL_MULTISAMPLE_BIT_ARB */
+   { 26980, 0x00008534 }, /* GL_MULTISAMPLE_FILTER_HINT_NV */
+   { 27010, 0x00002A25 }, /* GL_N3F_V3F */
+   { 27021, 0x00000D70 }, /* GL_NAME_STACK_DEPTH */
+   { 27041, 0x0000150E }, /* GL_NAND */
+   { 27049, 0x00002600 }, /* GL_NEAREST */
+   { 27060, 0x0000844E }, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */
+   { 27091, 0x0000844D }, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */
+   { 27123, 0x00002702 }, /* GL_NEAREST_MIPMAP_LINEAR */
+   { 27148, 0x00002700 }, /* GL_NEAREST_MIPMAP_NEAREST */
+   { 27174, 0x00000200 }, /* GL_NEVER */
+   { 27183, 0x00001102 }, /* GL_NICEST */
+   { 27193, 0x00000000 }, /* GL_NONE */
+   { 27201, 0x00000000 }, /* GL_NONE_OES */
+   { 27213, 0x00001505 }, /* GL_NOOP */
+   { 27221, 0x00001508 }, /* GL_NOR */
+   { 27228, 0x00000BA1 }, /* GL_NORMALIZE */
+   { 27241, 0x00008075 }, /* GL_NORMAL_ARRAY */
+   { 27257, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING */
+   { 27288, 0x00008897 }, /* GL_NORMAL_ARRAY_BUFFER_BINDING_ARB */
+   { 27323, 0x0000808F }, /* GL_NORMAL_ARRAY_POINTER */
+   { 27347, 0x0000807F }, /* GL_NORMAL_ARRAY_STRIDE */
+   { 27370, 0x0000807E }, /* GL_NORMAL_ARRAY_TYPE */
+   { 27391, 0x00008511 }, /* GL_NORMAL_MAP */
+   { 27405, 0x00008511 }, /* GL_NORMAL_MAP_ARB */
+   { 27423, 0x00008511 }, /* GL_NORMAL_MAP_NV */
+   { 27440, 0x00008511 }, /* GL_NORMAL_MAP_OES */
+   { 27458, 0x00000205 }, /* GL_NOTEQUAL */
+   { 27470, 0x00000000 }, /* GL_NO_ERROR */
+   { 27482, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */
+   { 27516, 0x000086A2 }, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB */
+   { 27554, 0x0000821D }, /* GL_NUM_EXTENSIONS */
+   { 27572, 0x000087FE }, /* GL_NUM_PROGRAM_BINARY_FORMATS_OES */
+   { 27606, 0x00008DF9 }, /* GL_NUM_SHADER_BINARY_FORMATS */
+   { 27635, 0x00008B89 }, /* GL_OBJECT_ACTIVE_ATTRIBUTES_ARB */
+   { 27667, 0x00008B8A }, /* GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB */
+   { 27709, 0x00008B86 }, /* GL_OBJECT_ACTIVE_UNIFORMS_ARB */
+   { 27739, 0x00008B87 }, /* GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB */
+   { 27779, 0x00008B85 }, /* GL_OBJECT_ATTACHED_OBJECTS_ARB */
+   { 27810, 0x00008B81 }, /* GL_OBJECT_COMPILE_STATUS_ARB */
+   { 27839, 0x00008B80 }, /* GL_OBJECT_DELETE_STATUS_ARB */
+   { 27867, 0x00008B84 }, /* GL_OBJECT_INFO_LOG_LENGTH_ARB */
+   { 27897, 0x00002401 }, /* GL_OBJECT_LINEAR */
+   { 27914, 0x00008B82 }, /* GL_OBJECT_LINK_STATUS_ARB */
+   { 27940, 0x00002501 }, /* GL_OBJECT_PLANE */
+   { 27956, 0x00008B88 }, /* GL_OBJECT_SHADER_SOURCE_LENGTH_ARB */
+   { 27991, 0x00008B4F }, /* GL_OBJECT_SUBTYPE_ARB */
+   { 28013, 0x00009112 }, /* GL_OBJECT_TYPE */
+   { 28028, 0x00008B4E }, /* GL_OBJECT_TYPE_ARB */
+   { 28047, 0x00008B83 }, /* GL_OBJECT_VALIDATE_STATUS_ARB */
+   { 28077, 0x00008165 }, /* GL_OCCLUSION_TEST_HP */
+   { 28098, 0x00008166 }, /* GL_OCCLUSION_TEST_RESULT_HP */
+   { 28126, 0x00000001 }, /* GL_ONE */
+   { 28133, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA */
+   { 28161, 0x00008004 }, /* GL_ONE_MINUS_CONSTANT_ALPHA_EXT */
+   { 28193, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR */
+   { 28221, 0x00008002 }, /* GL_ONE_MINUS_CONSTANT_COLOR_EXT */
+   { 28253, 0x00000305 }, /* GL_ONE_MINUS_DST_ALPHA */
+   { 28276, 0x00000307 }, /* GL_ONE_MINUS_DST_COLOR */
+   { 28299, 0x00000303 }, /* GL_ONE_MINUS_SRC_ALPHA */
+   { 28322, 0x00000301 }, /* GL_ONE_MINUS_SRC_COLOR */
+   { 28345, 0x00008598 }, /* GL_OPERAND0_ALPHA */
+   { 28363, 0x00008598 }, /* GL_OPERAND0_ALPHA_ARB */
+   { 28385, 0x00008598 }, /* GL_OPERAND0_ALPHA_EXT */
+   { 28407, 0x00008590 }, /* GL_OPERAND0_RGB */
+   { 28423, 0x00008590 }, /* GL_OPERAND0_RGB_ARB */
+   { 28443, 0x00008590 }, /* GL_OPERAND0_RGB_EXT */
+   { 28463, 0x00008599 }, /* GL_OPERAND1_ALPHA */
+   { 28481, 0x00008599 }, /* GL_OPERAND1_ALPHA_ARB */
+   { 28503, 0x00008599 }, /* GL_OPERAND1_ALPHA_EXT */
+   { 28525, 0x00008591 }, /* GL_OPERAND1_RGB */
+   { 28541, 0x00008591 }, /* GL_OPERAND1_RGB_ARB */
+   { 28561, 0x00008591 }, /* GL_OPERAND1_RGB_EXT */
+   { 28581, 0x0000859A }, /* GL_OPERAND2_ALPHA */
+   { 28599, 0x0000859A }, /* GL_OPERAND2_ALPHA_ARB */
+   { 28621, 0x0000859A }, /* GL_OPERAND2_ALPHA_EXT */
+   { 28643, 0x00008592 }, /* GL_OPERAND2_RGB */
+   { 28659, 0x00008592 }, /* GL_OPERAND2_RGB_ARB */
+   { 28679, 0x00008592 }, /* GL_OPERAND2_RGB_EXT */
+   { 28699, 0x0000859B }, /* GL_OPERAND3_ALPHA_NV */
+   { 28720, 0x00008593 }, /* GL_OPERAND3_RGB_NV */
+   { 28739, 0x00001507 }, /* GL_OR */
+   { 28745, 0x00000A01 }, /* GL_ORDER */
+   { 28754, 0x0000150D }, /* GL_OR_INVERTED */
+   { 28769, 0x0000150B }, /* GL_OR_REVERSE */
+   { 28783, 0x00000505 }, /* GL_OUT_OF_MEMORY */
+   { 28800, 0x00000D05 }, /* GL_PACK_ALIGNMENT */
+   { 28818, 0x0000806C }, /* GL_PACK_IMAGE_HEIGHT */
+   { 28839, 0x00008758 }, /* GL_PACK_INVERT_MESA */
+   { 28859, 0x00000D01 }, /* GL_PACK_LSB_FIRST */
+   { 28877, 0x00000D02 }, /* GL_PACK_ROW_LENGTH */
+   { 28896, 0x0000806B }, /* GL_PACK_SKIP_IMAGES */
+   { 28916, 0x00000D04 }, /* GL_PACK_SKIP_PIXELS */
+   { 28936, 0x00000D03 }, /* GL_PACK_SKIP_ROWS */
+   { 28954, 0x00000D00 }, /* GL_PACK_SWAP_BYTES */
+   { 28973, 0x00008B92 }, /* GL_PALETTE4_R5_G6_B5_OES */
+   { 28998, 0x00008B94 }, /* GL_PALETTE4_RGB5_A1_OES */
+   { 29022, 0x00008B90 }, /* GL_PALETTE4_RGB8_OES */
+   { 29043, 0x00008B93 }, /* GL_PALETTE4_RGBA4_OES */
+   { 29065, 0x00008B91 }, /* GL_PALETTE4_RGBA8_OES */
+   { 29087, 0x00008B97 }, /* GL_PALETTE8_R5_G6_B5_OES */
+   { 29112, 0x00008B99 }, /* GL_PALETTE8_RGB5_A1_OES */
+   { 29136, 0x00008B95 }, /* GL_PALETTE8_RGB8_OES */
+   { 29157, 0x00008B98 }, /* GL_PALETTE8_RGBA4_OES */
+   { 29179, 0x00008B96 }, /* GL_PALETTE8_RGBA8_OES */
+   { 29201, 0x00000700 }, /* GL_PASS_THROUGH_TOKEN */
+   { 29223, 0x00000C50 }, /* GL_PERSPECTIVE_CORRECTION_HINT */
+   { 29254, 0x00000C79 }, /* GL_PIXEL_MAP_A_TO_A */
+   { 29274, 0x00000CB9 }, /* GL_PIXEL_MAP_A_TO_A_SIZE */
+   { 29299, 0x00000C78 }, /* GL_PIXEL_MAP_B_TO_B */
+   { 29319, 0x00000CB8 }, /* GL_PIXEL_MAP_B_TO_B_SIZE */
+   { 29344, 0x00000C77 }, /* GL_PIXEL_MAP_G_TO_G */
+   { 29364, 0x00000CB7 }, /* GL_PIXEL_MAP_G_TO_G_SIZE */
+   { 29389, 0x00000C75 }, /* GL_PIXEL_MAP_I_TO_A */
+   { 29409, 0x00000CB5 }, /* GL_PIXEL_MAP_I_TO_A_SIZE */
+   { 29434, 0x00000C74 }, /* GL_PIXEL_MAP_I_TO_B */
+   { 29454, 0x00000CB4 }, /* GL_PIXEL_MAP_I_TO_B_SIZE */
+   { 29479, 0x00000C73 }, /* GL_PIXEL_MAP_I_TO_G */
+   { 29499, 0x00000CB3 }, /* GL_PIXEL_MAP_I_TO_G_SIZE */
+   { 29524, 0x00000C70 }, /* GL_PIXEL_MAP_I_TO_I */
+   { 29544, 0x00000CB0 }, /* GL_PIXEL_MAP_I_TO_I_SIZE */
+   { 29569, 0x00000C72 }, /* GL_PIXEL_MAP_I_TO_R */
+   { 29589, 0x00000CB2 }, /* GL_PIXEL_MAP_I_TO_R_SIZE */
+   { 29614, 0x00000C76 }, /* GL_PIXEL_MAP_R_TO_R */
+   { 29634, 0x00000CB6 }, /* GL_PIXEL_MAP_R_TO_R_SIZE */
+   { 29659, 0x00000C71 }, /* GL_PIXEL_MAP_S_TO_S */
+   { 29679, 0x00000CB1 }, /* GL_PIXEL_MAP_S_TO_S_SIZE */
+   { 29704, 0x00000020 }, /* GL_PIXEL_MODE_BIT */
+   { 29722, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER */
+   { 29743, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING */
+   { 29772, 0x000088ED }, /* GL_PIXEL_PACK_BUFFER_BINDING_EXT */
+   { 29805, 0x000088EB }, /* GL_PIXEL_PACK_BUFFER_EXT */
+   { 29830, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER */
+   { 29853, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING */
+   { 29884, 0x000088EF }, /* GL_PIXEL_UNPACK_BUFFER_BINDING_EXT */
+   { 29919, 0x000088EC }, /* GL_PIXEL_UNPACK_BUFFER_EXT */
+   { 29946, 0x00001B00 }, /* GL_POINT */
+   { 29955, 0x00000000 }, /* GL_POINTS */
+   { 29965, 0x00000002 }, /* GL_POINT_BIT */
+   { 29978, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION */
+   { 30008, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_ARB */
+   { 30042, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_EXT */
+   { 30076, 0x00008129 }, /* GL_POINT_DISTANCE_ATTENUATION_SGIS */
+   { 30111, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE */
+   { 30140, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_ARB */
+   { 30173, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_EXT */
+   { 30206, 0x00008128 }, /* GL_POINT_FADE_THRESHOLD_SIZE_SGIS */
+   { 30240, 0x00000B11 }, /* GL_POINT_SIZE */
+   { 30254, 0x00008B9F }, /* GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES */
+   { 30293, 0x00008B9C }, /* GL_POINT_SIZE_ARRAY_OES */
+   { 30317, 0x0000898C }, /* GL_POINT_SIZE_ARRAY_POINTER_OES */
+   { 30349, 0x0000898B }, /* GL_POINT_SIZE_ARRAY_STRIDE_OES */
+   { 30380, 0x0000898A }, /* GL_POINT_SIZE_ARRAY_TYPE_OES */
+   { 30409, 0x00000B13 }, /* GL_POINT_SIZE_GRANULARITY */
+   { 30435, 0x00008127 }, /* GL_POINT_SIZE_MAX */
+   { 30453, 0x00008127 }, /* GL_POINT_SIZE_MAX_ARB */
+   { 30475, 0x00008127 }, /* GL_POINT_SIZE_MAX_EXT */
+   { 30497, 0x00008127 }, /* GL_POINT_SIZE_MAX_SGIS */
+   { 30520, 0x00008126 }, /* GL_POINT_SIZE_MIN */
+   { 30538, 0x00008126 }, /* GL_POINT_SIZE_MIN_ARB */
+   { 30560, 0x00008126 }, /* GL_POINT_SIZE_MIN_EXT */
+   { 30582, 0x00008126 }, /* GL_POINT_SIZE_MIN_SGIS */
+   { 30605, 0x00000B12 }, /* GL_POINT_SIZE_RANGE */
+   { 30625, 0x00000B10 }, /* GL_POINT_SMOOTH */
+   { 30641, 0x00000C51 }, /* GL_POINT_SMOOTH_HINT */
+   { 30662, 0x00008861 }, /* GL_POINT_SPRITE */
+   { 30678, 0x00008861 }, /* GL_POINT_SPRITE_ARB */
+   { 30698, 0x00008CA0 }, /* GL_POINT_SPRITE_COORD_ORIGIN */
+   { 30727, 0x00008861 }, /* GL_POINT_SPRITE_NV */
+   { 30746, 0x00008861 }, /* GL_POINT_SPRITE_OES */
+   { 30766, 0x00008863 }, /* GL_POINT_SPRITE_R_MODE_NV */
+   { 30792, 0x00000701 }, /* GL_POINT_TOKEN */
+   { 30807, 0x00000009 }, /* GL_POLYGON */
+   { 30818, 0x00000008 }, /* GL_POLYGON_BIT */
+   { 30833, 0x00000B40 }, /* GL_POLYGON_MODE */
+   { 30849, 0x00008039 }, /* GL_POLYGON_OFFSET_BIAS */
+   { 30872, 0x00008038 }, /* GL_POLYGON_OFFSET_FACTOR */
+   { 30897, 0x00008037 }, /* GL_POLYGON_OFFSET_FILL */
+   { 30920, 0x00002A02 }, /* GL_POLYGON_OFFSET_LINE */
+   { 30943, 0x00002A01 }, /* GL_POLYGON_OFFSET_POINT */
+   { 30967, 0x00002A00 }, /* GL_POLYGON_OFFSET_UNITS */
+   { 30991, 0x00000B41 }, /* GL_POLYGON_SMOOTH */
+   { 31009, 0x00000C53 }, /* GL_POLYGON_SMOOTH_HINT */
+   { 31032, 0x00000B42 }, /* GL_POLYGON_STIPPLE */
+   { 31051, 0x00000010 }, /* GL_POLYGON_STIPPLE_BIT */
+   { 31074, 0x00000703 }, /* GL_POLYGON_TOKEN */
+   { 31091, 0x00001203 }, /* GL_POSITION */
+   { 31103, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */
+   { 31135, 0x000080BB }, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI */
+   { 31171, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */
+   { 31204, 0x000080B7 }, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI */
+   { 31241, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */
+   { 31272, 0x000080BA }, /* GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI */
+   { 31307, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */
+   { 31339, 0x000080B6 }, /* GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI */
+   { 31375, 0x000080D2 }, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */
+   { 31408, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */
+   { 31440, 0x000080B9 }, /* GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI */
+   { 31476, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */
+   { 31509, 0x000080B5 }, /* GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI */
+   { 31546, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS */
+   { 31576, 0x000080B8 }, /* GL_POST_COLOR_MATRIX_RED_BIAS_SGI */
+   { 31610, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE */
+   { 31641, 0x000080B4 }, /* GL_POST_COLOR_MATRIX_RED_SCALE_SGI */
+   { 31676, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS */
+   { 31707, 0x00008023 }, /* GL_POST_CONVOLUTION_ALPHA_BIAS_EXT */
+   { 31742, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE */
+   { 31774, 0x0000801F }, /* GL_POST_CONVOLUTION_ALPHA_SCALE_EXT */
+   { 31810, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS */
+   { 31840, 0x00008022 }, /* GL_POST_CONVOLUTION_BLUE_BIAS_EXT */
+   { 31874, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE */
+   { 31905, 0x0000801E }, /* GL_POST_CONVOLUTION_BLUE_SCALE_EXT */
+   { 31940, 0x000080D1 }, /* GL_POST_CONVOLUTION_COLOR_TABLE */
+   { 31972, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS */
+   { 32003, 0x00008021 }, /* GL_POST_CONVOLUTION_GREEN_BIAS_EXT */
+   { 32038, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE */
+   { 32070, 0x0000801D }, /* GL_POST_CONVOLUTION_GREEN_SCALE_EXT */
+   { 32106, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS */
+   { 32135, 0x00008020 }, /* GL_POST_CONVOLUTION_RED_BIAS_EXT */
+   { 32168, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE */
+   { 32198, 0x0000801C }, /* GL_POST_CONVOLUTION_RED_SCALE_EXT */
+   { 32232, 0x0000817B }, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */
+   { 32271, 0x00008179 }, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */
+   { 32304, 0x0000817C }, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */
+   { 32344, 0x0000817A }, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */
+   { 32378, 0x00008578 }, /* GL_PREVIOUS */
+   { 32390, 0x00008578 }, /* GL_PREVIOUS_ARB */
+   { 32406, 0x00008578 }, /* GL_PREVIOUS_EXT */
+   { 32422, 0x00008577 }, /* GL_PRIMARY_COLOR */
+   { 32439, 0x00008577 }, /* GL_PRIMARY_COLOR_ARB */
+   { 32460, 0x00008577 }, /* GL_PRIMARY_COLOR_EXT */
+   { 32481, 0x00008C87 }, /* GL_PRIMITIVES_GENERATED */
+   { 32505, 0x00008C87 }, /* GL_PRIMITIVES_GENERATED_EXT */
+   { 32533, 0x00008F9D }, /* GL_PRIMITIVE_RESTART */
+   { 32554, 0x00008F9E }, /* GL_PRIMITIVE_RESTART_INDEX */
+   { 32581, 0x00008559 }, /* GL_PRIMITIVE_RESTART_INDEX_NV */
+   { 32611, 0x00008558 }, /* GL_PRIMITIVE_RESTART_NV */
+   { 32635, 0x000088B0 }, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */
+   { 32668, 0x00008805 }, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */
+   { 32700, 0x000088AC }, /* GL_PROGRAM_ATTRIBS_ARB */
+   { 32723, 0x000087FF }, /* GL_PROGRAM_BINARY_FORMATS_OES */
+   { 32753, 0x00008741 }, /* GL_PROGRAM_BINARY_LENGTH_OES */
+   { 32782, 0x00008677 }, /* GL_PROGRAM_BINDING_ARB */
+   { 32805, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_ARB */
+   { 32835, 0x0000864B }, /* GL_PROGRAM_ERROR_POSITION_NV */
+   { 32864, 0x00008874 }, /* GL_PROGRAM_ERROR_STRING_ARB */
+   { 32892, 0x00008876 }, /* GL_PROGRAM_FORMAT_ARB */
+   { 32914, 0x00008875 }, /* GL_PROGRAM_FORMAT_ASCII_ARB */
+   { 32942, 0x000088A0 }, /* GL_PROGRAM_INSTRUCTIONS_ARB */
+   { 32970, 0x00008627 }, /* GL_PROGRAM_LENGTH_ARB */
+   { 32992, 0x00008627 }, /* GL_PROGRAM_LENGTH_NV */
+   { 33013, 0x000088B2 }, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
+   { 33053, 0x00008808 }, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
+   { 33092, 0x000088AE }, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */
+   { 33122, 0x000088A2 }, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
+   { 33157, 0x000088AA }, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */
+   { 33190, 0x000088A6 }, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */
+   { 33224, 0x0000880A }, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
+   { 33263, 0x00008809 }, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
+   { 33302, 0x00008B40 }, /* GL_PROGRAM_OBJECT_ARB */
+   { 33324, 0x000088A8 }, /* GL_PROGRAM_PARAMETERS_ARB */
+   { 33350, 0x00008644 }, /* GL_PROGRAM_PARAMETER_NV */
+   { 33374, 0x00008642 }, /* GL_PROGRAM_POINT_SIZE */
+   { 33396, 0x00008642 }, /* GL_PROGRAM_POINT_SIZE_ARB */
+   { 33422, 0x00008647 }, /* GL_PROGRAM_RESIDENT_NV */
+   { 33445, 0x00008628 }, /* GL_PROGRAM_STRING_ARB */
+   { 33467, 0x00008628 }, /* GL_PROGRAM_STRING_NV */
+   { 33488, 0x00008646 }, /* GL_PROGRAM_TARGET_NV */
+   { 33509, 0x000088A4 }, /* GL_PROGRAM_TEMPORARIES_ARB */
+   { 33536, 0x00008807 }, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */
+   { 33568, 0x00008806 }, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */
+   { 33600, 0x000088B6 }, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */
+   { 33635, 0x00001701 }, /* GL_PROJECTION */
+   { 33649, 0x00000BA7 }, /* GL_PROJECTION_MATRIX */
+   { 33670, 0x0000898E }, /* GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES */
+   { 33713, 0x00000BA4 }, /* GL_PROJECTION_STACK_DEPTH */
+   { 33739, 0x00008E4F }, /* GL_PROVOKING_VERTEX */
+   { 33759, 0x00008E4F }, /* GL_PROVOKING_VERTEX_EXT */
+   { 33783, 0x000080D3 }, /* GL_PROXY_COLOR_TABLE */
+   { 33804, 0x00008025 }, /* GL_PROXY_HISTOGRAM */
+   { 33823, 0x00008025 }, /* GL_PROXY_HISTOGRAM_EXT */
+   { 33846, 0x000080D5 }, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */
+   { 33885, 0x000080D4 }, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */
+   { 33923, 0x00008063 }, /* GL_PROXY_TEXTURE_1D */
+   { 33943, 0x00008C19 }, /* GL_PROXY_TEXTURE_1D_ARRAY */
+   { 33969, 0x00008C19 }, /* GL_PROXY_TEXTURE_1D_ARRAY_EXT */
+   { 33999, 0x00008063 }, /* GL_PROXY_TEXTURE_1D_EXT */
+   { 34023, 0x00008064 }, /* GL_PROXY_TEXTURE_2D */
+   { 34043, 0x00008C1B }, /* GL_PROXY_TEXTURE_2D_ARRAY */
+   { 34069, 0x00008C1B }, /* GL_PROXY_TEXTURE_2D_ARRAY_EXT */
+   { 34099, 0x00008064 }, /* GL_PROXY_TEXTURE_2D_EXT */
+   { 34123, 0x00008070 }, /* GL_PROXY_TEXTURE_3D */
+   { 34143, 0x000080BD }, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */
+   { 34176, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP */
+   { 34202, 0x0000851B }, /* GL_PROXY_TEXTURE_CUBE_MAP_ARB */
+   { 34232, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE */
+   { 34259, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_ARB */
+   { 34290, 0x000084F7 }, /* GL_PROXY_TEXTURE_RECTANGLE_NV */
+   { 34320, 0x00008A1D }, /* GL_PURGEABLE_APPLE */
+   { 34339, 0x00002003 }, /* GL_Q */
+   { 34344, 0x00001209 }, /* GL_QUADRATIC_ATTENUATION */
+   { 34369, 0x00000007 }, /* GL_QUADS */
+   { 34378, 0x00008E4C }, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */
+   { 34422, 0x00008E4C }, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT */
+   { 34470, 0x00008614 }, /* GL_QUAD_MESH_SUN */
+   { 34487, 0x00000008 }, /* GL_QUAD_STRIP */
+   { 34501, 0x00008E16 }, /* GL_QUERY_BY_REGION_NO_WAIT */
+   { 34528, 0x00008E16 }, /* GL_QUERY_BY_REGION_NO_WAIT_NV */
+   { 34558, 0x00008E15 }, /* GL_QUERY_BY_REGION_WAIT */
+   { 34582, 0x00008E15 }, /* GL_QUERY_BY_REGION_WAIT_NV */
+   { 34609, 0x00008864 }, /* GL_QUERY_COUNTER_BITS */
+   { 34631, 0x00008864 }, /* GL_QUERY_COUNTER_BITS_ARB */
+   { 34657, 0x00008E14 }, /* GL_QUERY_NO_WAIT */
+   { 34674, 0x00008E14 }, /* GL_QUERY_NO_WAIT_NV */
+   { 34694, 0x00008866 }, /* GL_QUERY_RESULT */
+   { 34710, 0x00008866 }, /* GL_QUERY_RESULT_ARB */
+   { 34730, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE */
+   { 34756, 0x00008867 }, /* GL_QUERY_RESULT_AVAILABLE_ARB */
+   { 34786, 0x00008E13 }, /* GL_QUERY_WAIT */
+   { 34800, 0x00008E13 }, /* GL_QUERY_WAIT_NV */
+   { 34817, 0x00002002 }, /* GL_R */
+   { 34822, 0x00008C3A }, /* GL_R11F_G11F_B10F */
+   { 34840, 0x00008F98 }, /* GL_R16_SNORM */
+   { 34853, 0x00002A10 }, /* GL_R3_G3_B2 */
+   { 34865, 0x00008F94 }, /* GL_R8_SNORM */
+   { 34877, 0x00008C89 }, /* GL_RASTERIZER_DISCARD */
+   { 34899, 0x00008C89 }, /* GL_RASTERIZER_DISCARD_EXT */
+   { 34925, 0x00019262 }, /* GL_RASTER_POSITION_UNCLIPPED_IBM */
+   { 34958, 0x00000C02 }, /* GL_READ_BUFFER */
+   { 34973, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER */
+   { 34993, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING */
+   { 35021, 0x00008CAA }, /* GL_READ_FRAMEBUFFER_BINDING_EXT */
+   { 35053, 0x00008CA8 }, /* GL_READ_FRAMEBUFFER_EXT */
+   { 35077, 0x000088B8 }, /* GL_READ_ONLY */
+   { 35090, 0x000088B8 }, /* GL_READ_ONLY_ARB */
+   { 35107, 0x000088BA }, /* GL_READ_WRITE */
+   { 35121, 0x000088BA }, /* GL_READ_WRITE_ARB */
+   { 35139, 0x00001903 }, /* GL_RED */
+   { 35146, 0x00008016 }, /* GL_REDUCE */
+   { 35156, 0x00008016 }, /* GL_REDUCE_EXT */
+   { 35170, 0x00000D15 }, /* GL_RED_BIAS */
+   { 35182, 0x00000D52 }, /* GL_RED_BITS */
+   { 35194, 0x00008D94 }, /* GL_RED_INTEGER */
+   { 35209, 0x00008D94 }, /* GL_RED_INTEGER_EXT */
+   { 35228, 0x00000D14 }, /* GL_RED_SCALE */
+   { 35241, 0x00008F90 }, /* GL_RED_SNORM */
+   { 35254, 0x00008512 }, /* GL_REFLECTION_MAP */
+   { 35272, 0x00008512 }, /* GL_REFLECTION_MAP_ARB */
+   { 35294, 0x00008512 }, /* GL_REFLECTION_MAP_NV */
+   { 35315, 0x00008512 }, /* GL_REFLECTION_MAP_OES */
+   { 35337, 0x00008A19 }, /* GL_RELEASED_APPLE */
+   { 35355, 0x00001C00 }, /* GL_RENDER */
+   { 35365, 0x00008D41 }, /* GL_RENDERBUFFER */
+   { 35381, 0x00008D53 }, /* GL_RENDERBUFFER_ALPHA_SIZE */
+   { 35408, 0x00008D53 }, /* GL_RENDERBUFFER_ALPHA_SIZE_OES */
+   { 35439, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING */
+   { 35463, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING_EXT */
+   { 35491, 0x00008CA7 }, /* GL_RENDERBUFFER_BINDING_OES */
+   { 35519, 0x00008D52 }, /* GL_RENDERBUFFER_BLUE_SIZE */
+   { 35545, 0x00008D52 }, /* GL_RENDERBUFFER_BLUE_SIZE_OES */
+   { 35575, 0x00008D54 }, /* GL_RENDERBUFFER_DEPTH_SIZE */
+   { 35602, 0x00008D54 }, /* GL_RENDERBUFFER_DEPTH_SIZE_OES */
+   { 35633, 0x00008D41 }, /* GL_RENDERBUFFER_EXT */
+   { 35653, 0x00008D51 }, /* GL_RENDERBUFFER_GREEN_SIZE */
+   { 35680, 0x00008D51 }, /* GL_RENDERBUFFER_GREEN_SIZE_OES */
+   { 35711, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT */
+   { 35734, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT_EXT */
+   { 35761, 0x00008D43 }, /* GL_RENDERBUFFER_HEIGHT_OES */
+   { 35788, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT */
+   { 35820, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT_EXT */
+   { 35856, 0x00008D44 }, /* GL_RENDERBUFFER_INTERNAL_FORMAT_OES */
+   { 35892, 0x00008D41 }, /* GL_RENDERBUFFER_OES */
+   { 35912, 0x00008D50 }, /* GL_RENDERBUFFER_RED_SIZE */
+   { 35937, 0x00008D50 }, /* GL_RENDERBUFFER_RED_SIZE_OES */
+   { 35966, 0x00008CAB }, /* GL_RENDERBUFFER_SAMPLES */
+   { 35990, 0x00008CAB }, /* GL_RENDERBUFFER_SAMPLES_EXT */
+   { 36018, 0x00008D55 }, /* GL_RENDERBUFFER_STENCIL_SIZE */
+   { 36047, 0x00008D55 }, /* GL_RENDERBUFFER_STENCIL_SIZE_OES */
+   { 36080, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH */
+   { 36102, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH_EXT */
+   { 36128, 0x00008D42 }, /* GL_RENDERBUFFER_WIDTH_OES */
+   { 36154, 0x00001F01 }, /* GL_RENDERER */
+   { 36166, 0x00000C40 }, /* GL_RENDER_MODE */
+   { 36181, 0x00002901 }, /* GL_REPEAT */
+   { 36191, 0x00001E01 }, /* GL_REPLACE */
+   { 36202, 0x00008062 }, /* GL_REPLACE_EXT */
+   { 36217, 0x00008153 }, /* GL_REPLICATE_BORDER_HP */
+   { 36240, 0x0000803A }, /* GL_RESCALE_NORMAL */
+   { 36258, 0x0000803A }, /* GL_RESCALE_NORMAL_EXT */
+   { 36280, 0x00008A1B }, /* GL_RETAINED_APPLE */
+   { 36298, 0x00000102 }, /* GL_RETURN */
+   { 36308, 0x00008F99 }, /* GL_RG16_SNORM */
+   { 36322, 0x00008F95 }, /* GL_RG8_SNORM */
+   { 36335, 0x00001907 }, /* GL_RGB */
+   { 36342, 0x00008052 }, /* GL_RGB10 */
+   { 36351, 0x00008059 }, /* GL_RGB10_A2 */
+   { 36363, 0x00008059 }, /* GL_RGB10_A2_EXT */
+   { 36379, 0x00008052 }, /* GL_RGB10_EXT */
+   { 36392, 0x00008053 }, /* GL_RGB12 */
+   { 36401, 0x00008053 }, /* GL_RGB12_EXT */
+   { 36414, 0x00008054 }, /* GL_RGB16 */
+   { 36423, 0x0000881B }, /* GL_RGB16F */
+   { 36433, 0x00008D89 }, /* GL_RGB16I */
+   { 36443, 0x00008D89 }, /* GL_RGB16I_EXT */
+   { 36457, 0x00008D77 }, /* GL_RGB16UI */
+   { 36468, 0x00008D77 }, /* GL_RGB16UI_EXT */
+   { 36483, 0x00008054 }, /* GL_RGB16_EXT */
+   { 36496, 0x00008F9A }, /* GL_RGB16_SNORM */
+   { 36511, 0x0000804E }, /* GL_RGB2_EXT */
+   { 36523, 0x00008815 }, /* GL_RGB32F */
+   { 36533, 0x00008D83 }, /* GL_RGB32I */
+   { 36543, 0x00008D83 }, /* GL_RGB32I_EXT */
+   { 36557, 0x00008D71 }, /* GL_RGB32UI */
+   { 36568, 0x00008D71 }, /* GL_RGB32UI_EXT */
+   { 36583, 0x0000804F }, /* GL_RGB4 */
+   { 36591, 0x0000804F }, /* GL_RGB4_EXT */
+   { 36603, 0x000083A1 }, /* GL_RGB4_S3TC */
+   { 36616, 0x00008050 }, /* GL_RGB5 */
+   { 36624, 0x00008D62 }, /* GL_RGB565 */
+   { 36634, 0x00008D62 }, /* GL_RGB565_OES */
+   { 36648, 0x00008057 }, /* GL_RGB5_A1 */
+   { 36659, 0x00008057 }, /* GL_RGB5_A1_EXT */
+   { 36674, 0x00008057 }, /* GL_RGB5_A1_OES */
+   { 36689, 0x00008050 }, /* GL_RGB5_EXT */
+   { 36701, 0x00008051 }, /* GL_RGB8 */
+   { 36709, 0x00008D8F }, /* GL_RGB8I */
+   { 36718, 0x00008D8F }, /* GL_RGB8I_EXT */
+   { 36731, 0x00008D7D }, /* GL_RGB8UI */
+   { 36741, 0x00008D7D }, /* GL_RGB8UI_EXT */
+   { 36755, 0x00008051 }, /* GL_RGB8_EXT */
+   { 36767, 0x00008051 }, /* GL_RGB8_OES */
+   { 36779, 0x00008F96 }, /* GL_RGB8_SNORM */
+   { 36793, 0x00008C3D }, /* GL_RGB9_E5 */
+   { 36804, 0x00001908 }, /* GL_RGBA */
+   { 36812, 0x0000805A }, /* GL_RGBA12 */
+   { 36822, 0x0000805A }, /* GL_RGBA12_EXT */
+   { 36836, 0x0000805B }, /* GL_RGBA16 */
+   { 36846, 0x0000881A }, /* GL_RGBA16F */
+   { 36857, 0x00008D88 }, /* GL_RGBA16I */
+   { 36868, 0x00008D88 }, /* GL_RGBA16I_EXT */
+   { 36883, 0x00008D76 }, /* GL_RGBA16UI */
+   { 36895, 0x00008D76 }, /* GL_RGBA16UI_EXT */
+   { 36911, 0x0000805B }, /* GL_RGBA16_EXT */
+   { 36925, 0x00008F9B }, /* GL_RGBA16_SNORM */
+   { 36941, 0x00008055 }, /* GL_RGBA2 */
+   { 36950, 0x00008055 }, /* GL_RGBA2_EXT */
+   { 36963, 0x00008814 }, /* GL_RGBA32F */
+   { 36974, 0x00008D82 }, /* GL_RGBA32I */
+   { 36985, 0x00008D82 }, /* GL_RGBA32I_EXT */
+   { 37000, 0x00008D70 }, /* GL_RGBA32UI */
+   { 37012, 0x00008D70 }, /* GL_RGBA32UI_EXT */
+   { 37028, 0x00008056 }, /* GL_RGBA4 */
+   { 37037, 0x000083A5 }, /* GL_RGBA4_DXT5_S3TC */
+   { 37056, 0x00008056 }, /* GL_RGBA4_EXT */
+   { 37069, 0x00008056 }, /* GL_RGBA4_OES */
+   { 37082, 0x000083A3 }, /* GL_RGBA4_S3TC */
+   { 37096, 0x00008058 }, /* GL_RGBA8 */
+   { 37105, 0x00008D8E }, /* GL_RGBA8I */
+   { 37115, 0x00008D8E }, /* GL_RGBA8I_EXT */
+   { 37129, 0x00008D7C }, /* GL_RGBA8UI */
+   { 37140, 0x00008D7C }, /* GL_RGBA8UI_EXT */
+   { 37155, 0x00008058 }, /* GL_RGBA8_EXT */
+   { 37168, 0x00008058 }, /* GL_RGBA8_OES */
+   { 37181, 0x00008F97 }, /* GL_RGBA8_SNORM */
+   { 37196, 0x000083A4 }, /* GL_RGBA_DXT5_S3TC */
+   { 37214, 0x00008820 }, /* GL_RGBA_FLOAT_MODE_ARB */
+   { 37237, 0x00008D99 }, /* GL_RGBA_INTEGER */
+   { 37253, 0x00008D99 }, /* GL_RGBA_INTEGER_EXT */
+   { 37273, 0x00008D9E }, /* GL_RGBA_INTEGER_MODE_EXT */
+   { 37298, 0x00000C31 }, /* GL_RGBA_MODE */
+   { 37311, 0x000083A2 }, /* GL_RGBA_S3TC */
+   { 37324, 0x00008F93 }, /* GL_RGBA_SNORM */
+   { 37338, 0x00008D98 }, /* GL_RGB_INTEGER */
+   { 37353, 0x00008D98 }, /* GL_RGB_INTEGER_EXT */
+   { 37372, 0x000083A0 }, /* GL_RGB_S3TC */
+   { 37384, 0x00008573 }, /* GL_RGB_SCALE */
+   { 37397, 0x00008573 }, /* GL_RGB_SCALE_ARB */
+   { 37414, 0x00008573 }, /* GL_RGB_SCALE_EXT */
+   { 37431, 0x00008F92 }, /* GL_RGB_SNORM */
+   { 37444, 0x00008F91 }, /* GL_RG_SNORM */
+   { 37456, 0x00000407 }, /* GL_RIGHT */
+   { 37465, 0x00002000 }, /* GL_S */
+   { 37470, 0x00008B5D }, /* GL_SAMPLER_1D */
+   { 37484, 0x00008DC0 }, /* GL_SAMPLER_1D_ARRAY */
+   { 37504, 0x00008DC0 }, /* GL_SAMPLER_1D_ARRAY_EXT */
+   { 37528, 0x00008DC3 }, /* GL_SAMPLER_1D_ARRAY_SHADOW */
+   { 37555, 0x00008DC3 }, /* GL_SAMPLER_1D_ARRAY_SHADOW_EXT */
+   { 37586, 0x00008B61 }, /* GL_SAMPLER_1D_SHADOW */
+   { 37607, 0x00008B5E }, /* GL_SAMPLER_2D */
+   { 37621, 0x00008DC1 }, /* GL_SAMPLER_2D_ARRAY */
+   { 37641, 0x00008DC1 }, /* GL_SAMPLER_2D_ARRAY_EXT */
+   { 37665, 0x00008DC4 }, /* GL_SAMPLER_2D_ARRAY_SHADOW */
+   { 37692, 0x00008DC4 }, /* GL_SAMPLER_2D_ARRAY_SHADOW_EXT */
+   { 37723, 0x00008B63 }, /* GL_SAMPLER_2D_RECT */
+   { 37742, 0x00008B64 }, /* GL_SAMPLER_2D_RECT_SHADOW */
+   { 37768, 0x00008B62 }, /* GL_SAMPLER_2D_SHADOW */
+   { 37789, 0x00008B5F }, /* GL_SAMPLER_3D */
+   { 37803, 0x00008B5F }, /* GL_SAMPLER_3D_OES */
+   { 37821, 0x00008919 }, /* GL_SAMPLER_BINDING */
+   { 37840, 0x00008DC2 }, /* GL_SAMPLER_BUFFER */
+   { 37858, 0x00008DC2 }, /* GL_SAMPLER_BUFFER_EXT */
+   { 37880, 0x00008B60 }, /* GL_SAMPLER_CUBE */
+   { 37896, 0x00008DC5 }, /* GL_SAMPLER_CUBE_SHADOW */
+   { 37919, 0x00008DC5 }, /* GL_SAMPLER_CUBE_SHADOW_EXT */
+   { 37946, 0x000080A9 }, /* GL_SAMPLES */
+   { 37957, 0x000086B4 }, /* GL_SAMPLES_3DFX */
+   { 37973, 0x000080A9 }, /* GL_SAMPLES_ARB */
+   { 37988, 0x00008914 }, /* GL_SAMPLES_PASSED */
+   { 38006, 0x00008914 }, /* GL_SAMPLES_PASSED_ARB */
+   { 38028, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE */
+   { 38056, 0x0000809E }, /* GL_SAMPLE_ALPHA_TO_COVERAGE_ARB */
+   { 38088, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE */
+   { 38111, 0x0000809F }, /* GL_SAMPLE_ALPHA_TO_ONE_ARB */
+   { 38138, 0x000080A8 }, /* GL_SAMPLE_BUFFERS */
+   { 38156, 0x000086B3 }, /* GL_SAMPLE_BUFFERS_3DFX */
+   { 38179, 0x000080A8 }, /* GL_SAMPLE_BUFFERS_ARB */
+   { 38201, 0x000080A0 }, /* GL_SAMPLE_COVERAGE */
+   { 38220, 0x000080A0 }, /* GL_SAMPLE_COVERAGE_ARB */
+   { 38243, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT */
+   { 38269, 0x000080AB }, /* GL_SAMPLE_COVERAGE_INVERT_ARB */
+   { 38299, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE */
+   { 38324, 0x000080AA }, /* GL_SAMPLE_COVERAGE_VALUE_ARB */
+   { 38353, 0x00080000 }, /* GL_SCISSOR_BIT */
+   { 38368, 0x00000C10 }, /* GL_SCISSOR_BOX */
+   { 38383, 0x00000C11 }, /* GL_SCISSOR_TEST */
+   { 38399, 0x0000845E }, /* GL_SECONDARY_COLOR_ARRAY */
+   { 38424, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */
+   { 38464, 0x0000889C }, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB */
+   { 38508, 0x0000845D }, /* GL_SECONDARY_COLOR_ARRAY_POINTER */
+   { 38541, 0x0000845A }, /* GL_SECONDARY_COLOR_ARRAY_SIZE */
+   { 38571, 0x0000845C }, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */
+   { 38603, 0x0000845B }, /* GL_SECONDARY_COLOR_ARRAY_TYPE */
+   { 38633, 0x00001C02 }, /* GL_SELECT */
+   { 38643, 0x00000DF3 }, /* GL_SELECTION_BUFFER_POINTER */
+   { 38671, 0x00000DF4 }, /* GL_SELECTION_BUFFER_SIZE */
+   { 38696, 0x00008012 }, /* GL_SEPARABLE_2D */
+   { 38712, 0x00008C8D }, /* GL_SEPARATE_ATTRIBS */
+   { 38732, 0x00008C8D }, /* GL_SEPARATE_ATTRIBS_EXT */
+   { 38756, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR */
+   { 38783, 0x000081FA }, /* GL_SEPARATE_SPECULAR_COLOR_EXT */
+   { 38814, 0x0000150F }, /* GL_SET */
+   { 38821, 0x00008DF8 }, /* GL_SHADER_BINARY_FORMATS */
+   { 38846, 0x00008DFA }, /* GL_SHADER_COMPILER */
+   { 38865, 0x00008B48 }, /* GL_SHADER_OBJECT_ARB */
+   { 38886, 0x00008B88 }, /* GL_SHADER_SOURCE_LENGTH */
+   { 38910, 0x00008B4F }, /* GL_SHADER_TYPE */
+   { 38925, 0x00000B54 }, /* GL_SHADE_MODEL */
+   { 38940, 0x00008B8C }, /* GL_SHADING_LANGUAGE_VERSION */
+   { 38968, 0x000080BF }, /* GL_SHADOW_AMBIENT_SGIX */
+   { 38991, 0x000081FB }, /* GL_SHARED_TEXTURE_PALETTE_EXT */
+   { 39021, 0x00001601 }, /* GL_SHININESS */
+   { 39034, 0x00001402 }, /* GL_SHORT */
+   { 39043, 0x00009119 }, /* GL_SIGNALED */
+   { 39055, 0x00008F9C }, /* GL_SIGNED_NORMALIZED */
+   { 39076, 0x000081F9 }, /* GL_SINGLE_COLOR */
+   { 39092, 0x000081F9 }, /* GL_SINGLE_COLOR_EXT */
+   { 39112, 0x000085CC }, /* GL_SLICE_ACCUM_SUN */
+   { 39131, 0x00008C46 }, /* GL_SLUMINANCE */
+   { 39145, 0x00008C47 }, /* GL_SLUMINANCE8 */
+   { 39160, 0x00008C45 }, /* GL_SLUMINANCE8_ALPHA8 */
+   { 39182, 0x00008C44 }, /* GL_SLUMINANCE_ALPHA */
+   { 39202, 0x00001D01 }, /* GL_SMOOTH */
+   { 39212, 0x00000B23 }, /* GL_SMOOTH_LINE_WIDTH_GRANULARITY */
+   { 39245, 0x00000B22 }, /* GL_SMOOTH_LINE_WIDTH_RANGE */
+   { 39272, 0x00000B13 }, /* GL_SMOOTH_POINT_SIZE_GRANULARITY */
+   { 39305, 0x00000B12 }, /* GL_SMOOTH_POINT_SIZE_RANGE */
+   { 39332, 0x00008588 }, /* GL_SOURCE0_ALPHA */
+   { 39349, 0x00008588 }, /* GL_SOURCE0_ALPHA_ARB */
+   { 39370, 0x00008588 }, /* GL_SOURCE0_ALPHA_EXT */
+   { 39391, 0x00008580 }, /* GL_SOURCE0_RGB */
+   { 39406, 0x00008580 }, /* GL_SOURCE0_RGB_ARB */
+   { 39425, 0x00008580 }, /* GL_SOURCE0_RGB_EXT */
+   { 39444, 0x00008589 }, /* GL_SOURCE1_ALPHA */
+   { 39461, 0x00008589 }, /* GL_SOURCE1_ALPHA_ARB */
+   { 39482, 0x00008589 }, /* GL_SOURCE1_ALPHA_EXT */
+   { 39503, 0x00008581 }, /* GL_SOURCE1_RGB */
+   { 39518, 0x00008581 }, /* GL_SOURCE1_RGB_ARB */
+   { 39537, 0x00008581 }, /* GL_SOURCE1_RGB_EXT */
+   { 39556, 0x0000858A }, /* GL_SOURCE2_ALPHA */
+   { 39573, 0x0000858A }, /* GL_SOURCE2_ALPHA_ARB */
+   { 39594, 0x0000858A }, /* GL_SOURCE2_ALPHA_EXT */
+   { 39615, 0x00008582 }, /* GL_SOURCE2_RGB */
+   { 39630, 0x00008582 }, /* GL_SOURCE2_RGB_ARB */
+   { 39649, 0x00008582 }, /* GL_SOURCE2_RGB_EXT */
+   { 39668, 0x0000858B }, /* GL_SOURCE3_ALPHA_NV */
+   { 39688, 0x00008583 }, /* GL_SOURCE3_RGB_NV */
+   { 39706, 0x00001202 }, /* GL_SPECULAR */
+   { 39718, 0x00002402 }, /* GL_SPHERE_MAP */
+   { 39732, 0x00001206 }, /* GL_SPOT_CUTOFF */
+   { 39747, 0x00001204 }, /* GL_SPOT_DIRECTION */
+   { 39765, 0x00001205 }, /* GL_SPOT_EXPONENT */
+   { 39782, 0x00008588 }, /* GL_SRC0_ALPHA */
+   { 39796, 0x00008580 }, /* GL_SRC0_RGB */
+   { 39808, 0x00008589 }, /* GL_SRC1_ALPHA */
+   { 39822, 0x00008581 }, /* GL_SRC1_RGB */
+   { 39834, 0x0000858A }, /* GL_SRC2_ALPHA */
+   { 39848, 0x00008582 }, /* GL_SRC2_RGB */
+   { 39860, 0x00000302 }, /* GL_SRC_ALPHA */
+   { 39873, 0x00000308 }, /* GL_SRC_ALPHA_SATURATE */
+   { 39895, 0x00000300 }, /* GL_SRC_COLOR */
+   { 39908, 0x00008C40 }, /* GL_SRGB */
+   { 39916, 0x00008C41 }, /* GL_SRGB8 */
+   { 39925, 0x00008C43 }, /* GL_SRGB8_ALPHA8 */
+   { 39941, 0x00008C42 }, /* GL_SRGB_ALPHA */
+   { 39955, 0x00000503 }, /* GL_STACK_OVERFLOW */
+   { 39973, 0x00000504 }, /* GL_STACK_UNDERFLOW */
+   { 39992, 0x000088E6 }, /* GL_STATIC_COPY */
+   { 40007, 0x000088E6 }, /* GL_STATIC_COPY_ARB */
+   { 40026, 0x000088E4 }, /* GL_STATIC_DRAW */
+   { 40041, 0x000088E4 }, /* GL_STATIC_DRAW_ARB */
+   { 40060, 0x000088E5 }, /* GL_STATIC_READ */
+   { 40075, 0x000088E5 }, /* GL_STATIC_READ_ARB */
+   { 40094, 0x00001802 }, /* GL_STENCIL */
+   { 40105, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT */
+   { 40127, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT_EXT */
+   { 40153, 0x00008D20 }, /* GL_STENCIL_ATTACHMENT_OES */
+   { 40179, 0x00008801 }, /* GL_STENCIL_BACK_FAIL */
+   { 40200, 0x00008801 }, /* GL_STENCIL_BACK_FAIL_ATI */
+   { 40225, 0x00008800 }, /* GL_STENCIL_BACK_FUNC */
+   { 40246, 0x00008800 }, /* GL_STENCIL_BACK_FUNC_ATI */
+   { 40271, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */
+   { 40303, 0x00008802 }, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI */
+   { 40339, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */
+   { 40371, 0x00008803 }, /* GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI */
+   { 40407, 0x00008CA3 }, /* GL_STENCIL_BACK_REF */
+   { 40427, 0x00008CA4 }, /* GL_STENCIL_BACK_VALUE_MASK */
+   { 40454, 0x00008CA5 }, /* GL_STENCIL_BACK_WRITEMASK */
+   { 40480, 0x00000D57 }, /* GL_STENCIL_BITS */
+   { 40496, 0x00008224 }, /* GL_STENCIL_BUFFER */
+   { 40514, 0x00000400 }, /* GL_STENCIL_BUFFER_BIT */
+   { 40536, 0x00000B91 }, /* GL_STENCIL_CLEAR_VALUE */
+   { 40559, 0x00000B94 }, /* GL_STENCIL_FAIL */
+   { 40575, 0x00000B92 }, /* GL_STENCIL_FUNC */
+   { 40591, 0x00001901 }, /* GL_STENCIL_INDEX */
+   { 40608, 0x00008D46 }, /* GL_STENCIL_INDEX1 */
+   { 40626, 0x00008D49 }, /* GL_STENCIL_INDEX16 */
+   { 40645, 0x00008D49 }, /* GL_STENCIL_INDEX16_EXT */
+   { 40668, 0x00008D46 }, /* GL_STENCIL_INDEX1_EXT */
+   { 40690, 0x00008D46 }, /* GL_STENCIL_INDEX1_OES */
+   { 40712, 0x00008D47 }, /* GL_STENCIL_INDEX4 */
+   { 40730, 0x00008D47 }, /* GL_STENCIL_INDEX4_EXT */
+   { 40752, 0x00008D47 }, /* GL_STENCIL_INDEX4_OES */
+   { 40774, 0x00008D48 }, /* GL_STENCIL_INDEX8 */
+   { 40792, 0x00008D48 }, /* GL_STENCIL_INDEX8_EXT */
+   { 40814, 0x00008D48 }, /* GL_STENCIL_INDEX8_OES */
+   { 40836, 0x00008D45 }, /* GL_STENCIL_INDEX_EXT */
+   { 40857, 0x00000B95 }, /* GL_STENCIL_PASS_DEPTH_FAIL */
+   { 40884, 0x00000B96 }, /* GL_STENCIL_PASS_DEPTH_PASS */
+   { 40911, 0x00000B97 }, /* GL_STENCIL_REF */
+   { 40926, 0x00000B90 }, /* GL_STENCIL_TEST */
+   { 40942, 0x00008910 }, /* GL_STENCIL_TEST_TWO_SIDE_EXT */
+   { 40971, 0x00000B93 }, /* GL_STENCIL_VALUE_MASK */
+   { 40993, 0x00000B98 }, /* GL_STENCIL_WRITEMASK */
+   { 41014, 0x00000C33 }, /* GL_STEREO */
+   { 41024, 0x000085BE }, /* GL_STORAGE_CACHED_APPLE */
+   { 41048, 0x000085BD }, /* GL_STORAGE_PRIVATE_APPLE */
+   { 41073, 0x000085BF }, /* GL_STORAGE_SHARED_APPLE */
+   { 41097, 0x000088E2 }, /* GL_STREAM_COPY */
+   { 41112, 0x000088E2 }, /* GL_STREAM_COPY_ARB */
+   { 41131, 0x000088E0 }, /* GL_STREAM_DRAW */
+   { 41146, 0x000088E0 }, /* GL_STREAM_DRAW_ARB */
+   { 41165, 0x000088E1 }, /* GL_STREAM_READ */
+   { 41180, 0x000088E1 }, /* GL_STREAM_READ_ARB */
+   { 41199, 0x00000D50 }, /* GL_SUBPIXEL_BITS */
+   { 41216, 0x000084E7 }, /* GL_SUBTRACT */
+   { 41228, 0x000084E7 }, /* GL_SUBTRACT_ARB */
+   { 41244, 0x00009113 }, /* GL_SYNC_CONDITION */
+   { 41262, 0x00009116 }, /* GL_SYNC_FENCE */
+   { 41276, 0x00009115 }, /* GL_SYNC_FLAGS */
+   { 41290, 0x00000001 }, /* GL_SYNC_FLUSH_COMMANDS_BIT */
+   { 41317, 0x00009117 }, /* GL_SYNC_GPU_COMMANDS_COMPLETE */
+   { 41347, 0x00009114 }, /* GL_SYNC_STATUS */
+   { 41362, 0x00002001 }, /* GL_T */
+   { 41367, 0x00002A2A }, /* GL_T2F_C3F_V3F */
+   { 41382, 0x00002A2C }, /* GL_T2F_C4F_N3F_V3F */
+   { 41401, 0x00002A29 }, /* GL_T2F_C4UB_V3F */
+   { 41417, 0x00002A2B }, /* GL_T2F_N3F_V3F */
+   { 41432, 0x00002A27 }, /* GL_T2F_V3F */
+   { 41443, 0x00002A2D }, /* GL_T4F_C4F_N3F_V4F */
+   { 41462, 0x00002A28 }, /* GL_T4F_V4F */
+   { 41473, 0x00008031 }, /* GL_TABLE_TOO_LARGE_EXT */
+   { 41496, 0x00001702 }, /* GL_TEXTURE */
+   { 41507, 0x000084C0 }, /* GL_TEXTURE0 */
+   { 41519, 0x000084C0 }, /* GL_TEXTURE0_ARB */
+   { 41535, 0x000084C1 }, /* GL_TEXTURE1 */
+   { 41547, 0x000084CA }, /* GL_TEXTURE10 */
+   { 41560, 0x000084CA }, /* GL_TEXTURE10_ARB */
+   { 41577, 0x000084CB }, /* GL_TEXTURE11 */
+   { 41590, 0x000084CB }, /* GL_TEXTURE11_ARB */
+   { 41607, 0x000084CC }, /* GL_TEXTURE12 */
+   { 41620, 0x000084CC }, /* GL_TEXTURE12_ARB */
+   { 41637, 0x000084CD }, /* GL_TEXTURE13 */
+   { 41650, 0x000084CD }, /* GL_TEXTURE13_ARB */
+   { 41667, 0x000084CE }, /* GL_TEXTURE14 */
+   { 41680, 0x000084CE }, /* GL_TEXTURE14_ARB */
+   { 41697, 0x000084CF }, /* GL_TEXTURE15 */
+   { 41710, 0x000084CF }, /* GL_TEXTURE15_ARB */
+   { 41727, 0x000084D0 }, /* GL_TEXTURE16 */
+   { 41740, 0x000084D0 }, /* GL_TEXTURE16_ARB */
+   { 41757, 0x000084D1 }, /* GL_TEXTURE17 */
+   { 41770, 0x000084D1 }, /* GL_TEXTURE17_ARB */
+   { 41787, 0x000084D2 }, /* GL_TEXTURE18 */
+   { 41800, 0x000084D2 }, /* GL_TEXTURE18_ARB */
+   { 41817, 0x000084D3 }, /* GL_TEXTURE19 */
+   { 41830, 0x000084D3 }, /* GL_TEXTURE19_ARB */
+   { 41847, 0x000084C1 }, /* GL_TEXTURE1_ARB */
+   { 41863, 0x000084C2 }, /* GL_TEXTURE2 */
+   { 41875, 0x000084D4 }, /* GL_TEXTURE20 */
+   { 41888, 0x000084D4 }, /* GL_TEXTURE20_ARB */
+   { 41905, 0x000084D5 }, /* GL_TEXTURE21 */
+   { 41918, 0x000084D5 }, /* GL_TEXTURE21_ARB */
+   { 41935, 0x000084D6 }, /* GL_TEXTURE22 */
+   { 41948, 0x000084D6 }, /* GL_TEXTURE22_ARB */
+   { 41965, 0x000084D7 }, /* GL_TEXTURE23 */
+   { 41978, 0x000084D7 }, /* GL_TEXTURE23_ARB */
+   { 41995, 0x000084D8 }, /* GL_TEXTURE24 */
+   { 42008, 0x000084D8 }, /* GL_TEXTURE24_ARB */
+   { 42025, 0x000084D9 }, /* GL_TEXTURE25 */
+   { 42038, 0x000084D9 }, /* GL_TEXTURE25_ARB */
+   { 42055, 0x000084DA }, /* GL_TEXTURE26 */
+   { 42068, 0x000084DA }, /* GL_TEXTURE26_ARB */
+   { 42085, 0x000084DB }, /* GL_TEXTURE27 */
+   { 42098, 0x000084DB }, /* GL_TEXTURE27_ARB */
+   { 42115, 0x000084DC }, /* GL_TEXTURE28 */
+   { 42128, 0x000084DC }, /* GL_TEXTURE28_ARB */
+   { 42145, 0x000084DD }, /* GL_TEXTURE29 */
+   { 42158, 0x000084DD }, /* GL_TEXTURE29_ARB */
+   { 42175, 0x000084C2 }, /* GL_TEXTURE2_ARB */
+   { 42191, 0x000084C3 }, /* GL_TEXTURE3 */
+   { 42203, 0x000084DE }, /* GL_TEXTURE30 */
+   { 42216, 0x000084DE }, /* GL_TEXTURE30_ARB */
+   { 42233, 0x000084DF }, /* GL_TEXTURE31 */
+   { 42246, 0x000084DF }, /* GL_TEXTURE31_ARB */
+   { 42263, 0x000084C3 }, /* GL_TEXTURE3_ARB */
+   { 42279, 0x000084C4 }, /* GL_TEXTURE4 */
+   { 42291, 0x000084C4 }, /* GL_TEXTURE4_ARB */
+   { 42307, 0x000084C5 }, /* GL_TEXTURE5 */
+   { 42319, 0x000084C5 }, /* GL_TEXTURE5_ARB */
+   { 42335, 0x000084C6 }, /* GL_TEXTURE6 */
+   { 42347, 0x000084C6 }, /* GL_TEXTURE6_ARB */
+   { 42363, 0x000084C7 }, /* GL_TEXTURE7 */
+   { 42375, 0x000084C7 }, /* GL_TEXTURE7_ARB */
+   { 42391, 0x000084C8 }, /* GL_TEXTURE8 */
+   { 42403, 0x000084C8 }, /* GL_TEXTURE8_ARB */
+   { 42419, 0x000084C9 }, /* GL_TEXTURE9 */
+   { 42431, 0x000084C9 }, /* GL_TEXTURE9_ARB */
+   { 42447, 0x00000DE0 }, /* GL_TEXTURE_1D */
+   { 42461, 0x00008C18 }, /* GL_TEXTURE_1D_ARRAY */
+   { 42481, 0x00008C18 }, /* GL_TEXTURE_1D_ARRAY_EXT */
+   { 42505, 0x00000DE1 }, /* GL_TEXTURE_2D */
+   { 42519, 0x00008C1A }, /* GL_TEXTURE_2D_ARRAY */
+   { 42539, 0x00008C1A }, /* GL_TEXTURE_2D_ARRAY_EXT */
+   { 42563, 0x0000806F }, /* GL_TEXTURE_3D */
+   { 42577, 0x0000806F }, /* GL_TEXTURE_3D_OES */
+   { 42595, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE */
+   { 42617, 0x0000805F }, /* GL_TEXTURE_ALPHA_SIZE_EXT */
+   { 42643, 0x0000813C }, /* GL_TEXTURE_BASE_LEVEL */
+   { 42665, 0x00008068 }, /* GL_TEXTURE_BINDING_1D */
+   { 42687, 0x00008C1C }, /* GL_TEXTURE_BINDING_1D_ARRAY */
+   { 42715, 0x00008C1C }, /* GL_TEXTURE_BINDING_1D_ARRAY_EXT */
+   { 42747, 0x00008069 }, /* GL_TEXTURE_BINDING_2D */
+   { 42769, 0x00008C1D }, /* GL_TEXTURE_BINDING_2D_ARRAY */
+   { 42797, 0x00008C1D }, /* GL_TEXTURE_BINDING_2D_ARRAY_EXT */
+   { 42829, 0x0000806A }, /* GL_TEXTURE_BINDING_3D */
+   { 42851, 0x0000806A }, /* GL_TEXTURE_BINDING_3D_OES */
+   { 42877, 0x00008C2C }, /* GL_TEXTURE_BINDING_BUFFER */
+   { 42903, 0x00008C2C }, /* GL_TEXTURE_BINDING_BUFFER_ARB */
+   { 42933, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP */
+   { 42961, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP_ARB */
+   { 42993, 0x00008514 }, /* GL_TEXTURE_BINDING_CUBE_MAP_OES */
+   { 43025, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE */
+   { 43054, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_ARB */
+   { 43087, 0x000084F6 }, /* GL_TEXTURE_BINDING_RECTANGLE_NV */
+   { 43119, 0x00040000 }, /* GL_TEXTURE_BIT */
+   { 43134, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE */
+   { 43155, 0x0000805E }, /* GL_TEXTURE_BLUE_SIZE_EXT */
+   { 43180, 0x00001005 }, /* GL_TEXTURE_BORDER */
+   { 43198, 0x00001004 }, /* GL_TEXTURE_BORDER_COLOR */
+   { 43222, 0x00008C2A }, /* GL_TEXTURE_BUFFER */
+   { 43240, 0x00008C2A }, /* GL_TEXTURE_BUFFER_ARB */
+   { 43262, 0x00008C2D }, /* GL_TEXTURE_BUFFER_DATA_STORE_BINDING */
+   { 43299, 0x00008C2D }, /* GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB */
+   { 43340, 0x00008C2E }, /* GL_TEXTURE_BUFFER_FORMAT */
+   { 43365, 0x00008C2E }, /* GL_TEXTURE_BUFFER_FORMAT_ARB */
+   { 43394, 0x00008171 }, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */
+   { 43425, 0x00008176 }, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */
+   { 43455, 0x00008172 }, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */
+   { 43485, 0x00008175 }, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */
+   { 43520, 0x00008173 }, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */
+   { 43551, 0x00008174 }, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */
+   { 43589, 0x000080BC }, /* GL_TEXTURE_COLOR_TABLE_SGI */
+   { 43616, 0x000081EF }, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */
+   { 43648, 0x000080BF }, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */
+   { 43682, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC */
+   { 43706, 0x0000884D }, /* GL_TEXTURE_COMPARE_FUNC_ARB */
+   { 43734, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE */
+   { 43758, 0x0000884C }, /* GL_TEXTURE_COMPARE_MODE_ARB */
+   { 43786, 0x0000819B }, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */
+   { 43819, 0x0000819A }, /* GL_TEXTURE_COMPARE_SGIX */
+   { 43843, 0x00001003 }, /* GL_TEXTURE_COMPONENTS */
+   { 43865, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED */
+   { 43887, 0x000086A1 }, /* GL_TEXTURE_COMPRESSED_ARB */
+   { 43913, 0x000086A3 }, /* GL_TEXTURE_COMPRESSED_FORMATS_ARB */
+   { 43947, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */
+   { 43980, 0x000086A0 }, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB */
+   { 44017, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT */
+   { 44045, 0x000084EF }, /* GL_TEXTURE_COMPRESSION_HINT_ARB */
+   { 44077, 0x00008078 }, /* GL_TEXTURE_COORD_ARRAY */
+   { 44100, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */
+   { 44138, 0x0000889A }, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB */
+   { 44180, 0x00008092 }, /* GL_TEXTURE_COORD_ARRAY_POINTER */
+   { 44211, 0x00008088 }, /* GL_TEXTURE_COORD_ARRAY_SIZE */
+   { 44239, 0x0000808A }, /* GL_TEXTURE_COORD_ARRAY_STRIDE */
+   { 44269, 0x00008089 }, /* GL_TEXTURE_COORD_ARRAY_TYPE */
+   { 44297, 0x00008B9D }, /* GL_TEXTURE_CROP_RECT_OES */
+   { 44322, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP */
+   { 44342, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP_ARB */
+   { 44366, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */
+   { 44397, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB */
+   { 44432, 0x00008516 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES */
+   { 44467, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */
+   { 44498, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB */
+   { 44533, 0x00008518 }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES */
+   { 44568, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */
+   { 44599, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB */
+   { 44634, 0x0000851A }, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES */
+   { 44669, 0x00008513 }, /* GL_TEXTURE_CUBE_MAP_OES */
+   { 44693, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */
+   { 44724, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB */
+   { 44759, 0x00008515 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES */
+   { 44794, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */
+   { 44825, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB */
+   { 44860, 0x00008517 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES */
+   { 44895, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */
+   { 44926, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB */
+   { 44961, 0x00008519 }, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES */
+   { 44996, 0x000088F4 }, /* GL_TEXTURE_CUBE_MAP_SEAMLESS */
+   { 45025, 0x00008071 }, /* GL_TEXTURE_DEPTH */
+   { 45042, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE */
+   { 45064, 0x0000884A }, /* GL_TEXTURE_DEPTH_SIZE_ARB */
+   { 45090, 0x00002300 }, /* GL_TEXTURE_ENV */
+   { 45105, 0x00002201 }, /* GL_TEXTURE_ENV_COLOR */
+   { 45126, 0x00002200 }, /* GL_TEXTURE_ENV_MODE */
+   { 45146, 0x00008500 }, /* GL_TEXTURE_FILTER_CONTROL */
+   { 45172, 0x00008500 }, /* GL_TEXTURE_FILTER_CONTROL_EXT */
+   { 45202, 0x00002500 }, /* GL_TEXTURE_GEN_MODE */
+   { 45222, 0x00002500 }, /* GL_TEXTURE_GEN_MODE_OES */
+   { 45246, 0x00000C63 }, /* GL_TEXTURE_GEN_Q */
+   { 45263, 0x00000C62 }, /* GL_TEXTURE_GEN_R */
+   { 45280, 0x00000C60 }, /* GL_TEXTURE_GEN_S */
+   { 45297, 0x00008D60 }, /* GL_TEXTURE_GEN_STR_OES */
+   { 45320, 0x00000C61 }, /* GL_TEXTURE_GEN_T */
+   { 45337, 0x0000819D }, /* GL_TEXTURE_GEQUAL_R_SGIX */
+   { 45362, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE */
+   { 45384, 0x0000805D }, /* GL_TEXTURE_GREEN_SIZE_EXT */
+   { 45410, 0x00001001 }, /* GL_TEXTURE_HEIGHT */
+   { 45428, 0x000080ED }, /* GL_TEXTURE_INDEX_SIZE_EXT */
+   { 45454, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE */
+   { 45480, 0x00008061 }, /* GL_TEXTURE_INTENSITY_SIZE_EXT */
+   { 45510, 0x00001003 }, /* GL_TEXTURE_INTERNAL_FORMAT */
+   { 45537, 0x0000819C }, /* GL_TEXTURE_LEQUAL_R_SGIX */
+   { 45562, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS */
+   { 45582, 0x00008501 }, /* GL_TEXTURE_LOD_BIAS_EXT */
+   { 45606, 0x00008190 }, /* GL_TEXTURE_LOD_BIAS_R_SGIX */
+   { 45633, 0x0000818E }, /* GL_TEXTURE_LOD_BIAS_S_SGIX */
+   { 45660, 0x0000818F }, /* GL_TEXTURE_LOD_BIAS_T_SGIX */
+   { 45687, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE */
+   { 45713, 0x00008060 }, /* GL_TEXTURE_LUMINANCE_SIZE_EXT */
+   { 45743, 0x00002800 }, /* GL_TEXTURE_MAG_FILTER */
+   { 45765, 0x00000BA8 }, /* GL_TEXTURE_MATRIX */
+   { 45783, 0x0000898F }, /* GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES */
+   { 45823, 0x000084FE }, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */
+   { 45853, 0x0000836B }, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */
+   { 45881, 0x00008369 }, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */
+   { 45909, 0x0000836A }, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */
+   { 45937, 0x0000813D }, /* GL_TEXTURE_MAX_LEVEL */
+   { 45958, 0x0000813B }, /* GL_TEXTURE_MAX_LOD */
+   { 45977, 0x00002801 }, /* GL_TEXTURE_MIN_FILTER */
+   { 45999, 0x0000813A }, /* GL_TEXTURE_MIN_LOD */
+   { 46018, 0x00008066 }, /* GL_TEXTURE_PRIORITY */
+   { 46038, 0x000085B7 }, /* GL_TEXTURE_RANGE_LENGTH_APPLE */
+   { 46068, 0x000085B8 }, /* GL_TEXTURE_RANGE_POINTER_APPLE */
+   { 46099, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE */
+   { 46120, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_ARB */
+   { 46145, 0x000084F5 }, /* GL_TEXTURE_RECTANGLE_NV */
+   { 46169, 0x0000805C }, /* GL_TEXTURE_RED_SIZE */
+   { 46189, 0x0000805C }, /* GL_TEXTURE_RED_SIZE_EXT */
+   { 46213, 0x00008067 }, /* GL_TEXTURE_RESIDENT */
+   { 46233, 0x00008C3F }, /* GL_TEXTURE_SHARED_SIZE */
+   { 46256, 0x00000BA5 }, /* GL_TEXTURE_STACK_DEPTH */
+   { 46279, 0x000088F1 }, /* GL_TEXTURE_STENCIL_SIZE */
+   { 46303, 0x000088F1 }, /* GL_TEXTURE_STENCIL_SIZE_EXT */
+   { 46331, 0x000085BC }, /* GL_TEXTURE_STORAGE_HINT_APPLE */
+   { 46361, 0x00008065 }, /* GL_TEXTURE_TOO_LARGE_EXT */
+   { 46386, 0x0000888F }, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */
+   { 46420, 0x00001000 }, /* GL_TEXTURE_WIDTH */
+   { 46437, 0x00008072 }, /* GL_TEXTURE_WRAP_R */
+   { 46455, 0x00008072 }, /* GL_TEXTURE_WRAP_R_OES */
+   { 46477, 0x00002802 }, /* GL_TEXTURE_WRAP_S */
+   { 46495, 0x00002803 }, /* GL_TEXTURE_WRAP_T */
+   { 46513, 0x0000911B }, /* GL_TIMEOUT_EXPIRED */
+   { 46532, 0x000088BF }, /* GL_TIME_ELAPSED_EXT */
+   { 46552, 0x00008648 }, /* GL_TRACK_MATRIX_NV */
+   { 46571, 0x00008649 }, /* GL_TRACK_MATRIX_TRANSFORM_NV */
+   { 46600, 0x00001000 }, /* GL_TRANSFORM_BIT */
+   { 46617, 0x00008E22 }, /* GL_TRANSFORM_FEEDBACK */
+   { 46639, 0x00008E25 }, /* GL_TRANSFORM_FEEDBACK_BINDING */
+   { 46669, 0x00008C8E }, /* GL_TRANSFORM_FEEDBACK_BUFFER */
+   { 46698, 0x00008E24 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */
+   { 46734, 0x00008C8F }, /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING */
+   { 46771, 0x00008C8F }, /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT */
+   { 46812, 0x00008C8E }, /* GL_TRANSFORM_FEEDBACK_BUFFER_EXT */
+   { 46845, 0x00008C7F }, /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE */
+   { 46879, 0x00008C7F }, /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT */
+   { 46917, 0x00008E23 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */
+   { 46953, 0x00008C85 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE */
+   { 46987, 0x00008C85 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT */
+   { 47025, 0x00008C84 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_START */
+   { 47060, 0x00008C84 }, /* GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT */
+   { 47099, 0x00008C88 }, /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN */
+   { 47140, 0x00008C88 }, /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT */
+   { 47185, 0x00008C83 }, /* GL_TRANSFORM_FEEDBACK_VARYINGS */
+   { 47216, 0x00008C83 }, /* GL_TRANSFORM_FEEDBACK_VARYINGS_EXT */
+   { 47251, 0x00008C76 }, /* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH */
+   { 47292, 0x00008C76 }, /* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT */
+   { 47337, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX */
+   { 47363, 0x000084E6 }, /* GL_TRANSPOSE_COLOR_MATRIX_ARB */
+   { 47393, 0x000088B7 }, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */
+   { 47425, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX */
+   { 47455, 0x000084E3 }, /* GL_TRANSPOSE_MODELVIEW_MATRIX_ARB */
+   { 47489, 0x0000862C }, /* GL_TRANSPOSE_NV */
+   { 47505, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX */
+   { 47536, 0x000084E4 }, /* GL_TRANSPOSE_PROJECTION_MATRIX_ARB */
+   { 47571, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX */
+   { 47599, 0x000084E5 }, /* GL_TRANSPOSE_TEXTURE_MATRIX_ARB */
+   { 47631, 0x00000004 }, /* GL_TRIANGLES */
+   { 47644, 0x0000000C }, /* GL_TRIANGLES_ADJACENCY */
+   { 47667, 0x0000000C }, /* GL_TRIANGLES_ADJACENCY_ARB */
+   { 47694, 0x00000006 }, /* GL_TRIANGLE_FAN */
+   { 47710, 0x00008615 }, /* GL_TRIANGLE_MESH_SUN */
+   { 47731, 0x00000005 }, /* GL_TRIANGLE_STRIP */
+   { 47749, 0x0000000D }, /* GL_TRIANGLE_STRIP_ADJACENCY */
+   { 47777, 0x0000000D }, /* GL_TRIANGLE_STRIP_ADJACENCY_ARB */
+   { 47809, 0x00000001 }, /* GL_TRUE */
+   { 47817, 0x00008A1C }, /* GL_UNDEFINED_APPLE */
+   { 47836, 0x00000CF5 }, /* GL_UNPACK_ALIGNMENT */
+   { 47856, 0x0000806E }, /* GL_UNPACK_IMAGE_HEIGHT */
+   { 47879, 0x00000CF1 }, /* GL_UNPACK_LSB_FIRST */
+   { 47899, 0x00000CF2 }, /* GL_UNPACK_ROW_LENGTH */
+   { 47920, 0x0000806D }, /* GL_UNPACK_SKIP_IMAGES */
+   { 47942, 0x00000CF4 }, /* GL_UNPACK_SKIP_PIXELS */
+   { 47964, 0x00000CF3 }, /* GL_UNPACK_SKIP_ROWS */
+   { 47984, 0x00000CF0 }, /* GL_UNPACK_SWAP_BYTES */
+   { 48005, 0x00009118 }, /* GL_UNSIGNALED */
+   { 48019, 0x00001401 }, /* GL_UNSIGNED_BYTE */
+   { 48036, 0x00008362 }, /* GL_UNSIGNED_BYTE_2_3_3_REV */
+   { 48063, 0x00008032 }, /* GL_UNSIGNED_BYTE_3_3_2 */
+   { 48086, 0x00001405 }, /* GL_UNSIGNED_INT */
+   { 48102, 0x00008C3B }, /* GL_UNSIGNED_INT_10F_11F_11F_REV */
+   { 48134, 0x00008036 }, /* GL_UNSIGNED_INT_10_10_10_2 */
+   { 48161, 0x00008DF6 }, /* GL_UNSIGNED_INT_10_10_10_2_OES */
+   { 48192, 0x000084FA }, /* GL_UNSIGNED_INT_24_8 */
+   { 48213, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_EXT */
+   { 48238, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_NV */
+   { 48262, 0x000084FA }, /* GL_UNSIGNED_INT_24_8_OES */
+   { 48287, 0x00008368 }, /* GL_UNSIGNED_INT_2_10_10_10_REV */
+   { 48318, 0x00008368 }, /* GL_UNSIGNED_INT_2_10_10_10_REV_EXT */
+   { 48353, 0x00008C3E }, /* GL_UNSIGNED_INT_5_9_9_9_REV */
+   { 48381, 0x00008035 }, /* GL_UNSIGNED_INT_8_8_8_8 */
+   { 48405, 0x00008367 }, /* GL_UNSIGNED_INT_8_8_8_8_REV */
+   { 48433, 0x00008DD1 }, /* GL_UNSIGNED_INT_SAMPLER_1D */
+   { 48460, 0x00008DD6 }, /* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY */
+   { 48493, 0x00008DD6 }, /* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT */
+   { 48530, 0x00008DD1 }, /* GL_UNSIGNED_INT_SAMPLER_1D_EXT */
+   { 48561, 0x00008DD2 }, /* GL_UNSIGNED_INT_SAMPLER_2D */
+   { 48588, 0x00008DD7 }, /* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY */
+   { 48621, 0x00008DD7 }, /* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT */
+   { 48658, 0x00008DD2 }, /* GL_UNSIGNED_INT_SAMPLER_2D_EXT */
+   { 48689, 0x00008DD5 }, /* GL_UNSIGNED_INT_SAMPLER_2D_RECT */
+   { 48721, 0x00008DD5 }, /* GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT */
+   { 48757, 0x00008DD3 }, /* GL_UNSIGNED_INT_SAMPLER_3D */
+   { 48784, 0x00008DD3 }, /* GL_UNSIGNED_INT_SAMPLER_3D_EXT */
+   { 48815, 0x00008DD8 }, /* GL_UNSIGNED_INT_SAMPLER_BUFFER */
+   { 48846, 0x00008DD8 }, /* GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT */
+   { 48881, 0x00008DD4 }, /* GL_UNSIGNED_INT_SAMPLER_CUBE */
+   { 48910, 0x00008DD4 }, /* GL_UNSIGNED_INT_SAMPLER_CUBE_EXT */
+   { 48943, 0x00008DC6 }, /* GL_UNSIGNED_INT_VEC2 */
+   { 48964, 0x00008DC6 }, /* GL_UNSIGNED_INT_VEC2_EXT */
+   { 48989, 0x00008DC7 }, /* GL_UNSIGNED_INT_VEC3 */
+   { 49010, 0x00008DC7 }, /* GL_UNSIGNED_INT_VEC3_EXT */
+   { 49035, 0x00008DC8 }, /* GL_UNSIGNED_INT_VEC4 */
+   { 49056, 0x00008DC8 }, /* GL_UNSIGNED_INT_VEC4_EXT */
+   { 49081, 0x00008C17 }, /* GL_UNSIGNED_NORMALIZED */
+   { 49104, 0x00001403 }, /* GL_UNSIGNED_SHORT */
+   { 49122, 0x00008366 }, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */
+   { 49152, 0x00008366 }, /* GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT */
+   { 49186, 0x00008033 }, /* GL_UNSIGNED_SHORT_4_4_4_4 */
+   { 49212, 0x00008365 }, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */
+   { 49242, 0x00008365 }, /* GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT */
+   { 49276, 0x00008034 }, /* GL_UNSIGNED_SHORT_5_5_5_1 */
+   { 49302, 0x00008363 }, /* GL_UNSIGNED_SHORT_5_6_5 */
+   { 49326, 0x00008364 }, /* GL_UNSIGNED_SHORT_5_6_5_REV */
+   { 49354, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_APPLE */
+   { 49382, 0x000085BA }, /* GL_UNSIGNED_SHORT_8_8_MESA */
+   { 49409, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */
+   { 49441, 0x000085BB }, /* GL_UNSIGNED_SHORT_8_8_REV_MESA */
+   { 49472, 0x00008CA2 }, /* GL_UPPER_LEFT */
+   { 49486, 0x00002A20 }, /* GL_V2F */
+   { 49493, 0x00002A21 }, /* GL_V3F */
+   { 49500, 0x00008B83 }, /* GL_VALIDATE_STATUS */
+   { 49519, 0x00001F00 }, /* GL_VENDOR */
+   { 49529, 0x00001F02 }, /* GL_VERSION */
+   { 49540, 0x00008074 }, /* GL_VERTEX_ARRAY */
+   { 49556, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING */
+   { 49580, 0x000085B5 }, /* GL_VERTEX_ARRAY_BINDING_APPLE */
+   { 49610, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING */
+   { 49641, 0x00008896 }, /* GL_VERTEX_ARRAY_BUFFER_BINDING_ARB */
+   { 49676, 0x0000808E }, /* GL_VERTEX_ARRAY_POINTER */
+   { 49700, 0x0000807A }, /* GL_VERTEX_ARRAY_SIZE */
+   { 49721, 0x0000807C }, /* GL_VERTEX_ARRAY_STRIDE */
+   { 49744, 0x0000807B }, /* GL_VERTEX_ARRAY_TYPE */
+   { 49765, 0x00008650 }, /* GL_VERTEX_ATTRIB_ARRAY0_NV */
+   { 49792, 0x0000865A }, /* GL_VERTEX_ATTRIB_ARRAY10_NV */
+   { 49820, 0x0000865B }, /* GL_VERTEX_ATTRIB_ARRAY11_NV */
+   { 49848, 0x0000865C }, /* GL_VERTEX_ATTRIB_ARRAY12_NV */
+   { 49876, 0x0000865D }, /* GL_VERTEX_ATTRIB_ARRAY13_NV */
+   { 49904, 0x0000865E }, /* GL_VERTEX_ATTRIB_ARRAY14_NV */
+   { 49932, 0x0000865F }, /* GL_VERTEX_ATTRIB_ARRAY15_NV */
+   { 49960, 0x00008651 }, /* GL_VERTEX_ATTRIB_ARRAY1_NV */
+   { 49987, 0x00008652 }, /* GL_VERTEX_ATTRIB_ARRAY2_NV */
+   { 50014, 0x00008653 }, /* GL_VERTEX_ATTRIB_ARRAY3_NV */
+   { 50041, 0x00008654 }, /* GL_VERTEX_ATTRIB_ARRAY4_NV */
+   { 50068, 0x00008655 }, /* GL_VERTEX_ATTRIB_ARRAY5_NV */
+   { 50095, 0x00008656 }, /* GL_VERTEX_ATTRIB_ARRAY6_NV */
+   { 50122, 0x00008657 }, /* GL_VERTEX_ATTRIB_ARRAY7_NV */
+   { 50149, 0x00008658 }, /* GL_VERTEX_ATTRIB_ARRAY8_NV */
+   { 50176, 0x00008659 }, /* GL_VERTEX_ATTRIB_ARRAY9_NV */
+   { 50203, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */
+   { 50241, 0x0000889F }, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB */
+   { 50283, 0x000088FE }, /* GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB */
+   { 50318, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */
+   { 50349, 0x00008622 }, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB */
+   { 50384, 0x000088FD }, /* GL_VERTEX_ATTRIB_ARRAY_INTEGER */
+   { 50415, 0x000088FD }, /* GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT */
+   { 50450, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */
+   { 50484, 0x0000886A }, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB */
+   { 50522, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */
+   { 50553, 0x00008645 }, /* GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB */
+   { 50588, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */
+   { 50616, 0x00008623 }, /* GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB */
+   { 50648, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */
+   { 50678, 0x00008624 }, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB */
+   { 50712, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */
+   { 50740, 0x00008625 }, /* GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB */
+   { 50772, 0x000086A7 }, /* GL_VERTEX_BLEND_ARB */
+   { 50792, 0x00008620 }, /* GL_VERTEX_PROGRAM_ARB */
+   { 50814, 0x0000864A }, /* GL_VERTEX_PROGRAM_BINDING_NV */
+   { 50843, 0x00008620 }, /* GL_VERTEX_PROGRAM_NV */
+   { 50864, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE */
+   { 50893, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_ARB */
+   { 50926, 0x00008642 }, /* GL_VERTEX_PROGRAM_POINT_SIZE_NV */
+   { 50958, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE */
+   { 50985, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_ARB */
+   { 51016, 0x00008643 }, /* GL_VERTEX_PROGRAM_TWO_SIDE_NV */
+   { 51046, 0x00008B31 }, /* GL_VERTEX_SHADER */
+   { 51063, 0x00008B31 }, /* GL_VERTEX_SHADER_ARB */
+   { 51084, 0x00008621 }, /* GL_VERTEX_STATE_PROGRAM_NV */
+   { 51111, 0x00000BA2 }, /* GL_VIEWPORT */
+   { 51123, 0x00000800 }, /* GL_VIEWPORT_BIT */
+   { 51139, 0x00008A1A }, /* GL_VOLATILE_APPLE */
+   { 51157, 0x0000911D }, /* GL_WAIT_FAILED */
+   { 51172, 0x000086AD }, /* GL_WEIGHT_ARRAY_ARB */
+   { 51192, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */
+   { 51223, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB */
+   { 51258, 0x0000889E }, /* GL_WEIGHT_ARRAY_BUFFER_BINDING_OES */
+   { 51293, 0x000086AD }, /* GL_WEIGHT_ARRAY_OES */
+   { 51313, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_ARB */
+   { 51341, 0x000086AC }, /* GL_WEIGHT_ARRAY_POINTER_OES */
+   { 51369, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_ARB */
+   { 51394, 0x000086AB }, /* GL_WEIGHT_ARRAY_SIZE_OES */
+   { 51419, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_ARB */
+   { 51446, 0x000086AA }, /* GL_WEIGHT_ARRAY_STRIDE_OES */
+   { 51473, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_ARB */
+   { 51498, 0x000086A9 }, /* GL_WEIGHT_ARRAY_TYPE_OES */
+   { 51523, 0x000086A6 }, /* GL_WEIGHT_SUM_UNITY_ARB */
+   { 51547, 0x000081D4 }, /* GL_WRAP_BORDER_SUN */
+   { 51566, 0x000088B9 }, /* GL_WRITE_ONLY */
+   { 51580, 0x000088B9 }, /* GL_WRITE_ONLY_ARB */
+   { 51598, 0x000088B9 }, /* GL_WRITE_ONLY_OES */
+   { 51616, 0x00001506 }, /* GL_XOR */
+   { 51623, 0x000085B9 }, /* GL_YCBCR_422_APPLE */
+   { 51642, 0x00008757 }, /* GL_YCBCR_MESA */
+   { 51656, 0x00000000 }, /* GL_ZERO */
+   { 51664, 0x00000D16 }, /* GL_ZOOM_X */
+   { 51674, 0x00000D17 }, /* GL_ZOOM_Y */
 };
 
-static const unsigned reduced_enums[1552] =
+static const unsigned reduced_enums[1556] =
 {
-       535, /* GL_FALSE */
-       827, /* GL_LINES */
-       831, /* GL_LINE_LOOP */
-       838, /* GL_LINE_STRIP */
-      2135, /* GL_TRIANGLES */
-      2140, /* GL_TRIANGLE_STRIP */
-      2138, /* GL_TRIANGLE_FAN */
-      1507, /* GL_QUADS */
-      1511, /* GL_QUAD_STRIP */
-      1378, /* GL_POLYGON */
-       828, /* GL_LINES_ADJACENCY */
-       839, /* GL_LINE_STRIP_ADJACENCY */
-      2136, /* GL_TRIANGLES_ADJACENCY */
-      2141, /* GL_TRIANGLE_STRIP_ADJACENCY */
-      1390, /* GL_POLYGON_STIPPLE_BIT */
-      1333, /* GL_PIXEL_MODE_BIT */
-       814, /* GL_LIGHTING_BIT */
-       568, /* GL_FOG_BIT */
+       538, /* GL_FALSE */
+       831, /* GL_LINES */
+       835, /* GL_LINE_LOOP */
+       842, /* GL_LINE_STRIP */
+      2146, /* GL_TRIANGLES */
+      2151, /* GL_TRIANGLE_STRIP */
+      2149, /* GL_TRIANGLE_FAN */
+      1512, /* GL_QUADS */
+      1516, /* GL_QUAD_STRIP */
+      1383, /* GL_POLYGON */
+       832, /* GL_LINES_ADJACENCY */
+       843, /* GL_LINE_STRIP_ADJACENCY */
+      2147, /* GL_TRIANGLES_ADJACENCY */
+      2152, /* GL_TRIANGLE_STRIP_ADJACENCY */
+      1395, /* GL_POLYGON_STIPPLE_BIT */
+      1338, /* GL_PIXEL_MODE_BIT */
+       818, /* GL_LIGHTING_BIT */
+       572, /* GL_FOG_BIT */
          8, /* GL_ACCUM */
-       850, /* GL_LOAD */
-      1596, /* GL_RETURN */
-      1200, /* GL_MULT */
+       854, /* GL_LOAD */
+      1601, /* GL_RETURN */
+      1205, /* GL_MULT */
         24, /* GL_ADD */
-      1216, /* GL_NEVER */
-       804, /* GL_LESS */
-       525, /* GL_EQUAL */
-       803, /* GL_LEQUAL */
-       691, /* GL_GREATER */
-      1233, /* GL_NOTEQUAL */
-       690, /* GL_GEQUAL */
+      1221, /* GL_NEVER */
+       808, /* GL_LESS */
+       528, /* GL_EQUAL */
+       807, /* GL_LEQUAL */
+       695, /* GL_GREATER */
+      1238, /* GL_NOTEQUAL */
+       694, /* GL_GEQUAL */
         55, /* GL_ALWAYS */
-      1803, /* GL_SRC_COLOR */
-      1266, /* GL_ONE_MINUS_SRC_COLOR */
-      1801, /* GL_SRC_ALPHA */
-      1265, /* GL_ONE_MINUS_SRC_ALPHA */
-       504, /* GL_DST_ALPHA */
-      1263, /* GL_ONE_MINUS_DST_ALPHA */
-       505, /* GL_DST_COLOR */
-      1264, /* GL_ONE_MINUS_DST_COLOR */
-      1802, /* GL_SRC_ALPHA_SATURATE */
-       667, /* GL_FRONT_LEFT */
-       668, /* GL_FRONT_RIGHT */
+      1810, /* GL_SRC_COLOR */
+      1271, /* GL_ONE_MINUS_SRC_COLOR */
+      1808, /* GL_SRC_ALPHA */
+      1270, /* GL_ONE_MINUS_SRC_ALPHA */
+       507, /* GL_DST_ALPHA */
+      1268, /* GL_ONE_MINUS_DST_ALPHA */
+       508, /* GL_DST_COLOR */
+      1269, /* GL_ONE_MINUS_DST_COLOR */
+      1809, /* GL_SRC_ALPHA_SATURATE */
+       671, /* GL_FRONT_LEFT */
+       672, /* GL_FRONT_RIGHT */
         77, /* GL_BACK_LEFT */
         78, /* GL_BACK_RIGHT */
-       664, /* GL_FRONT */
+       668, /* GL_FRONT */
         76, /* GL_BACK */
-       802, /* GL_LEFT */
-      1685, /* GL_RIGHT */
-       665, /* GL_FRONT_AND_BACK */
+       806, /* GL_LEFT */
+      1691, /* GL_RIGHT */
+       669, /* GL_FRONT_AND_BACK */
         71, /* GL_AUX0 */
         72, /* GL_AUX1 */
         73, /* GL_AUX2 */
         74, /* GL_AUX3 */
-       790, /* GL_INVALID_ENUM */
-       795, /* GL_INVALID_VALUE */
-       794, /* GL_INVALID_OPERATION */
-      1808, /* GL_STACK_OVERFLOW */
-      1809, /* GL_STACK_UNDERFLOW */
-      1291, /* GL_OUT_OF_MEMORY */
-       791, /* GL_INVALID_FRAMEBUFFER_OPERATION */
+       794, /* GL_INVALID_ENUM */
+       799, /* GL_INVALID_VALUE */
+       798, /* GL_INVALID_OPERATION */
+      1815, /* GL_STACK_OVERFLOW */
+      1816, /* GL_STACK_UNDERFLOW */
+      1296, /* GL_OUT_OF_MEMORY */
+       795, /* GL_INVALID_FRAMEBUFFER_OPERATION */
          0, /* GL_2D */
          2, /* GL_3D */
          3, /* GL_3D_COLOR */
          4, /* GL_3D_COLOR_TEXTURE */
          6, /* GL_4D_COLOR_TEXTURE */
-      1311, /* GL_PASS_THROUGH_TOKEN */
-      1377, /* GL_POINT_TOKEN */
-       841, /* GL_LINE_TOKEN */
-      1391, /* GL_POLYGON_TOKEN */
+      1316, /* GL_PASS_THROUGH_TOKEN */
+      1382, /* GL_POINT_TOKEN */
+       845, /* GL_LINE_TOKEN */
+      1396, /* GL_POLYGON_TOKEN */
         87, /* GL_BITMAP_TOKEN */
-       503, /* GL_DRAW_PIXEL_TOKEN */
-       349, /* GL_COPY_PIXEL_TOKEN */
-       832, /* GL_LINE_RESET_TOKEN */
-       528, /* GL_EXP */
-       529, /* GL_EXP2 */
-       386, /* GL_CW */
+       506, /* GL_DRAW_PIXEL_TOKEN */
+       352, /* GL_COPY_PIXEL_TOKEN */
+       836, /* GL_LINE_RESET_TOKEN */
+       531, /* GL_EXP */
+       532, /* GL_EXP2 */
+       389, /* GL_CW */
        154, /* GL_CCW */
-       184, /* GL_COEFF */
-      1288, /* GL_ORDER */
-       440, /* GL_DOMAIN */
-       359, /* GL_CURRENT_COLOR */
-       362, /* GL_CURRENT_INDEX */
-       368, /* GL_CURRENT_NORMAL */
-       382, /* GL_CURRENT_TEXTURE_COORDS */
-       374, /* GL_CURRENT_RASTER_COLOR */
-       376, /* GL_CURRENT_RASTER_INDEX */
-       380, /* GL_CURRENT_RASTER_TEXTURE_COORDS */
-       377, /* GL_CURRENT_RASTER_POSITION */
-       378, /* GL_CURRENT_RASTER_POSITION_VALID */
-       375, /* GL_CURRENT_RASTER_DISTANCE */
-      1369, /* GL_POINT_SMOOTH */
-      1353, /* GL_POINT_SIZE */
-      1368, /* GL_POINT_SIZE_RANGE */
-      1359, /* GL_POINT_SIZE_GRANULARITY */
-       833, /* GL_LINE_SMOOTH */
-       842, /* GL_LINE_WIDTH */
-       844, /* GL_LINE_WIDTH_RANGE */
-       843, /* GL_LINE_WIDTH_GRANULARITY */
-       835, /* GL_LINE_STIPPLE */
-       836, /* GL_LINE_STIPPLE_PATTERN */
-       837, /* GL_LINE_STIPPLE_REPEAT */
-       849, /* GL_LIST_MODE */
-      1056, /* GL_MAX_LIST_NESTING */
-       846, /* GL_LIST_BASE */
-       848, /* GL_LIST_INDEX */
-      1380, /* GL_POLYGON_MODE */
-      1387, /* GL_POLYGON_SMOOTH */
-      1389, /* GL_POLYGON_STIPPLE */
-       514, /* GL_EDGE_FLAG */
-       352, /* GL_CULL_FACE */
-       353, /* GL_CULL_FACE_MODE */
-       666, /* GL_FRONT_FACE */
-       813, /* GL_LIGHTING */
-       818, /* GL_LIGHT_MODEL_LOCAL_VIEWER */
-       819, /* GL_LIGHT_MODEL_TWO_SIDE */
-       815, /* GL_LIGHT_MODEL_AMBIENT */
-      1750, /* GL_SHADE_MODEL */
-       232, /* GL_COLOR_MATERIAL_FACE */
-       233, /* GL_COLOR_MATERIAL_PARAMETER */
-       231, /* GL_COLOR_MATERIAL */
-       567, /* GL_FOG */
-       589, /* GL_FOG_INDEX */
-       585, /* GL_FOG_DENSITY */
-       593, /* GL_FOG_START */
-       587, /* GL_FOG_END */
-       590, /* GL_FOG_MODE */
-       569, /* GL_FOG_COLOR */
-       425, /* GL_DEPTH_RANGE */
-       434, /* GL_DEPTH_TEST */
-       437, /* GL_DEPTH_WRITEMASK */
-       410, /* GL_DEPTH_CLEAR_VALUE */
-       424, /* GL_DEPTH_FUNC */
+       187, /* GL_COEFF */
+      1293, /* GL_ORDER */
+       443, /* GL_DOMAIN */
+       362, /* GL_CURRENT_COLOR */
+       365, /* GL_CURRENT_INDEX */
+       371, /* GL_CURRENT_NORMAL */
+       385, /* GL_CURRENT_TEXTURE_COORDS */
+       377, /* GL_CURRENT_RASTER_COLOR */
+       379, /* GL_CURRENT_RASTER_INDEX */
+       383, /* GL_CURRENT_RASTER_TEXTURE_COORDS */
+       380, /* GL_CURRENT_RASTER_POSITION */
+       381, /* GL_CURRENT_RASTER_POSITION_VALID */
+       378, /* GL_CURRENT_RASTER_DISTANCE */
+      1374, /* GL_POINT_SMOOTH */
+      1358, /* GL_POINT_SIZE */
+      1373, /* GL_POINT_SIZE_RANGE */
+      1364, /* GL_POINT_SIZE_GRANULARITY */
+       837, /* GL_LINE_SMOOTH */
+       846, /* GL_LINE_WIDTH */
+       848, /* GL_LINE_WIDTH_RANGE */
+       847, /* GL_LINE_WIDTH_GRANULARITY */
+       839, /* GL_LINE_STIPPLE */
+       840, /* GL_LINE_STIPPLE_PATTERN */
+       841, /* GL_LINE_STIPPLE_REPEAT */
+       853, /* GL_LIST_MODE */
+      1060, /* GL_MAX_LIST_NESTING */
+       850, /* GL_LIST_BASE */
+       852, /* GL_LIST_INDEX */
+      1385, /* GL_POLYGON_MODE */
+      1392, /* GL_POLYGON_SMOOTH */
+      1394, /* GL_POLYGON_STIPPLE */
+       517, /* GL_EDGE_FLAG */
+       355, /* GL_CULL_FACE */
+       356, /* GL_CULL_FACE_MODE */
+       670, /* GL_FRONT_FACE */
+       817, /* GL_LIGHTING */
+       822, /* GL_LIGHT_MODEL_LOCAL_VIEWER */
+       823, /* GL_LIGHT_MODEL_TWO_SIDE */
+       819, /* GL_LIGHT_MODEL_AMBIENT */
+      1757, /* GL_SHADE_MODEL */
+       235, /* GL_COLOR_MATERIAL_FACE */
+       236, /* GL_COLOR_MATERIAL_PARAMETER */
+       234, /* GL_COLOR_MATERIAL */
+       571, /* GL_FOG */
+       593, /* GL_FOG_INDEX */
+       589, /* GL_FOG_DENSITY */
+       597, /* GL_FOG_START */
+       591, /* GL_FOG_END */
+       594, /* GL_FOG_MODE */
+       573, /* GL_FOG_COLOR */
+       428, /* GL_DEPTH_RANGE */
+       437, /* GL_DEPTH_TEST */
+       440, /* GL_DEPTH_WRITEMASK */
+       413, /* GL_DEPTH_CLEAR_VALUE */
+       427, /* GL_DEPTH_FUNC */
         12, /* GL_ACCUM_CLEAR_VALUE */
-      1853, /* GL_STENCIL_TEST */
-      1834, /* GL_STENCIL_CLEAR_VALUE */
-      1836, /* GL_STENCIL_FUNC */
-      1855, /* GL_STENCIL_VALUE_MASK */
-      1835, /* GL_STENCIL_FAIL */
-      1850, /* GL_STENCIL_PASS_DEPTH_FAIL */
-      1851, /* GL_STENCIL_PASS_DEPTH_PASS */
-      1852, /* GL_STENCIL_REF */
-      1856, /* GL_STENCIL_WRITEMASK */
-      1006, /* GL_MATRIX_MODE */
-      1222, /* GL_NORMALIZE */
-      2267, /* GL_VIEWPORT */
-      1195, /* GL_MODELVIEW_STACK_DEPTH */
-      1481, /* GL_PROJECTION_STACK_DEPTH */
-      2089, /* GL_TEXTURE_STACK_DEPTH */
-      1192, /* GL_MODELVIEW_MATRIX */
-      1479, /* GL_PROJECTION_MATRIX */
-      2069, /* GL_TEXTURE_MATRIX */
+      1860, /* GL_STENCIL_TEST */
+      1841, /* GL_STENCIL_CLEAR_VALUE */
+      1843, /* GL_STENCIL_FUNC */
+      1862, /* GL_STENCIL_VALUE_MASK */
+      1842, /* GL_STENCIL_FAIL */
+      1857, /* GL_STENCIL_PASS_DEPTH_FAIL */
+      1858, /* GL_STENCIL_PASS_DEPTH_PASS */
+      1859, /* GL_STENCIL_REF */
+      1863, /* GL_STENCIL_WRITEMASK */
+      1010, /* GL_MATRIX_MODE */
+      1227, /* GL_NORMALIZE */
+      2278, /* GL_VIEWPORT */
+      1200, /* GL_MODELVIEW_STACK_DEPTH */
+      1486, /* GL_PROJECTION_STACK_DEPTH */
+      2100, /* GL_TEXTURE_STACK_DEPTH */
+      1197, /* GL_MODELVIEW_MATRIX */
+      1484, /* GL_PROJECTION_MATRIX */
+      2080, /* GL_TEXTURE_MATRIX */
         69, /* GL_ATTRIB_STACK_DEPTH */
-       166, /* GL_CLIENT_ATTRIB_STACK_DEPTH */
+       169, /* GL_CLIENT_ATTRIB_STACK_DEPTH */
         51, /* GL_ALPHA_TEST */
         52, /* GL_ALPHA_TEST_FUNC */
         53, /* GL_ALPHA_TEST_REF */
-       439, /* GL_DITHER */
+       442, /* GL_DITHER */
         91, /* GL_BLEND_DST */
        105, /* GL_BLEND_SRC */
         88, /* GL_BLEND */
-       852, /* GL_LOGIC_OP_MODE */
-       739, /* GL_INDEX_LOGIC_OP */
-       230, /* GL_COLOR_LOGIC_OP */
+       856, /* GL_LOGIC_OP_MODE */
+       743, /* GL_INDEX_LOGIC_OP */
+       233, /* GL_COLOR_LOGIC_OP */
         75, /* GL_AUX_BUFFERS */
-       450, /* GL_DRAW_BUFFER */
-      1534, /* GL_READ_BUFFER */
-      1727, /* GL_SCISSOR_BOX */
-      1728, /* GL_SCISSOR_TEST */
-       738, /* GL_INDEX_CLEAR_VALUE */
-       743, /* GL_INDEX_WRITEMASK */
-       227, /* GL_COLOR_CLEAR_VALUE */
-       269, /* GL_COLOR_WRITEMASK */
-       740, /* GL_INDEX_MODE */
-      1674, /* GL_RGBA_MODE */
-       449, /* GL_DOUBLEBUFFER */
-      1857, /* GL_STEREO */
-      1588, /* GL_RENDER_MODE */
-      1312, /* GL_PERSPECTIVE_CORRECTION_HINT */
-      1370, /* GL_POINT_SMOOTH_HINT */
-       834, /* GL_LINE_SMOOTH_HINT */
-      1388, /* GL_POLYGON_SMOOTH_HINT */
-       588, /* GL_FOG_HINT */
-      2049, /* GL_TEXTURE_GEN_S */
-      2051, /* GL_TEXTURE_GEN_T */
-      2048, /* GL_TEXTURE_GEN_R */
-      2047, /* GL_TEXTURE_GEN_Q */
-      1325, /* GL_PIXEL_MAP_I_TO_I */
-      1331, /* GL_PIXEL_MAP_S_TO_S */
-      1327, /* GL_PIXEL_MAP_I_TO_R */
-      1323, /* GL_PIXEL_MAP_I_TO_G */
-      1321, /* GL_PIXEL_MAP_I_TO_B */
-      1319, /* GL_PIXEL_MAP_I_TO_A */
-      1329, /* GL_PIXEL_MAP_R_TO_R */
-      1317, /* GL_PIXEL_MAP_G_TO_G */
-      1315, /* GL_PIXEL_MAP_B_TO_B */
-      1313, /* GL_PIXEL_MAP_A_TO_A */
-      1326, /* GL_PIXEL_MAP_I_TO_I_SIZE */
-      1332, /* GL_PIXEL_MAP_S_TO_S_SIZE */
-      1328, /* GL_PIXEL_MAP_I_TO_R_SIZE */
-      1324, /* GL_PIXEL_MAP_I_TO_G_SIZE */
-      1322, /* GL_PIXEL_MAP_I_TO_B_SIZE */
-      1320, /* GL_PIXEL_MAP_I_TO_A_SIZE */
-      1330, /* GL_PIXEL_MAP_R_TO_R_SIZE */
-      1318, /* GL_PIXEL_MAP_G_TO_G_SIZE */
-      1316, /* GL_PIXEL_MAP_B_TO_B_SIZE */
-      1314, /* GL_PIXEL_MAP_A_TO_A_SIZE */
-      2152, /* GL_UNPACK_SWAP_BYTES */
-      2147, /* GL_UNPACK_LSB_FIRST */
-      2148, /* GL_UNPACK_ROW_LENGTH */
-      2151, /* GL_UNPACK_SKIP_ROWS */
-      2150, /* GL_UNPACK_SKIP_PIXELS */
-      2145, /* GL_UNPACK_ALIGNMENT */
-      1300, /* GL_PACK_SWAP_BYTES */
-      1295, /* GL_PACK_LSB_FIRST */
-      1296, /* GL_PACK_ROW_LENGTH */
-      1299, /* GL_PACK_SKIP_ROWS */
-      1298, /* GL_PACK_SKIP_PIXELS */
-      1292, /* GL_PACK_ALIGNMENT */
-       947, /* GL_MAP_COLOR */
-       952, /* GL_MAP_STENCIL */
-       742, /* GL_INDEX_SHIFT */
-       741, /* GL_INDEX_OFFSET */
-      1550, /* GL_RED_SCALE */
-      1546, /* GL_RED_BIAS */
-      2293, /* GL_ZOOM_X */
-      2294, /* GL_ZOOM_Y */
-       697, /* GL_GREEN_SCALE */
-       693, /* GL_GREEN_BIAS */
+       453, /* GL_DRAW_BUFFER */
+      1539, /* GL_READ_BUFFER */
+      1734, /* GL_SCISSOR_BOX */
+      1735, /* GL_SCISSOR_TEST */
+       742, /* GL_INDEX_CLEAR_VALUE */
+       747, /* GL_INDEX_WRITEMASK */
+       230, /* GL_COLOR_CLEAR_VALUE */
+       272, /* GL_COLOR_WRITEMASK */
+       744, /* GL_INDEX_MODE */
+      1680, /* GL_RGBA_MODE */
+       452, /* GL_DOUBLEBUFFER */
+      1864, /* GL_STEREO */
+      1593, /* GL_RENDER_MODE */
+      1317, /* GL_PERSPECTIVE_CORRECTION_HINT */
+      1375, /* GL_POINT_SMOOTH_HINT */
+       838, /* GL_LINE_SMOOTH_HINT */
+      1393, /* GL_POLYGON_SMOOTH_HINT */
+       592, /* GL_FOG_HINT */
+      2060, /* GL_TEXTURE_GEN_S */
+      2062, /* GL_TEXTURE_GEN_T */
+      2059, /* GL_TEXTURE_GEN_R */
+      2058, /* GL_TEXTURE_GEN_Q */
+      1330, /* GL_PIXEL_MAP_I_TO_I */
+      1336, /* GL_PIXEL_MAP_S_TO_S */
+      1332, /* GL_PIXEL_MAP_I_TO_R */
+      1328, /* GL_PIXEL_MAP_I_TO_G */
+      1326, /* GL_PIXEL_MAP_I_TO_B */
+      1324, /* GL_PIXEL_MAP_I_TO_A */
+      1334, /* GL_PIXEL_MAP_R_TO_R */
+      1322, /* GL_PIXEL_MAP_G_TO_G */
+      1320, /* GL_PIXEL_MAP_B_TO_B */
+      1318, /* GL_PIXEL_MAP_A_TO_A */
+      1331, /* GL_PIXEL_MAP_I_TO_I_SIZE */
+      1337, /* GL_PIXEL_MAP_S_TO_S_SIZE */
+      1333, /* GL_PIXEL_MAP_I_TO_R_SIZE */
+      1329, /* GL_PIXEL_MAP_I_TO_G_SIZE */
+      1327, /* GL_PIXEL_MAP_I_TO_B_SIZE */
+      1325, /* GL_PIXEL_MAP_I_TO_A_SIZE */
+      1335, /* GL_PIXEL_MAP_R_TO_R_SIZE */
+      1323, /* GL_PIXEL_MAP_G_TO_G_SIZE */
+      1321, /* GL_PIXEL_MAP_B_TO_B_SIZE */
+      1319, /* GL_PIXEL_MAP_A_TO_A_SIZE */
+      2163, /* GL_UNPACK_SWAP_BYTES */
+      2158, /* GL_UNPACK_LSB_FIRST */
+      2159, /* GL_UNPACK_ROW_LENGTH */
+      2162, /* GL_UNPACK_SKIP_ROWS */
+      2161, /* GL_UNPACK_SKIP_PIXELS */
+      2156, /* GL_UNPACK_ALIGNMENT */
+      1305, /* GL_PACK_SWAP_BYTES */
+      1300, /* GL_PACK_LSB_FIRST */
+      1301, /* GL_PACK_ROW_LENGTH */
+      1304, /* GL_PACK_SKIP_ROWS */
+      1303, /* GL_PACK_SKIP_PIXELS */
+      1297, /* GL_PACK_ALIGNMENT */
+       951, /* GL_MAP_COLOR */
+       956, /* GL_MAP_STENCIL */
+       746, /* GL_INDEX_SHIFT */
+       745, /* GL_INDEX_OFFSET */
+      1555, /* GL_RED_SCALE */
+      1551, /* GL_RED_BIAS */
+      2304, /* GL_ZOOM_X */
+      2305, /* GL_ZOOM_Y */
+       701, /* GL_GREEN_SCALE */
+       697, /* GL_GREEN_BIAS */
        115, /* GL_BLUE_SCALE */
        111, /* GL_BLUE_BIAS */
         50, /* GL_ALPHA_SCALE */
         47, /* GL_ALPHA_BIAS */
-       426, /* GL_DEPTH_SCALE */
-       402, /* GL_DEPTH_BIAS */
-      1038, /* GL_MAX_EVAL_ORDER */
-      1055, /* GL_MAX_LIGHTS */
-      1018, /* GL_MAX_CLIP_DISTANCES */
-      1110, /* GL_MAX_TEXTURE_SIZE */
-      1062, /* GL_MAX_PIXEL_MAP_TABLE */
-      1014, /* GL_MAX_ATTRIB_STACK_DEPTH */
-      1058, /* GL_MAX_MODELVIEW_STACK_DEPTH */
-      1059, /* GL_MAX_NAME_STACK_DEPTH */
-      1090, /* GL_MAX_PROJECTION_STACK_DEPTH */
-      1111, /* GL_MAX_TEXTURE_STACK_DEPTH */
-      1137, /* GL_MAX_VIEWPORT_DIMS */
-      1015, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */
-      1867, /* GL_SUBPIXEL_BITS */
-       737, /* GL_INDEX_BITS */
-      1547, /* GL_RED_BITS */
-       694, /* GL_GREEN_BITS */
+       429, /* GL_DEPTH_SCALE */
+       405, /* GL_DEPTH_BIAS */
+      1042, /* GL_MAX_EVAL_ORDER */
+      1059, /* GL_MAX_LIGHTS */
+      1022, /* GL_MAX_CLIP_DISTANCES */
+      1115, /* GL_MAX_TEXTURE_SIZE */
+      1066, /* GL_MAX_PIXEL_MAP_TABLE */
+      1018, /* GL_MAX_ATTRIB_STACK_DEPTH */
+      1062, /* GL_MAX_MODELVIEW_STACK_DEPTH */
+      1063, /* GL_MAX_NAME_STACK_DEPTH */
+      1094, /* GL_MAX_PROJECTION_STACK_DEPTH */
+      1116, /* GL_MAX_TEXTURE_STACK_DEPTH */
+      1142, /* GL_MAX_VIEWPORT_DIMS */
+      1019, /* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH */
+      1874, /* GL_SUBPIXEL_BITS */
+       741, /* GL_INDEX_BITS */
+      1552, /* GL_RED_BITS */
+       698, /* GL_GREEN_BITS */
        112, /* GL_BLUE_BITS */
         48, /* GL_ALPHA_BITS */
-       403, /* GL_DEPTH_BITS */
-      1831, /* GL_STENCIL_BITS */
+       406, /* GL_DEPTH_BITS */
+      1838, /* GL_STENCIL_BITS */
         14, /* GL_ACCUM_RED_BITS */
         13, /* GL_ACCUM_GREEN_BITS */
         10, /* GL_ACCUM_BLUE_BITS */
          9, /* GL_ACCUM_ALPHA_BITS */
-      1209, /* GL_NAME_STACK_DEPTH */
+      1214, /* GL_NAME_STACK_DEPTH */
         70, /* GL_AUTO_NORMAL */
-       893, /* GL_MAP1_COLOR_4 */
-       896, /* GL_MAP1_INDEX */
-       897, /* GL_MAP1_NORMAL */
-       898, /* GL_MAP1_TEXTURE_COORD_1 */
-       899, /* GL_MAP1_TEXTURE_COORD_2 */
-       900, /* GL_MAP1_TEXTURE_COORD_3 */
-       901, /* GL_MAP1_TEXTURE_COORD_4 */
-       902, /* GL_MAP1_VERTEX_3 */
-       903, /* GL_MAP1_VERTEX_4 */
-       920, /* GL_MAP2_COLOR_4 */
-       923, /* GL_MAP2_INDEX */
-       924, /* GL_MAP2_NORMAL */
-       925, /* GL_MAP2_TEXTURE_COORD_1 */
-       926, /* GL_MAP2_TEXTURE_COORD_2 */
-       927, /* GL_MAP2_TEXTURE_COORD_3 */
-       928, /* GL_MAP2_TEXTURE_COORD_4 */
-       929, /* GL_MAP2_VERTEX_3 */
-       930, /* GL_MAP2_VERTEX_4 */
-       894, /* GL_MAP1_GRID_DOMAIN */
-       895, /* GL_MAP1_GRID_SEGMENTS */
-       921, /* GL_MAP2_GRID_DOMAIN */
-       922, /* GL_MAP2_GRID_SEGMENTS */
-      1950, /* GL_TEXTURE_1D */
-      1953, /* GL_TEXTURE_2D */
-       538, /* GL_FEEDBACK_BUFFER_POINTER */
-       539, /* GL_FEEDBACK_BUFFER_SIZE */
-       540, /* GL_FEEDBACK_BUFFER_TYPE */
-      1737, /* GL_SELECTION_BUFFER_POINTER */
-      1738, /* GL_SELECTION_BUFFER_SIZE */
-      2095, /* GL_TEXTURE_WIDTH */
-      2055, /* GL_TEXTURE_HEIGHT */
-      1999, /* GL_TEXTURE_COMPONENTS */
-      1980, /* GL_TEXTURE_BORDER_COLOR */
-      1979, /* GL_TEXTURE_BORDER */
-       441, /* GL_DONT_CARE */
-       536, /* GL_FASTEST */
-      1217, /* GL_NICEST */
+       897, /* GL_MAP1_COLOR_4 */
+       900, /* GL_MAP1_INDEX */
+       901, /* GL_MAP1_NORMAL */
+       902, /* GL_MAP1_TEXTURE_COORD_1 */
+       903, /* GL_MAP1_TEXTURE_COORD_2 */
+       904, /* GL_MAP1_TEXTURE_COORD_3 */
+       905, /* GL_MAP1_TEXTURE_COORD_4 */
+       906, /* GL_MAP1_VERTEX_3 */
+       907, /* GL_MAP1_VERTEX_4 */
+       924, /* GL_MAP2_COLOR_4 */
+       927, /* GL_MAP2_INDEX */
+       928, /* GL_MAP2_NORMAL */
+       929, /* GL_MAP2_TEXTURE_COORD_1 */
+       930, /* GL_MAP2_TEXTURE_COORD_2 */
+       931, /* GL_MAP2_TEXTURE_COORD_3 */
+       932, /* GL_MAP2_TEXTURE_COORD_4 */
+       933, /* GL_MAP2_VERTEX_3 */
+       934, /* GL_MAP2_VERTEX_4 */
+       898, /* GL_MAP1_GRID_DOMAIN */
+       899, /* GL_MAP1_GRID_SEGMENTS */
+       925, /* GL_MAP2_GRID_DOMAIN */
+       926, /* GL_MAP2_GRID_SEGMENTS */
+      1957, /* GL_TEXTURE_1D */
+      1960, /* GL_TEXTURE_2D */
+       541, /* GL_FEEDBACK_BUFFER_POINTER */
+       542, /* GL_FEEDBACK_BUFFER_SIZE */
+       543, /* GL_FEEDBACK_BUFFER_TYPE */
+      1744, /* GL_SELECTION_BUFFER_POINTER */
+      1745, /* GL_SELECTION_BUFFER_SIZE */
+      2106, /* GL_TEXTURE_WIDTH */
+      2066, /* GL_TEXTURE_HEIGHT */
+      2010, /* GL_TEXTURE_COMPONENTS */
+      1988, /* GL_TEXTURE_BORDER_COLOR */
+      1987, /* GL_TEXTURE_BORDER */
+       444, /* GL_DONT_CARE */
+       539, /* GL_FASTEST */
+      1222, /* GL_NICEST */
         56, /* GL_AMBIENT */
-       438, /* GL_DIFFUSE */
-      1790, /* GL_SPECULAR */
-      1392, /* GL_POSITION */
-      1793, /* GL_SPOT_DIRECTION */
-      1794, /* GL_SPOT_EXPONENT */
-      1792, /* GL_SPOT_CUTOFF */
-       317, /* GL_CONSTANT_ATTENUATION */
-       822, /* GL_LINEAR_ATTENUATION */
-      1506, /* GL_QUADRATIC_ATTENUATION */
-       284, /* GL_COMPILE */
-       285, /* GL_COMPILE_AND_EXECUTE */
+       441, /* GL_DIFFUSE */
+      1797, /* GL_SPECULAR */
+      1397, /* GL_POSITION */
+      1800, /* GL_SPOT_DIRECTION */
+      1801, /* GL_SPOT_EXPONENT */
+      1799, /* GL_SPOT_CUTOFF */
+       320, /* GL_CONSTANT_ATTENUATION */
+       826, /* GL_LINEAR_ATTENUATION */
+      1511, /* GL_QUADRATIC_ATTENUATION */
+       287, /* GL_COMPILE */
+       288, /* GL_COMPILE_AND_EXECUTE */
        149, /* GL_BYTE */
-      2154, /* GL_UNSIGNED_BYTE */
-      1755, /* GL_SHORT */
-      2193, /* GL_UNSIGNED_SHORT */
-       745, /* GL_INT */
-      2157, /* GL_UNSIGNED_INT */
-       548, /* GL_FLOAT */
+      2165, /* GL_UNSIGNED_BYTE */
+      1762, /* GL_SHORT */
+      2204, /* GL_UNSIGNED_SHORT */
+       749, /* GL_INT */
+      2168, /* GL_UNSIGNED_INT */
+       552, /* GL_FLOAT */
          1, /* GL_2_BYTES */
          5, /* GL_3_BYTES */
          7, /* GL_4_BYTES */
-       448, /* GL_DOUBLE */
-       698, /* GL_HALF_FLOAT */
-       544, /* GL_FIXED */
-       162, /* GL_CLEAR */
+       451, /* GL_DOUBLE */
+       702, /* GL_HALF_FLOAT */
+       547, /* GL_FIXED */
+       165, /* GL_CLEAR */
         58, /* GL_AND */
         60, /* GL_AND_REVERSE */
-       347, /* GL_COPY */
+       350, /* GL_COPY */
         59, /* GL_AND_INVERTED */
-      1220, /* GL_NOOP */
-      2289, /* GL_XOR */
-      1287, /* GL_OR */
-      1221, /* GL_NOR */
-       526, /* GL_EQUIV */
-       798, /* GL_INVERT */
-      1290, /* GL_OR_REVERSE */
-       348, /* GL_COPY_INVERTED */
-      1289, /* GL_OR_INVERTED */
-      1210, /* GL_NAND */
-      1744, /* GL_SET */
-       523, /* GL_EMISSION */
-      1754, /* GL_SHININESS */
+      1225, /* GL_NOOP */
+      2300, /* GL_XOR */
+      1292, /* GL_OR */
+      1226, /* GL_NOR */
+       529, /* GL_EQUIV */
+       802, /* GL_INVERT */
+      1295, /* GL_OR_REVERSE */
+       351, /* GL_COPY_INVERTED */
+      1294, /* GL_OR_INVERTED */
+      1215, /* GL_NAND */
+      1751, /* GL_SET */
+       526, /* GL_EMISSION */
+      1761, /* GL_SHININESS */
         57, /* GL_AMBIENT_AND_DIFFUSE */
-       229, /* GL_COLOR_INDEXES */
-      1159, /* GL_MODELVIEW */
-      1478, /* GL_PROJECTION */
-      1885, /* GL_TEXTURE */
-       185, /* GL_COLOR */
-       395, /* GL_DEPTH */
-      1816, /* GL_STENCIL */
-       228, /* GL_COLOR_INDEX */
-      1837, /* GL_STENCIL_INDEX */
-       411, /* GL_DEPTH_COMPONENT */
-      1543, /* GL_RED */
-       692, /* GL_GREEN */
+       232, /* GL_COLOR_INDEXES */
+      1164, /* GL_MODELVIEW */
+      1483, /* GL_PROJECTION */
+      1892, /* GL_TEXTURE */
+       188, /* GL_COLOR */
+       398, /* GL_DEPTH */
+      1823, /* GL_STENCIL */
+       231, /* GL_COLOR_INDEX */
+      1844, /* GL_STENCIL_INDEX */
+       414, /* GL_DEPTH_COMPONENT */
+      1548, /* GL_RED */
+       696, /* GL_GREEN */
        110, /* GL_BLUE */
         32, /* GL_ALPHA */
-      1599, /* GL_RGB */
-      1639, /* GL_RGBA */
-       856, /* GL_LUMINANCE */
-       883, /* GL_LUMINANCE_ALPHA */
+      1604, /* GL_RGB */
+      1644, /* GL_RGBA */
+       860, /* GL_LUMINANCE */
+       887, /* GL_LUMINANCE_ALPHA */
         86, /* GL_BITMAP */
-      1342, /* GL_POINT */
-       820, /* GL_LINE */
-       541, /* GL_FILL */
-      1557, /* GL_RENDER */
-       537, /* GL_FEEDBACK */
-      1736, /* GL_SELECT */
-       547, /* GL_FLAT */
-      1765, /* GL_SMOOTH */
-       799, /* GL_KEEP */
-      1590, /* GL_REPLACE */
-       727, /* GL_INCR */
-       391, /* GL_DECR */
-      2210, /* GL_VENDOR */
-      1587, /* GL_RENDERER */
-      2211, /* GL_VERSION */
-       530, /* GL_EXTENSIONS */
-      1686, /* GL_S */
-      1876, /* GL_T */
-      1526, /* GL_R */
-      1505, /* GL_Q */
-      1196, /* GL_MODULATE */
-       390, /* GL_DECAL */
-      2042, /* GL_TEXTURE_ENV_MODE */
-      2041, /* GL_TEXTURE_ENV_COLOR */
-      2040, /* GL_TEXTURE_ENV */
-       531, /* GL_EYE_LINEAR */
-      1248, /* GL_OBJECT_LINEAR */
-      1791, /* GL_SPHERE_MAP */
-      2045, /* GL_TEXTURE_GEN_MODE */
-      1250, /* GL_OBJECT_PLANE */
-       532, /* GL_EYE_PLANE */
-      1211, /* GL_NEAREST */
-       821, /* GL_LINEAR */
-      1215, /* GL_NEAREST_MIPMAP_NEAREST */
-       826, /* GL_LINEAR_MIPMAP_NEAREST */
-      1214, /* GL_NEAREST_MIPMAP_LINEAR */
-       825, /* GL_LINEAR_MIPMAP_LINEAR */
-      2068, /* GL_TEXTURE_MAG_FILTER */
-      2077, /* GL_TEXTURE_MIN_FILTER */
-      2098, /* GL_TEXTURE_WRAP_S */
-      2099, /* GL_TEXTURE_WRAP_T */
+      1347, /* GL_POINT */
+       824, /* GL_LINE */
+       544, /* GL_FILL */
+      1562, /* GL_RENDER */
+       540, /* GL_FEEDBACK */
+      1743, /* GL_SELECT */
+       551, /* GL_FLAT */
+      1772, /* GL_SMOOTH */
+       803, /* GL_KEEP */
+      1595, /* GL_REPLACE */
+       731, /* GL_INCR */
+       394, /* GL_DECR */
+      2221, /* GL_VENDOR */
+      1592, /* GL_RENDERER */
+      2222, /* GL_VERSION */
+       533, /* GL_EXTENSIONS */
+      1692, /* GL_S */
+      1883, /* GL_T */
+      1531, /* GL_R */
+      1510, /* GL_Q */
+      1201, /* GL_MODULATE */
+       393, /* GL_DECAL */
+      2053, /* GL_TEXTURE_ENV_MODE */
+      2052, /* GL_TEXTURE_ENV_COLOR */
+      2051, /* GL_TEXTURE_ENV */
+       534, /* GL_EYE_LINEAR */
+      1253, /* GL_OBJECT_LINEAR */
+      1798, /* GL_SPHERE_MAP */
+      2056, /* GL_TEXTURE_GEN_MODE */
+      1255, /* GL_OBJECT_PLANE */
+       535, /* GL_EYE_PLANE */
+      1216, /* GL_NEAREST */
+       825, /* GL_LINEAR */
+      1220, /* GL_NEAREST_MIPMAP_NEAREST */
+       830, /* GL_LINEAR_MIPMAP_NEAREST */
+      1219, /* GL_NEAREST_MIPMAP_LINEAR */
+       829, /* GL_LINEAR_MIPMAP_LINEAR */
+      2079, /* GL_TEXTURE_MAG_FILTER */
+      2088, /* GL_TEXTURE_MIN_FILTER */
+      2109, /* GL_TEXTURE_WRAP_S */
+      2110, /* GL_TEXTURE_WRAP_T */
        155, /* GL_CLAMP */
-      1589, /* GL_REPEAT */
-      1386, /* GL_POLYGON_OFFSET_UNITS */
-      1385, /* GL_POLYGON_OFFSET_POINT */
-      1384, /* GL_POLYGON_OFFSET_LINE */
-      1529, /* GL_R3_G3_B2 */
-      2207, /* GL_V2F */
-      2208, /* GL_V3F */
+      1594, /* GL_REPEAT */
+      1391, /* GL_POLYGON_OFFSET_UNITS */
+      1390, /* GL_POLYGON_OFFSET_POINT */
+      1389, /* GL_POLYGON_OFFSET_LINE */
+      1534, /* GL_R3_G3_B2 */
+      2218, /* GL_V2F */
+      2219, /* GL_V3F */
        152, /* GL_C4UB_V2F */
        153, /* GL_C4UB_V3F */
        150, /* GL_C3F_V3F */
-      1208, /* GL_N3F_V3F */
+      1213, /* GL_N3F_V3F */
        151, /* GL_C4F_N3F_V3F */
-      1881, /* GL_T2F_V3F */
-      1883, /* GL_T4F_V4F */
-      1879, /* GL_T2F_C4UB_V3F */
-      1877, /* GL_T2F_C3F_V3F */
-      1880, /* GL_T2F_N3F_V3F */
-      1878, /* GL_T2F_C4F_N3F_V3F */
-      1882, /* GL_T4F_C4F_N3F_V4F */
-       169, /* GL_CLIP_DISTANCE0 */
-       170, /* GL_CLIP_DISTANCE1 */
-       171, /* GL_CLIP_DISTANCE2 */
-       172, /* GL_CLIP_DISTANCE3 */
-       173, /* GL_CLIP_DISTANCE4 */
-       174, /* GL_CLIP_DISTANCE5 */
-       175, /* GL_CLIP_DISTANCE6 */
-       176, /* GL_CLIP_DISTANCE7 */
-       805, /* GL_LIGHT0 */
-       806, /* GL_LIGHT1 */
-       807, /* GL_LIGHT2 */
-       808, /* GL_LIGHT3 */
-       809, /* GL_LIGHT4 */
-       810, /* GL_LIGHT5 */
-       811, /* GL_LIGHT6 */
-       812, /* GL_LIGHT7 */
-       702, /* GL_HINT_BIT */
-       319, /* GL_CONSTANT_COLOR */
-      1261, /* GL_ONE_MINUS_CONSTANT_COLOR */
-       314, /* GL_CONSTANT_ALPHA */
-      1259, /* GL_ONE_MINUS_CONSTANT_ALPHA */
+      1888, /* GL_T2F_V3F */
+      1890, /* GL_T4F_V4F */
+      1886, /* GL_T2F_C4UB_V3F */
+      1884, /* GL_T2F_C3F_V3F */
+      1887, /* GL_T2F_N3F_V3F */
+      1885, /* GL_T2F_C4F_N3F_V3F */
+      1889, /* GL_T4F_C4F_N3F_V4F */
+       172, /* GL_CLIP_DISTANCE0 */
+       173, /* GL_CLIP_DISTANCE1 */
+       174, /* GL_CLIP_DISTANCE2 */
+       175, /* GL_CLIP_DISTANCE3 */
+       176, /* GL_CLIP_DISTANCE4 */
+       177, /* GL_CLIP_DISTANCE5 */
+       178, /* GL_CLIP_DISTANCE6 */
+       179, /* GL_CLIP_DISTANCE7 */
+       809, /* GL_LIGHT0 */
+       810, /* GL_LIGHT1 */
+       811, /* GL_LIGHT2 */
+       812, /* GL_LIGHT3 */
+       813, /* GL_LIGHT4 */
+       814, /* GL_LIGHT5 */
+       815, /* GL_LIGHT6 */
+       816, /* GL_LIGHT7 */
+       706, /* GL_HINT_BIT */
+       322, /* GL_CONSTANT_COLOR */
+      1266, /* GL_ONE_MINUS_CONSTANT_COLOR */
+       317, /* GL_CONSTANT_ALPHA */
+      1264, /* GL_ONE_MINUS_CONSTANT_ALPHA */
         89, /* GL_BLEND_COLOR */
-       669, /* GL_FUNC_ADD */
-      1140, /* GL_MIN */
-      1009, /* GL_MAX */
+       673, /* GL_FUNC_ADD */
+      1145, /* GL_MIN */
+      1013, /* GL_MAX */
         96, /* GL_BLEND_EQUATION */
-       675, /* GL_FUNC_SUBTRACT */
-       672, /* GL_FUNC_REVERSE_SUBTRACT */
-       327, /* GL_CONVOLUTION_1D */
-       328, /* GL_CONVOLUTION_2D */
-      1739, /* GL_SEPARABLE_2D */
-       331, /* GL_CONVOLUTION_BORDER_MODE */
-       335, /* GL_CONVOLUTION_FILTER_SCALE */
-       333, /* GL_CONVOLUTION_FILTER_BIAS */
-      1544, /* GL_REDUCE */
-       337, /* GL_CONVOLUTION_FORMAT */
-       341, /* GL_CONVOLUTION_WIDTH */
-       339, /* GL_CONVOLUTION_HEIGHT */
-      1028, /* GL_MAX_CONVOLUTION_WIDTH */
-      1026, /* GL_MAX_CONVOLUTION_HEIGHT */
-      1425, /* GL_POST_CONVOLUTION_RED_SCALE */
-      1421, /* GL_POST_CONVOLUTION_GREEN_SCALE */
-      1416, /* GL_POST_CONVOLUTION_BLUE_SCALE */
-      1412, /* GL_POST_CONVOLUTION_ALPHA_SCALE */
-      1423, /* GL_POST_CONVOLUTION_RED_BIAS */
-      1419, /* GL_POST_CONVOLUTION_GREEN_BIAS */
-      1414, /* GL_POST_CONVOLUTION_BLUE_BIAS */
-      1410, /* GL_POST_CONVOLUTION_ALPHA_BIAS */
-       703, /* GL_HISTOGRAM */
-      1485, /* GL_PROXY_HISTOGRAM */
-       719, /* GL_HISTOGRAM_WIDTH */
-       709, /* GL_HISTOGRAM_FORMAT */
-       715, /* GL_HISTOGRAM_RED_SIZE */
-       711, /* GL_HISTOGRAM_GREEN_SIZE */
-       706, /* GL_HISTOGRAM_BLUE_SIZE */
-       704, /* GL_HISTOGRAM_ALPHA_SIZE */
-       713, /* GL_HISTOGRAM_LUMINANCE_SIZE */
-       717, /* GL_HISTOGRAM_SINK */
-      1141, /* GL_MINMAX */
-      1143, /* GL_MINMAX_FORMAT */
-      1145, /* GL_MINMAX_SINK */
-      1884, /* GL_TABLE_TOO_LARGE_EXT */
-      2156, /* GL_UNSIGNED_BYTE_3_3_2 */
-      2196, /* GL_UNSIGNED_SHORT_4_4_4_4 */
-      2199, /* GL_UNSIGNED_SHORT_5_5_5_1 */
-      2168, /* GL_UNSIGNED_INT_8_8_8_8 */
-      2159, /* GL_UNSIGNED_INT_10_10_10_2 */
-      1383, /* GL_POLYGON_OFFSET_FILL */
-      1382, /* GL_POLYGON_OFFSET_FACTOR */
-      1381, /* GL_POLYGON_OFFSET_BIAS */
-      1593, /* GL_RESCALE_NORMAL */
+       679, /* GL_FUNC_SUBTRACT */
+       676, /* GL_FUNC_REVERSE_SUBTRACT */
+       330, /* GL_CONVOLUTION_1D */
+       331, /* GL_CONVOLUTION_2D */
+      1746, /* GL_SEPARABLE_2D */
+       334, /* GL_CONVOLUTION_BORDER_MODE */
+       338, /* GL_CONVOLUTION_FILTER_SCALE */
+       336, /* GL_CONVOLUTION_FILTER_BIAS */
+      1549, /* GL_REDUCE */
+       340, /* GL_CONVOLUTION_FORMAT */
+       344, /* GL_CONVOLUTION_WIDTH */
+       342, /* GL_CONVOLUTION_HEIGHT */
+      1032, /* GL_MAX_CONVOLUTION_WIDTH */
+      1030, /* GL_MAX_CONVOLUTION_HEIGHT */
+      1430, /* GL_POST_CONVOLUTION_RED_SCALE */
+      1426, /* GL_POST_CONVOLUTION_GREEN_SCALE */
+      1421, /* GL_POST_CONVOLUTION_BLUE_SCALE */
+      1417, /* GL_POST_CONVOLUTION_ALPHA_SCALE */
+      1428, /* GL_POST_CONVOLUTION_RED_BIAS */
+      1424, /* GL_POST_CONVOLUTION_GREEN_BIAS */
+      1419, /* GL_POST_CONVOLUTION_BLUE_BIAS */
+      1415, /* GL_POST_CONVOLUTION_ALPHA_BIAS */
+       707, /* GL_HISTOGRAM */
+      1490, /* GL_PROXY_HISTOGRAM */
+       723, /* GL_HISTOGRAM_WIDTH */
+       713, /* GL_HISTOGRAM_FORMAT */
+       719, /* GL_HISTOGRAM_RED_SIZE */
+       715, /* GL_HISTOGRAM_GREEN_SIZE */
+       710, /* GL_HISTOGRAM_BLUE_SIZE */
+       708, /* GL_HISTOGRAM_ALPHA_SIZE */
+       717, /* GL_HISTOGRAM_LUMINANCE_SIZE */
+       721, /* GL_HISTOGRAM_SINK */
+      1146, /* GL_MINMAX */
+      1148, /* GL_MINMAX_FORMAT */
+      1150, /* GL_MINMAX_SINK */
+      1891, /* GL_TABLE_TOO_LARGE_EXT */
+      2167, /* GL_UNSIGNED_BYTE_3_3_2 */
+      2207, /* GL_UNSIGNED_SHORT_4_4_4_4 */
+      2210, /* GL_UNSIGNED_SHORT_5_5_5_1 */
+      2179, /* GL_UNSIGNED_INT_8_8_8_8 */
+      2170, /* GL_UNSIGNED_INT_10_10_10_2 */
+      1388, /* GL_POLYGON_OFFSET_FILL */
+      1387, /* GL_POLYGON_OFFSET_FACTOR */
+      1386, /* GL_POLYGON_OFFSET_BIAS */
+      1598, /* GL_RESCALE_NORMAL */
         41, /* GL_ALPHA4 */
         43, /* GL_ALPHA8 */
         33, /* GL_ALPHA12 */
         35, /* GL_ALPHA16 */
-       871, /* GL_LUMINANCE4 */
-       877, /* GL_LUMINANCE8 */
-       857, /* GL_LUMINANCE12 */
-       863, /* GL_LUMINANCE16 */
-       872, /* GL_LUMINANCE4_ALPHA4 */
-       875, /* GL_LUMINANCE6_ALPHA2 */
-       880, /* GL_LUMINANCE8_ALPHA8 */
-       860, /* GL_LUMINANCE12_ALPHA4 */
-       858, /* GL_LUMINANCE12_ALPHA12 */
-       866, /* GL_LUMINANCE16_ALPHA16 */
-       746, /* GL_INTENSITY */
-       755, /* GL_INTENSITY4 */
-       757, /* GL_INTENSITY8 */
-       747, /* GL_INTENSITY12 */
-       749, /* GL_INTENSITY16 */
-      1614, /* GL_RGB2_EXT */
-      1620, /* GL_RGB4 */
-      1623, /* GL_RGB5 */
-      1630, /* GL_RGB8 */
-      1600, /* GL_RGB10 */
-      1604, /* GL_RGB12 */
-      1606, /* GL_RGB16 */
-      1650, /* GL_RGBA2 */
-      1657, /* GL_RGBA4 */
-      1626, /* GL_RGB5_A1 */
-      1662, /* GL_RGBA8 */
-      1601, /* GL_RGB10_A2 */
-      1640, /* GL_RGBA12 */
-      1642, /* GL_RGBA16 */
-      2085, /* GL_TEXTURE_RED_SIZE */
-      2053, /* GL_TEXTURE_GREEN_SIZE */
-      1977, /* GL_TEXTURE_BLUE_SIZE */
-      1958, /* GL_TEXTURE_ALPHA_SIZE */
-      2066, /* GL_TEXTURE_LUMINANCE_SIZE */
-      2057, /* GL_TEXTURE_INTENSITY_SIZE */
-      1591, /* GL_REPLACE_EXT */
-      1489, /* GL_PROXY_TEXTURE_1D */
-      1493, /* GL_PROXY_TEXTURE_2D */
-      2093, /* GL_TEXTURE_TOO_LARGE_EXT */
-      2079, /* GL_TEXTURE_PRIORITY */
-      2087, /* GL_TEXTURE_RESIDENT */
-      1961, /* GL_TEXTURE_BINDING_1D */
-      1964, /* GL_TEXTURE_BINDING_2D */
-      1967, /* GL_TEXTURE_BINDING_3D */
-      1297, /* GL_PACK_SKIP_IMAGES */
-      1293, /* GL_PACK_IMAGE_HEIGHT */
-      2149, /* GL_UNPACK_SKIP_IMAGES */
-      2146, /* GL_UNPACK_IMAGE_HEIGHT */
-      1956, /* GL_TEXTURE_3D */
-      1497, /* GL_PROXY_TEXTURE_3D */
-      2037, /* GL_TEXTURE_DEPTH */
-      2096, /* GL_TEXTURE_WRAP_R */
-      1010, /* GL_MAX_3D_TEXTURE_SIZE */
-      2212, /* GL_VERTEX_ARRAY */
-      1223, /* GL_NORMAL_ARRAY */
-       186, /* GL_COLOR_ARRAY */
-       731, /* GL_INDEX_ARRAY */
-      2007, /* GL_TEXTURE_COORD_ARRAY */
-       515, /* GL_EDGE_FLAG_ARRAY */
-      2218, /* GL_VERTEX_ARRAY_SIZE */
-      2220, /* GL_VERTEX_ARRAY_TYPE */
-      2219, /* GL_VERTEX_ARRAY_STRIDE */
-      1228, /* GL_NORMAL_ARRAY_TYPE */
-      1227, /* GL_NORMAL_ARRAY_STRIDE */
-       190, /* GL_COLOR_ARRAY_SIZE */
-       192, /* GL_COLOR_ARRAY_TYPE */
-       191, /* GL_COLOR_ARRAY_STRIDE */
-       736, /* GL_INDEX_ARRAY_TYPE */
-       735, /* GL_INDEX_ARRAY_STRIDE */
-      2011, /* GL_TEXTURE_COORD_ARRAY_SIZE */
-      2013, /* GL_TEXTURE_COORD_ARRAY_TYPE */
-      2012, /* GL_TEXTURE_COORD_ARRAY_STRIDE */
-       519, /* GL_EDGE_FLAG_ARRAY_STRIDE */
-      2217, /* GL_VERTEX_ARRAY_POINTER */
-      1226, /* GL_NORMAL_ARRAY_POINTER */
-       189, /* GL_COLOR_ARRAY_POINTER */
-       734, /* GL_INDEX_ARRAY_POINTER */
-      2010, /* GL_TEXTURE_COORD_ARRAY_POINTER */
-       518, /* GL_EDGE_FLAG_ARRAY_POINTER */
-      1201, /* GL_MULTISAMPLE */
-      1713, /* GL_SAMPLE_ALPHA_TO_COVERAGE */
-      1715, /* GL_SAMPLE_ALPHA_TO_ONE */
-      1720, /* GL_SAMPLE_COVERAGE */
-      1717, /* GL_SAMPLE_BUFFERS */
-      1708, /* GL_SAMPLES */
-      1724, /* GL_SAMPLE_COVERAGE_VALUE */
-      1722, /* GL_SAMPLE_COVERAGE_INVERT */
-       234, /* GL_COLOR_MATRIX */
-       236, /* GL_COLOR_MATRIX_STACK_DEPTH */
-      1022, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */
-      1408, /* GL_POST_COLOR_MATRIX_RED_SCALE */
-      1404, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */
-      1399, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */
-      1395, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */
-      1406, /* GL_POST_COLOR_MATRIX_RED_BIAS */
-      1402, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */
-      1397, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */
-      1393, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */
-      1990, /* GL_TEXTURE_COLOR_TABLE_SGI */
-      1498, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */
-      1992, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */
+       875, /* GL_LUMINANCE4 */
+       881, /* GL_LUMINANCE8 */
+       861, /* GL_LUMINANCE12 */
+       867, /* GL_LUMINANCE16 */
+       876, /* GL_LUMINANCE4_ALPHA4 */
+       879, /* GL_LUMINANCE6_ALPHA2 */
+       884, /* GL_LUMINANCE8_ALPHA8 */
+       864, /* GL_LUMINANCE12_ALPHA4 */
+       862, /* GL_LUMINANCE12_ALPHA12 */
+       870, /* GL_LUMINANCE16_ALPHA16 */
+       750, /* GL_INTENSITY */
+       759, /* GL_INTENSITY4 */
+       761, /* GL_INTENSITY8 */
+       751, /* GL_INTENSITY12 */
+       753, /* GL_INTENSITY16 */
+      1619, /* GL_RGB2_EXT */
+      1625, /* GL_RGB4 */
+      1628, /* GL_RGB5 */
+      1635, /* GL_RGB8 */
+      1605, /* GL_RGB10 */
+      1609, /* GL_RGB12 */
+      1611, /* GL_RGB16 */
+      1655, /* GL_RGBA2 */
+      1662, /* GL_RGBA4 */
+      1631, /* GL_RGB5_A1 */
+      1667, /* GL_RGBA8 */
+      1606, /* GL_RGB10_A2 */
+      1645, /* GL_RGBA12 */
+      1647, /* GL_RGBA16 */
+      2096, /* GL_TEXTURE_RED_SIZE */
+      2064, /* GL_TEXTURE_GREEN_SIZE */
+      1985, /* GL_TEXTURE_BLUE_SIZE */
+      1965, /* GL_TEXTURE_ALPHA_SIZE */
+      2077, /* GL_TEXTURE_LUMINANCE_SIZE */
+      2068, /* GL_TEXTURE_INTENSITY_SIZE */
+      1596, /* GL_REPLACE_EXT */
+      1494, /* GL_PROXY_TEXTURE_1D */
+      1498, /* GL_PROXY_TEXTURE_2D */
+      2104, /* GL_TEXTURE_TOO_LARGE_EXT */
+      2090, /* GL_TEXTURE_PRIORITY */
+      2098, /* GL_TEXTURE_RESIDENT */
+      1968, /* GL_TEXTURE_BINDING_1D */
+      1971, /* GL_TEXTURE_BINDING_2D */
+      1974, /* GL_TEXTURE_BINDING_3D */
+      1302, /* GL_PACK_SKIP_IMAGES */
+      1298, /* GL_PACK_IMAGE_HEIGHT */
+      2160, /* GL_UNPACK_SKIP_IMAGES */
+      2157, /* GL_UNPACK_IMAGE_HEIGHT */
+      1963, /* GL_TEXTURE_3D */
+      1502, /* GL_PROXY_TEXTURE_3D */
+      2048, /* GL_TEXTURE_DEPTH */
+      2107, /* GL_TEXTURE_WRAP_R */
+      1014, /* GL_MAX_3D_TEXTURE_SIZE */
+      2223, /* GL_VERTEX_ARRAY */
+      1228, /* GL_NORMAL_ARRAY */
+       189, /* GL_COLOR_ARRAY */
+       735, /* GL_INDEX_ARRAY */
+      2018, /* GL_TEXTURE_COORD_ARRAY */
+       518, /* GL_EDGE_FLAG_ARRAY */
+      2229, /* GL_VERTEX_ARRAY_SIZE */
+      2231, /* GL_VERTEX_ARRAY_TYPE */
+      2230, /* GL_VERTEX_ARRAY_STRIDE */
+      1233, /* GL_NORMAL_ARRAY_TYPE */
+      1232, /* GL_NORMAL_ARRAY_STRIDE */
+       193, /* GL_COLOR_ARRAY_SIZE */
+       195, /* GL_COLOR_ARRAY_TYPE */
+       194, /* GL_COLOR_ARRAY_STRIDE */
+       740, /* GL_INDEX_ARRAY_TYPE */
+       739, /* GL_INDEX_ARRAY_STRIDE */
+      2022, /* GL_TEXTURE_COORD_ARRAY_SIZE */
+      2024, /* GL_TEXTURE_COORD_ARRAY_TYPE */
+      2023, /* GL_TEXTURE_COORD_ARRAY_STRIDE */
+       522, /* GL_EDGE_FLAG_ARRAY_STRIDE */
+      2228, /* GL_VERTEX_ARRAY_POINTER */
+      1231, /* GL_NORMAL_ARRAY_POINTER */
+       192, /* GL_COLOR_ARRAY_POINTER */
+       738, /* GL_INDEX_ARRAY_POINTER */
+      2021, /* GL_TEXTURE_COORD_ARRAY_POINTER */
+       521, /* GL_EDGE_FLAG_ARRAY_POINTER */
+      1206, /* GL_MULTISAMPLE */
+      1720, /* GL_SAMPLE_ALPHA_TO_COVERAGE */
+      1722, /* GL_SAMPLE_ALPHA_TO_ONE */
+      1727, /* GL_SAMPLE_COVERAGE */
+      1724, /* GL_SAMPLE_BUFFERS */
+      1715, /* GL_SAMPLES */
+      1731, /* GL_SAMPLE_COVERAGE_VALUE */
+      1729, /* GL_SAMPLE_COVERAGE_INVERT */
+       237, /* GL_COLOR_MATRIX */
+       239, /* GL_COLOR_MATRIX_STACK_DEPTH */
+      1026, /* GL_MAX_COLOR_MATRIX_STACK_DEPTH */
+      1413, /* GL_POST_COLOR_MATRIX_RED_SCALE */
+      1409, /* GL_POST_COLOR_MATRIX_GREEN_SCALE */
+      1404, /* GL_POST_COLOR_MATRIX_BLUE_SCALE */
+      1400, /* GL_POST_COLOR_MATRIX_ALPHA_SCALE */
+      1411, /* GL_POST_COLOR_MATRIX_RED_BIAS */
+      1407, /* GL_POST_COLOR_MATRIX_GREEN_BIAS */
+      1402, /* GL_POST_COLOR_MATRIX_BLUE_BIAS */
+      1398, /* GL_POST_COLOR_MATRIX_ALPHA_BIAS */
+      2001, /* GL_TEXTURE_COLOR_TABLE_SGI */
+      1503, /* GL_PROXY_TEXTURE_COLOR_TABLE_SGI */
+      2003, /* GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */
         94, /* GL_BLEND_DST_RGB */
        108, /* GL_BLEND_SRC_RGB */
         92, /* GL_BLEND_DST_ALPHA */
        106, /* GL_BLEND_SRC_ALPHA */
-       240, /* GL_COLOR_TABLE */
-      1418, /* GL_POST_CONVOLUTION_COLOR_TABLE */
-      1401, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */
-      1484, /* GL_PROXY_COLOR_TABLE */
-      1488, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */
-      1487, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */
-       264, /* GL_COLOR_TABLE_SCALE */
-       244, /* GL_COLOR_TABLE_BIAS */
-       249, /* GL_COLOR_TABLE_FORMAT */
-       266, /* GL_COLOR_TABLE_WIDTH */
-       261, /* GL_COLOR_TABLE_RED_SIZE */
-       252, /* GL_COLOR_TABLE_GREEN_SIZE */
-       246, /* GL_COLOR_TABLE_BLUE_SIZE */
-       241, /* GL_COLOR_TABLE_ALPHA_SIZE */
-       258, /* GL_COLOR_TABLE_LUMINANCE_SIZE */
-       255, /* GL_COLOR_TABLE_INTENSITY_SIZE */
+       243, /* GL_COLOR_TABLE */
+      1423, /* GL_POST_CONVOLUTION_COLOR_TABLE */
+      1406, /* GL_POST_COLOR_MATRIX_COLOR_TABLE */
+      1489, /* GL_PROXY_COLOR_TABLE */
+      1493, /* GL_PROXY_POST_CONVOLUTION_COLOR_TABLE */
+      1492, /* GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE */
+       267, /* GL_COLOR_TABLE_SCALE */
+       247, /* GL_COLOR_TABLE_BIAS */
+       252, /* GL_COLOR_TABLE_FORMAT */
+       269, /* GL_COLOR_TABLE_WIDTH */
+       264, /* GL_COLOR_TABLE_RED_SIZE */
+       255, /* GL_COLOR_TABLE_GREEN_SIZE */
+       249, /* GL_COLOR_TABLE_BLUE_SIZE */
+       244, /* GL_COLOR_TABLE_ALPHA_SIZE */
+       261, /* GL_COLOR_TABLE_LUMINANCE_SIZE */
+       258, /* GL_COLOR_TABLE_INTENSITY_SIZE */
         79, /* GL_BGR */
         80, /* GL_BGRA */
-      1037, /* GL_MAX_ELEMENTS_VERTICES */
-      1036, /* GL_MAX_ELEMENTS_INDICES */
-      2056, /* GL_TEXTURE_INDEX_SIZE_EXT */
-       183, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */
-      1364, /* GL_POINT_SIZE_MIN */
-      1360, /* GL_POINT_SIZE_MAX */
-      1349, /* GL_POINT_FADE_THRESHOLD_SIZE */
-      1345, /* GL_POINT_DISTANCE_ATTENUATION */
-       157, /* GL_CLAMP_TO_BORDER */
-       160, /* GL_CLAMP_TO_EDGE */
-      2078, /* GL_TEXTURE_MIN_LOD */
-      2076, /* GL_TEXTURE_MAX_LOD */
-      1960, /* GL_TEXTURE_BASE_LEVEL */
-      2075, /* GL_TEXTURE_MAX_LEVEL */
-       722, /* GL_IGNORE_BORDER_HP */
-       318, /* GL_CONSTANT_BORDER_HP */
-      1592, /* GL_REPLICATE_BORDER_HP */
-       329, /* GL_CONVOLUTION_BORDER_COLOR */
-      1256, /* GL_OCCLUSION_TEST_HP */
-      1257, /* GL_OCCLUSION_TEST_RESULT_HP */
-       823, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */
-      1984, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */
-      1986, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */
-      1988, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */
-      1989, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */
-      1987, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */
-      1985, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */
-      1016, /* GL_MAX_CLIPMAP_DEPTH_SGIX */
-      1017, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */
-      1428, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */
-      1430, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */
-      1427, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */
-      1429, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */
-      2064, /* GL_TEXTURE_LOD_BIAS_S_SGIX */
-      2065, /* GL_TEXTURE_LOD_BIAS_T_SGIX */
-      2063, /* GL_TEXTURE_LOD_BIAS_R_SGIX */
-       678, /* GL_GENERATE_MIPMAP */
-       679, /* GL_GENERATE_MIPMAP_HINT */
-       591, /* GL_FOG_OFFSET_SGIX */
-       592, /* GL_FOG_OFFSET_VALUE_SGIX */
-      1998, /* GL_TEXTURE_COMPARE_SGIX */
-      1997, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */
-      2060, /* GL_TEXTURE_LEQUAL_R_SGIX */
-      2052, /* GL_TEXTURE_GEQUAL_R_SGIX */
-       412, /* GL_DEPTH_COMPONENT16 */
-       416, /* GL_DEPTH_COMPONENT24 */
-       420, /* GL_DEPTH_COMPONENT32 */
-       354, /* GL_CULL_VERTEX_EXT */
-       356, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */
-       355, /* GL_CULL_VERTEX_EYE_POSITION_EXT */
-      2285, /* GL_WRAP_BORDER_SUN */
-      1991, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */
-       816, /* GL_LIGHT_MODEL_COLOR_CONTROL */
-      1758, /* GL_SINGLE_COLOR */
-      1742, /* GL_SEPARATE_SPECULAR_COLOR */
-      1753, /* GL_SHARED_TEXTURE_PALETTE_EXT */
-       603, /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */
-       604, /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */
-       615, /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */
-       606, /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */
-       602, /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */
-       601, /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */
-       605, /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */
-       616, /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */
-       633, /* GL_FRAMEBUFFER_DEFAULT */
-       660, /* GL_FRAMEBUFFER_UNDEFINED */
-       428, /* GL_DEPTH_STENCIL_ATTACHMENT */
-       892, /* GL_MAJOR_VERSION */
-      1147, /* GL_MINOR_VERSION */
-      1237, /* GL_NUM_EXTENSIONS */
-       324, /* GL_CONTEXT_FLAGS */
-       730, /* GL_INDEX */
-       406, /* GL_DEPTH_BUFFER */
-      1832, /* GL_STENCIL_BUFFER */
-       295, /* GL_COMPRESSED_RED */
-       296, /* GL_COMPRESSED_RG */
-      2155, /* GL_UNSIGNED_BYTE_2_3_3_REV */
-      2200, /* GL_UNSIGNED_SHORT_5_6_5 */
-      2201, /* GL_UNSIGNED_SHORT_5_6_5_REV */
-      2197, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */
-      2194, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */
-      2169, /* GL_UNSIGNED_INT_8_8_8_8_REV */
-      2165, /* GL_UNSIGNED_INT_2_10_10_10_REV */
-      2073, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */
-      2074, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */
-      2072, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */
-      1151, /* GL_MIRRORED_REPEAT */
-      1679, /* GL_RGB_S3TC */
-      1622, /* GL_RGB4_S3TC */
-      1675, /* GL_RGBA_S3TC */
-      1661, /* GL_RGBA4_S3TC */
-      1670, /* GL_RGBA_DXT5_S3TC */
-      1658, /* GL_RGBA4_DXT5_S3TC */
-       306, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */
-       301, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */
-       302, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */
-       303, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */
-      1213, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */
-      1212, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */
-       824, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */
-       578, /* GL_FOG_COORDINATE_SOURCE */
-       570, /* GL_FOG_COORD */
-       594, /* GL_FRAGMENT_DEPTH */
-       360, /* GL_CURRENT_FOG_COORD */
-       577, /* GL_FOG_COORDINATE_ARRAY_TYPE */
-       576, /* GL_FOG_COORDINATE_ARRAY_STRIDE */
-       575, /* GL_FOG_COORDINATE_ARRAY_POINTER */
-       572, /* GL_FOG_COORDINATE_ARRAY */
-       238, /* GL_COLOR_SUM */
-       381, /* GL_CURRENT_SECONDARY_COLOR */
-      1733, /* GL_SECONDARY_COLOR_ARRAY_SIZE */
-      1735, /* GL_SECONDARY_COLOR_ARRAY_TYPE */
-      1734, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */
-      1732, /* GL_SECONDARY_COLOR_ARRAY_POINTER */
-      1729, /* GL_SECONDARY_COLOR_ARRAY */
-       379, /* GL_CURRENT_RASTER_SECONDARY_COLOR */
+      1041, /* GL_MAX_ELEMENTS_VERTICES */
+      1040, /* GL_MAX_ELEMENTS_INDICES */
+      2067, /* GL_TEXTURE_INDEX_SIZE_EXT */
+       186, /* GL_CLIP_VOLUME_CLIPPING_HINT_EXT */
+      1369, /* GL_POINT_SIZE_MIN */
+      1365, /* GL_POINT_SIZE_MAX */
+      1354, /* GL_POINT_FADE_THRESHOLD_SIZE */
+      1350, /* GL_POINT_DISTANCE_ATTENUATION */
+       159, /* GL_CLAMP_TO_BORDER */
+       162, /* GL_CLAMP_TO_EDGE */
+      2089, /* GL_TEXTURE_MIN_LOD */
+      2087, /* GL_TEXTURE_MAX_LOD */
+      1967, /* GL_TEXTURE_BASE_LEVEL */
+      2086, /* GL_TEXTURE_MAX_LEVEL */
+       726, /* GL_IGNORE_BORDER_HP */
+       321, /* GL_CONSTANT_BORDER_HP */
+      1597, /* GL_REPLICATE_BORDER_HP */
+       332, /* GL_CONVOLUTION_BORDER_COLOR */
+      1261, /* GL_OCCLUSION_TEST_HP */
+      1262, /* GL_OCCLUSION_TEST_RESULT_HP */
+       827, /* GL_LINEAR_CLIPMAP_LINEAR_SGIX */
+      1995, /* GL_TEXTURE_CLIPMAP_CENTER_SGIX */
+      1997, /* GL_TEXTURE_CLIPMAP_FRAME_SGIX */
+      1999, /* GL_TEXTURE_CLIPMAP_OFFSET_SGIX */
+      2000, /* GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX */
+      1998, /* GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX */
+      1996, /* GL_TEXTURE_CLIPMAP_DEPTH_SGIX */
+      1020, /* GL_MAX_CLIPMAP_DEPTH_SGIX */
+      1021, /* GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX */
+      1433, /* GL_POST_TEXTURE_FILTER_BIAS_SGIX */
+      1435, /* GL_POST_TEXTURE_FILTER_SCALE_SGIX */
+      1432, /* GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX */
+      1434, /* GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX */
+      2075, /* GL_TEXTURE_LOD_BIAS_S_SGIX */
+      2076, /* GL_TEXTURE_LOD_BIAS_T_SGIX */
+      2074, /* GL_TEXTURE_LOD_BIAS_R_SGIX */
+       682, /* GL_GENERATE_MIPMAP */
+       683, /* GL_GENERATE_MIPMAP_HINT */
+       595, /* GL_FOG_OFFSET_SGIX */
+       596, /* GL_FOG_OFFSET_VALUE_SGIX */
+      2009, /* GL_TEXTURE_COMPARE_SGIX */
+      2008, /* GL_TEXTURE_COMPARE_OPERATOR_SGIX */
+      2071, /* GL_TEXTURE_LEQUAL_R_SGIX */
+      2063, /* GL_TEXTURE_GEQUAL_R_SGIX */
+       415, /* GL_DEPTH_COMPONENT16 */
+       419, /* GL_DEPTH_COMPONENT24 */
+       423, /* GL_DEPTH_COMPONENT32 */
+       357, /* GL_CULL_VERTEX_EXT */
+       359, /* GL_CULL_VERTEX_OBJECT_POSITION_EXT */
+       358, /* GL_CULL_VERTEX_EYE_POSITION_EXT */
+      2296, /* GL_WRAP_BORDER_SUN */
+      2002, /* GL_TEXTURE_COLOR_WRITEMASK_SGIS */
+       820, /* GL_LIGHT_MODEL_COLOR_CONTROL */
+      1765, /* GL_SINGLE_COLOR */
+      1749, /* GL_SEPARATE_SPECULAR_COLOR */
+      1760, /* GL_SHARED_TEXTURE_PALETTE_EXT */
+       607, /* GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */
+       608, /* GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */
+       619, /* GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */
+       610, /* GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */
+       606, /* GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */
+       605, /* GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */
+       609, /* GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */
+       620, /* GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */
+       637, /* GL_FRAMEBUFFER_DEFAULT */
+       664, /* GL_FRAMEBUFFER_UNDEFINED */
+       431, /* GL_DEPTH_STENCIL_ATTACHMENT */
+       896, /* GL_MAJOR_VERSION */
+      1152, /* GL_MINOR_VERSION */
+      1242, /* GL_NUM_EXTENSIONS */
+       327, /* GL_CONTEXT_FLAGS */
+       734, /* GL_INDEX */
+       409, /* GL_DEPTH_BUFFER */
+      1839, /* GL_STENCIL_BUFFER */
+       298, /* GL_COMPRESSED_RED */
+       299, /* GL_COMPRESSED_RG */
+      2166, /* GL_UNSIGNED_BYTE_2_3_3_REV */
+      2211, /* GL_UNSIGNED_SHORT_5_6_5 */
+      2212, /* GL_UNSIGNED_SHORT_5_6_5_REV */
+      2208, /* GL_UNSIGNED_SHORT_4_4_4_4_REV */
+      2205, /* GL_UNSIGNED_SHORT_1_5_5_5_REV */
+      2180, /* GL_UNSIGNED_INT_8_8_8_8_REV */
+      2176, /* GL_UNSIGNED_INT_2_10_10_10_REV */
+      2084, /* GL_TEXTURE_MAX_CLAMP_S_SGIX */
+      2085, /* GL_TEXTURE_MAX_CLAMP_T_SGIX */
+      2083, /* GL_TEXTURE_MAX_CLAMP_R_SGIX */
+      1156, /* GL_MIRRORED_REPEAT */
+      1685, /* GL_RGB_S3TC */
+      1627, /* GL_RGB4_S3TC */
+      1681, /* GL_RGBA_S3TC */
+      1666, /* GL_RGBA4_S3TC */
+      1675, /* GL_RGBA_DXT5_S3TC */
+      1663, /* GL_RGBA4_DXT5_S3TC */
+       309, /* GL_COMPRESSED_RGB_S3TC_DXT1_EXT */
+       304, /* GL_COMPRESSED_RGBA_S3TC_DXT1_EXT */
+       305, /* GL_COMPRESSED_RGBA_S3TC_DXT3_EXT */
+       306, /* GL_COMPRESSED_RGBA_S3TC_DXT5_EXT */
+      1218, /* GL_NEAREST_CLIPMAP_NEAREST_SGIX */
+      1217, /* GL_NEAREST_CLIPMAP_LINEAR_SGIX */
+       828, /* GL_LINEAR_CLIPMAP_NEAREST_SGIX */
+       582, /* GL_FOG_COORDINATE_SOURCE */
+       574, /* GL_FOG_COORD */
+       598, /* GL_FRAGMENT_DEPTH */
+       363, /* GL_CURRENT_FOG_COORD */
+       581, /* GL_FOG_COORDINATE_ARRAY_TYPE */
+       580, /* GL_FOG_COORDINATE_ARRAY_STRIDE */
+       579, /* GL_FOG_COORDINATE_ARRAY_POINTER */
+       576, /* GL_FOG_COORDINATE_ARRAY */
+       241, /* GL_COLOR_SUM */
+       384, /* GL_CURRENT_SECONDARY_COLOR */
+      1740, /* GL_SECONDARY_COLOR_ARRAY_SIZE */
+      1742, /* GL_SECONDARY_COLOR_ARRAY_TYPE */
+      1741, /* GL_SECONDARY_COLOR_ARRAY_STRIDE */
+      1739, /* GL_SECONDARY_COLOR_ARRAY_POINTER */
+      1736, /* GL_SECONDARY_COLOR_ARRAY */
+       382, /* GL_CURRENT_RASTER_SECONDARY_COLOR */
         29, /* GL_ALIASED_POINT_SIZE_RANGE */
         28, /* GL_ALIASED_LINE_WIDTH_RANGE */
-      1886, /* GL_TEXTURE0 */
-      1888, /* GL_TEXTURE1 */
-      1910, /* GL_TEXTURE2 */
-      1932, /* GL_TEXTURE3 */
-      1938, /* GL_TEXTURE4 */
-      1940, /* GL_TEXTURE5 */
-      1942, /* GL_TEXTURE6 */
-      1944, /* GL_TEXTURE7 */
-      1946, /* GL_TEXTURE8 */
-      1948, /* GL_TEXTURE9 */
-      1889, /* GL_TEXTURE10 */
-      1891, /* GL_TEXTURE11 */
-      1893, /* GL_TEXTURE12 */
-      1895, /* GL_TEXTURE13 */
-      1897, /* GL_TEXTURE14 */
-      1899, /* GL_TEXTURE15 */
-      1901, /* GL_TEXTURE16 */
-      1903, /* GL_TEXTURE17 */
-      1905, /* GL_TEXTURE18 */
-      1907, /* GL_TEXTURE19 */
-      1911, /* GL_TEXTURE20 */
-      1913, /* GL_TEXTURE21 */
-      1915, /* GL_TEXTURE22 */
-      1917, /* GL_TEXTURE23 */
-      1919, /* GL_TEXTURE24 */
-      1921, /* GL_TEXTURE25 */
-      1923, /* GL_TEXTURE26 */
-      1925, /* GL_TEXTURE27 */
-      1927, /* GL_TEXTURE28 */
-      1929, /* GL_TEXTURE29 */
-      1933, /* GL_TEXTURE30 */
-      1935, /* GL_TEXTURE31 */
+      1893, /* GL_TEXTURE0 */
+      1895, /* GL_TEXTURE1 */
+      1917, /* GL_TEXTURE2 */
+      1939, /* GL_TEXTURE3 */
+      1945, /* GL_TEXTURE4 */
+      1947, /* GL_TEXTURE5 */
+      1949, /* GL_TEXTURE6 */
+      1951, /* GL_TEXTURE7 */
+      1953, /* GL_TEXTURE8 */
+      1955, /* GL_TEXTURE9 */
+      1896, /* GL_TEXTURE10 */
+      1898, /* GL_TEXTURE11 */
+      1900, /* GL_TEXTURE12 */
+      1902, /* GL_TEXTURE13 */
+      1904, /* GL_TEXTURE14 */
+      1906, /* GL_TEXTURE15 */
+      1908, /* GL_TEXTURE16 */
+      1910, /* GL_TEXTURE17 */
+      1912, /* GL_TEXTURE18 */
+      1914, /* GL_TEXTURE19 */
+      1918, /* GL_TEXTURE20 */
+      1920, /* GL_TEXTURE21 */
+      1922, /* GL_TEXTURE22 */
+      1924, /* GL_TEXTURE23 */
+      1926, /* GL_TEXTURE24 */
+      1928, /* GL_TEXTURE25 */
+      1930, /* GL_TEXTURE26 */
+      1932, /* GL_TEXTURE27 */
+      1934, /* GL_TEXTURE28 */
+      1936, /* GL_TEXTURE29 */
+      1940, /* GL_TEXTURE30 */
+      1942, /* GL_TEXTURE31 */
         19, /* GL_ACTIVE_TEXTURE */
-       163, /* GL_CLIENT_ACTIVE_TEXTURE */
-      1112, /* GL_MAX_TEXTURE_UNITS */
-      2128, /* GL_TRANSPOSE_MODELVIEW_MATRIX */
-      2131, /* GL_TRANSPOSE_PROJECTION_MATRIX */
-      2133, /* GL_TRANSPOSE_TEXTURE_MATRIX */
-      2125, /* GL_TRANSPOSE_COLOR_MATRIX */
-      1868, /* GL_SUBTRACT */
-      1094, /* GL_MAX_RENDERBUFFER_SIZE */
-       287, /* GL_COMPRESSED_ALPHA */
-       291, /* GL_COMPRESSED_LUMINANCE */
-       292, /* GL_COMPRESSED_LUMINANCE_ALPHA */
-       289, /* GL_COMPRESSED_INTENSITY */
-       297, /* GL_COMPRESSED_RGB */
-       298, /* GL_COMPRESSED_RGBA */
-      2005, /* GL_TEXTURE_COMPRESSION_HINT */
-      2082, /* GL_TEXTURE_RECTANGLE */
-      1973, /* GL_TEXTURE_BINDING_RECTANGLE */
-      1501, /* GL_PROXY_TEXTURE_RECTANGLE */
-      1091, /* GL_MAX_RECTANGLE_TEXTURE_SIZE */
-       427, /* GL_DEPTH_STENCIL */
-      2161, /* GL_UNSIGNED_INT_24_8 */
-      1107, /* GL_MAX_TEXTURE_LOD_BIAS */
-      2071, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */
-      1109, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */
-      2043, /* GL_TEXTURE_FILTER_CONTROL */
-      2061, /* GL_TEXTURE_LOD_BIAS */
-       271, /* GL_COMBINE4 */
-      1100, /* GL_MAX_SHININESS_NV */
-      1101, /* GL_MAX_SPOT_EXPONENT_NV */
-       728, /* GL_INCR_WRAP */
-       392, /* GL_DECR_WRAP */
-      1171, /* GL_MODELVIEW1_ARB */
-      1229, /* GL_NORMAL_MAP */
-      1552, /* GL_REFLECTION_MAP */
-      2015, /* GL_TEXTURE_CUBE_MAP */
-      1970, /* GL_TEXTURE_BINDING_CUBE_MAP */
-      2027, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */
-      2017, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */
-      2030, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */
-      2020, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */
-      2033, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */
-      2023, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */
-      1499, /* GL_PROXY_TEXTURE_CUBE_MAP */
-      1030, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */
-      1207, /* GL_MULTISAMPLE_FILTER_HINT_NV */
-      1442, /* GL_PRIMITIVE_RESTART_NV */
-      1441, /* GL_PRIMITIVE_RESTART_INDEX_NV */
-       586, /* GL_FOG_DISTANCE_MODE_NV */
-       534, /* GL_EYE_RADIAL_NV */
-       533, /* GL_EYE_PLANE_ABSOLUTE_NV */
-       270, /* GL_COMBINE */
-       277, /* GL_COMBINE_RGB */
-       272, /* GL_COMBINE_ALPHA */
-      1680, /* GL_RGB_SCALE */
+       166, /* GL_CLIENT_ACTIVE_TEXTURE */
+      1117, /* GL_MAX_TEXTURE_UNITS */
+      2139, /* GL_TRANSPOSE_MODELVIEW_MATRIX */
+      2142, /* GL_TRANSPOSE_PROJECTION_MATRIX */
+      2144, /* GL_TRANSPOSE_TEXTURE_MATRIX */
+      2136, /* GL_TRANSPOSE_COLOR_MATRIX */
+      1875, /* GL_SUBTRACT */
+      1098, /* GL_MAX_RENDERBUFFER_SIZE */
+       290, /* GL_COMPRESSED_ALPHA */
+       294, /* GL_COMPRESSED_LUMINANCE */
+       295, /* GL_COMPRESSED_LUMINANCE_ALPHA */
+       292, /* GL_COMPRESSED_INTENSITY */
+       300, /* GL_COMPRESSED_RGB */
+       301, /* GL_COMPRESSED_RGBA */
+      2016, /* GL_TEXTURE_COMPRESSION_HINT */
+      2093, /* GL_TEXTURE_RECTANGLE */
+      1981, /* GL_TEXTURE_BINDING_RECTANGLE */
+      1506, /* GL_PROXY_TEXTURE_RECTANGLE */
+      1095, /* GL_MAX_RECTANGLE_TEXTURE_SIZE */
+       430, /* GL_DEPTH_STENCIL */
+      2172, /* GL_UNSIGNED_INT_24_8 */
+      1112, /* GL_MAX_TEXTURE_LOD_BIAS */
+      2082, /* GL_TEXTURE_MAX_ANISOTROPY_EXT */
+      1114, /* GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT */
+      2054, /* GL_TEXTURE_FILTER_CONTROL */
+      2072, /* GL_TEXTURE_LOD_BIAS */
+       274, /* GL_COMBINE4 */
+      1104, /* GL_MAX_SHININESS_NV */
+      1105, /* GL_MAX_SPOT_EXPONENT_NV */
+       732, /* GL_INCR_WRAP */
+       395, /* GL_DECR_WRAP */
+      1176, /* GL_MODELVIEW1_ARB */
+      1234, /* GL_NORMAL_MAP */
+      1557, /* GL_REFLECTION_MAP */
+      2026, /* GL_TEXTURE_CUBE_MAP */
+      1978, /* GL_TEXTURE_BINDING_CUBE_MAP */
+      2038, /* GL_TEXTURE_CUBE_MAP_POSITIVE_X */
+      2028, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_X */
+      2041, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Y */
+      2031, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y */
+      2044, /* GL_TEXTURE_CUBE_MAP_POSITIVE_Z */
+      2034, /* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z */
+      1504, /* GL_PROXY_TEXTURE_CUBE_MAP */
+      1034, /* GL_MAX_CUBE_MAP_TEXTURE_SIZE */
+      1212, /* GL_MULTISAMPLE_FILTER_HINT_NV */
+      1447, /* GL_PRIMITIVE_RESTART_NV */
+      1446, /* GL_PRIMITIVE_RESTART_INDEX_NV */
+       590, /* GL_FOG_DISTANCE_MODE_NV */
+       537, /* GL_EYE_RADIAL_NV */
+       536, /* GL_EYE_PLANE_ABSOLUTE_NV */
+       273, /* GL_COMBINE */
+       280, /* GL_COMBINE_RGB */
+       275, /* GL_COMBINE_ALPHA */
+      1686, /* GL_RGB_SCALE */
         25, /* GL_ADD_SIGNED */
-       764, /* GL_INTERPOLATE */
-       313, /* GL_CONSTANT */
-      1434, /* GL_PRIMARY_COLOR */
-      1431, /* GL_PREVIOUS */
-      1773, /* GL_SOURCE0_RGB */
-      1779, /* GL_SOURCE1_RGB */
-      1785, /* GL_SOURCE2_RGB */
-      1789, /* GL_SOURCE3_RGB_NV */
-      1770, /* GL_SOURCE0_ALPHA */
-      1776, /* GL_SOURCE1_ALPHA */
-      1782, /* GL_SOURCE2_ALPHA */
-      1788, /* GL_SOURCE3_ALPHA_NV */
-      1270, /* GL_OPERAND0_RGB */
-      1276, /* GL_OPERAND1_RGB */
-      1282, /* GL_OPERAND2_RGB */
-      1286, /* GL_OPERAND3_RGB_NV */
-      1267, /* GL_OPERAND0_ALPHA */
-      1273, /* GL_OPERAND1_ALPHA */
-      1279, /* GL_OPERAND2_ALPHA */
-      1285, /* GL_OPERAND3_ALPHA_NV */
+       768, /* GL_INTERPOLATE */
+       316, /* GL_CONSTANT */
+      1439, /* GL_PRIMARY_COLOR */
+      1436, /* GL_PREVIOUS */
+      1780, /* GL_SOURCE0_RGB */
+      1786, /* GL_SOURCE1_RGB */
+      1792, /* GL_SOURCE2_RGB */
+      1796, /* GL_SOURCE3_RGB_NV */
+      1777, /* GL_SOURCE0_ALPHA */
+      1783, /* GL_SOURCE1_ALPHA */
+      1789, /* GL_SOURCE2_ALPHA */
+      1795, /* GL_SOURCE3_ALPHA_NV */
+      1275, /* GL_OPERAND0_RGB */
+      1281, /* GL_OPERAND1_RGB */
+      1287, /* GL_OPERAND2_RGB */
+      1291, /* GL_OPERAND3_RGB_NV */
+      1272, /* GL_OPERAND0_ALPHA */
+      1278, /* GL_OPERAND1_ALPHA */
+      1284, /* GL_OPERAND2_ALPHA */
+      1290, /* GL_OPERAND3_ALPHA_NV */
        137, /* GL_BUFFER_OBJECT_APPLE */
-      2213, /* GL_VERTEX_ARRAY_BINDING */
-      2080, /* GL_TEXTURE_RANGE_LENGTH_APPLE */
-      2081, /* GL_TEXTURE_RANGE_POINTER_APPLE */
-      2290, /* GL_YCBCR_422_APPLE */
-      2202, /* GL_UNSIGNED_SHORT_8_8_APPLE */
-      2204, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */
-      2092, /* GL_TEXTURE_STORAGE_HINT_APPLE */
-      1859, /* GL_STORAGE_PRIVATE_APPLE */
-      1858, /* GL_STORAGE_CACHED_APPLE */
-      1860, /* GL_STORAGE_SHARED_APPLE */
-      1760, /* GL_SLICE_ACCUM_SUN */
-      1510, /* GL_QUAD_MESH_SUN */
-      2139, /* GL_TRIANGLE_MESH_SUN */
-      2255, /* GL_VERTEX_PROGRAM_ARB */
-      2266, /* GL_VERTEX_STATE_PROGRAM_NV */
-      2240, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */
-      2248, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */
-      2250, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */
-      2252, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */
-       383, /* GL_CURRENT_VERTEX_ATTRIB */
-      1455, /* GL_PROGRAM_LENGTH_ARB */
-      1471, /* GL_PROGRAM_STRING_ARB */
-      1194, /* GL_MODELVIEW_PROJECTION_NV */
-       721, /* GL_IDENTITY_NV */
-       796, /* GL_INVERSE_NV */
-      2130, /* GL_TRANSPOSE_NV */
-       797, /* GL_INVERSE_TRANSPOSE_NV */
-      1075, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */
-      1074, /* GL_MAX_PROGRAM_MATRICES_ARB */
-       956, /* GL_MATRIX0_NV */
-       968, /* GL_MATRIX1_NV */
-       980, /* GL_MATRIX2_NV */
-       984, /* GL_MATRIX3_NV */
-       986, /* GL_MATRIX4_NV */
-       988, /* GL_MATRIX5_NV */
-       990, /* GL_MATRIX6_NV */
-       992, /* GL_MATRIX7_NV */
-       366, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */
-       363, /* GL_CURRENT_MATRIX_ARB */
-      1468, /* GL_PROGRAM_POINT_SIZE */
-      2261, /* GL_VERTEX_PROGRAM_TWO_SIDE */
-      1467, /* GL_PROGRAM_PARAMETER_NV */
-      2246, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */
-      1473, /* GL_PROGRAM_TARGET_NV */
-      1470, /* GL_PROGRAM_RESIDENT_NV */
-      2102, /* GL_TRACK_MATRIX_NV */
-      2103, /* GL_TRACK_MATRIX_TRANSFORM_NV */
-      2256, /* GL_VERTEX_PROGRAM_BINDING_NV */
-      1449, /* GL_PROGRAM_ERROR_POSITION_ARB */
-       408, /* GL_DEPTH_CLAMP */
-      2221, /* GL_VERTEX_ATTRIB_ARRAY0_NV */
-      2228, /* GL_VERTEX_ATTRIB_ARRAY1_NV */
-      2229, /* GL_VERTEX_ATTRIB_ARRAY2_NV */
-      2230, /* GL_VERTEX_ATTRIB_ARRAY3_NV */
-      2231, /* GL_VERTEX_ATTRIB_ARRAY4_NV */
-      2232, /* GL_VERTEX_ATTRIB_ARRAY5_NV */
-      2233, /* GL_VERTEX_ATTRIB_ARRAY6_NV */
-      2234, /* GL_VERTEX_ATTRIB_ARRAY7_NV */
-      2235, /* GL_VERTEX_ATTRIB_ARRAY8_NV */
-      2236, /* GL_VERTEX_ATTRIB_ARRAY9_NV */
-      2222, /* GL_VERTEX_ATTRIB_ARRAY10_NV */
-      2223, /* GL_VERTEX_ATTRIB_ARRAY11_NV */
-      2224, /* GL_VERTEX_ATTRIB_ARRAY12_NV */
-      2225, /* GL_VERTEX_ATTRIB_ARRAY13_NV */
-      2226, /* GL_VERTEX_ATTRIB_ARRAY14_NV */
-      2227, /* GL_VERTEX_ATTRIB_ARRAY15_NV */
-       904, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */
-       911, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */
-       912, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */
-       913, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */
-       914, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */
-       915, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */
-       916, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */
-       917, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */
-       918, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */
-       919, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */
-       905, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */
-       906, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */
-       907, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */
-       908, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */
-       909, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */
-       910, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */
-       931, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */
-       938, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */
-       939, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */
-       940, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */
-       941, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */
-       942, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */
-       943, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */
-      1448, /* GL_PROGRAM_BINDING_ARB */
-       945, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */
-       946, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */
-       932, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */
-       933, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */
-       934, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */
-       935, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */
-       936, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */
-       937, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */
-      2003, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */
-      2000, /* GL_TEXTURE_COMPRESSED */
-      1235, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */
-       311, /* GL_COMPRESSED_TEXTURE_FORMATS */
-      1134, /* GL_MAX_VERTEX_UNITS_ARB */
+      2224, /* GL_VERTEX_ARRAY_BINDING */
+      2091, /* GL_TEXTURE_RANGE_LENGTH_APPLE */
+      2092, /* GL_TEXTURE_RANGE_POINTER_APPLE */
+      2301, /* GL_YCBCR_422_APPLE */
+      2213, /* GL_UNSIGNED_SHORT_8_8_APPLE */
+      2215, /* GL_UNSIGNED_SHORT_8_8_REV_APPLE */
+      2103, /* GL_TEXTURE_STORAGE_HINT_APPLE */
+      1866, /* GL_STORAGE_PRIVATE_APPLE */
+      1865, /* GL_STORAGE_CACHED_APPLE */
+      1867, /* GL_STORAGE_SHARED_APPLE */
+      1767, /* GL_SLICE_ACCUM_SUN */
+      1515, /* GL_QUAD_MESH_SUN */
+      2150, /* GL_TRIANGLE_MESH_SUN */
+      2266, /* GL_VERTEX_PROGRAM_ARB */
+      2277, /* GL_VERTEX_STATE_PROGRAM_NV */
+      2251, /* GL_VERTEX_ATTRIB_ARRAY_ENABLED */
+      2259, /* GL_VERTEX_ATTRIB_ARRAY_SIZE */
+      2261, /* GL_VERTEX_ATTRIB_ARRAY_STRIDE */
+      2263, /* GL_VERTEX_ATTRIB_ARRAY_TYPE */
+       386, /* GL_CURRENT_VERTEX_ATTRIB */
+      1460, /* GL_PROGRAM_LENGTH_ARB */
+      1476, /* GL_PROGRAM_STRING_ARB */
+      1199, /* GL_MODELVIEW_PROJECTION_NV */
+       725, /* GL_IDENTITY_NV */
+       800, /* GL_INVERSE_NV */
+      2141, /* GL_TRANSPOSE_NV */
+       801, /* GL_INVERSE_TRANSPOSE_NV */
+      1079, /* GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB */
+      1078, /* GL_MAX_PROGRAM_MATRICES_ARB */
+       960, /* GL_MATRIX0_NV */
+       972, /* GL_MATRIX1_NV */
+       984, /* GL_MATRIX2_NV */
+       988, /* GL_MATRIX3_NV */
+       990, /* GL_MATRIX4_NV */
+       992, /* GL_MATRIX5_NV */
+       994, /* GL_MATRIX6_NV */
+       996, /* GL_MATRIX7_NV */
+       369, /* GL_CURRENT_MATRIX_STACK_DEPTH_ARB */
+       366, /* GL_CURRENT_MATRIX_ARB */
+      1473, /* GL_PROGRAM_POINT_SIZE */
+      2272, /* GL_VERTEX_PROGRAM_TWO_SIDE */
+      1472, /* GL_PROGRAM_PARAMETER_NV */
+      2257, /* GL_VERTEX_ATTRIB_ARRAY_POINTER */
+      1478, /* GL_PROGRAM_TARGET_NV */
+      1475, /* GL_PROGRAM_RESIDENT_NV */
+      2113, /* GL_TRACK_MATRIX_NV */
+      2114, /* GL_TRACK_MATRIX_TRANSFORM_NV */
+      2267, /* GL_VERTEX_PROGRAM_BINDING_NV */
+      1454, /* GL_PROGRAM_ERROR_POSITION_ARB */
+       411, /* GL_DEPTH_CLAMP */
+      2232, /* GL_VERTEX_ATTRIB_ARRAY0_NV */
+      2239, /* GL_VERTEX_ATTRIB_ARRAY1_NV */
+      2240, /* GL_VERTEX_ATTRIB_ARRAY2_NV */
+      2241, /* GL_VERTEX_ATTRIB_ARRAY3_NV */
+      2242, /* GL_VERTEX_ATTRIB_ARRAY4_NV */
+      2243, /* GL_VERTEX_ATTRIB_ARRAY5_NV */
+      2244, /* GL_VERTEX_ATTRIB_ARRAY6_NV */
+      2245, /* GL_VERTEX_ATTRIB_ARRAY7_NV */
+      2246, /* GL_VERTEX_ATTRIB_ARRAY8_NV */
+      2247, /* GL_VERTEX_ATTRIB_ARRAY9_NV */
+      2233, /* GL_VERTEX_ATTRIB_ARRAY10_NV */
+      2234, /* GL_VERTEX_ATTRIB_ARRAY11_NV */
+      2235, /* GL_VERTEX_ATTRIB_ARRAY12_NV */
+      2236, /* GL_VERTEX_ATTRIB_ARRAY13_NV */
+      2237, /* GL_VERTEX_ATTRIB_ARRAY14_NV */
+      2238, /* GL_VERTEX_ATTRIB_ARRAY15_NV */
+       908, /* GL_MAP1_VERTEX_ATTRIB0_4_NV */
+       915, /* GL_MAP1_VERTEX_ATTRIB1_4_NV */
+       916, /* GL_MAP1_VERTEX_ATTRIB2_4_NV */
+       917, /* GL_MAP1_VERTEX_ATTRIB3_4_NV */
+       918, /* GL_MAP1_VERTEX_ATTRIB4_4_NV */
+       919, /* GL_MAP1_VERTEX_ATTRIB5_4_NV */
+       920, /* GL_MAP1_VERTEX_ATTRIB6_4_NV */
+       921, /* GL_MAP1_VERTEX_ATTRIB7_4_NV */
+       922, /* GL_MAP1_VERTEX_ATTRIB8_4_NV */
+       923, /* GL_MAP1_VERTEX_ATTRIB9_4_NV */
+       909, /* GL_MAP1_VERTEX_ATTRIB10_4_NV */
+       910, /* GL_MAP1_VERTEX_ATTRIB11_4_NV */
+       911, /* GL_MAP1_VERTEX_ATTRIB12_4_NV */
+       912, /* GL_MAP1_VERTEX_ATTRIB13_4_NV */
+       913, /* GL_MAP1_VERTEX_ATTRIB14_4_NV */
+       914, /* GL_MAP1_VERTEX_ATTRIB15_4_NV */
+       935, /* GL_MAP2_VERTEX_ATTRIB0_4_NV */
+       942, /* GL_MAP2_VERTEX_ATTRIB1_4_NV */
+       943, /* GL_MAP2_VERTEX_ATTRIB2_4_NV */
+       944, /* GL_MAP2_VERTEX_ATTRIB3_4_NV */
+       945, /* GL_MAP2_VERTEX_ATTRIB4_4_NV */
+       946, /* GL_MAP2_VERTEX_ATTRIB5_4_NV */
+       947, /* GL_MAP2_VERTEX_ATTRIB6_4_NV */
+      1453, /* GL_PROGRAM_BINDING_ARB */
+       949, /* GL_MAP2_VERTEX_ATTRIB8_4_NV */
+       950, /* GL_MAP2_VERTEX_ATTRIB9_4_NV */
+       936, /* GL_MAP2_VERTEX_ATTRIB10_4_NV */
+       937, /* GL_MAP2_VERTEX_ATTRIB11_4_NV */
+       938, /* GL_MAP2_VERTEX_ATTRIB12_4_NV */
+       939, /* GL_MAP2_VERTEX_ATTRIB13_4_NV */
+       940, /* GL_MAP2_VERTEX_ATTRIB14_4_NV */
+       941, /* GL_MAP2_VERTEX_ATTRIB15_4_NV */
+      2014, /* GL_TEXTURE_COMPRESSED_IMAGE_SIZE */
+      2011, /* GL_TEXTURE_COMPRESSED */
+      1240, /* GL_NUM_COMPRESSED_TEXTURE_FORMATS */
+       314, /* GL_COMPRESSED_TEXTURE_FORMATS */
+      1139, /* GL_MAX_VERTEX_UNITS_ARB */
         23, /* GL_ACTIVE_VERTEX_UNITS_ARB */
-      2284, /* GL_WEIGHT_SUM_UNITY_ARB */
-      2254, /* GL_VERTEX_BLEND_ARB */
-       385, /* GL_CURRENT_WEIGHT_ARB */
-      2282, /* GL_WEIGHT_ARRAY_TYPE_ARB */
-      2280, /* GL_WEIGHT_ARRAY_STRIDE_ARB */
-      2278, /* GL_WEIGHT_ARRAY_SIZE_ARB */
-      2276, /* GL_WEIGHT_ARRAY_POINTER_ARB */
-      2271, /* GL_WEIGHT_ARRAY_ARB */
-       442, /* GL_DOT3_RGB */
-       443, /* GL_DOT3_RGBA */
-       305, /* GL_COMPRESSED_RGB_FXT1_3DFX */
-       300, /* GL_COMPRESSED_RGBA_FXT1_3DFX */
-      1202, /* GL_MULTISAMPLE_3DFX */
-      1718, /* GL_SAMPLE_BUFFERS_3DFX */
-      1709, /* GL_SAMPLES_3DFX */
-      1182, /* GL_MODELVIEW2_ARB */
-      1185, /* GL_MODELVIEW3_ARB */
-      1186, /* GL_MODELVIEW4_ARB */
-      1187, /* GL_MODELVIEW5_ARB */
-      1188, /* GL_MODELVIEW6_ARB */
-      1189, /* GL_MODELVIEW7_ARB */
-      1190, /* GL_MODELVIEW8_ARB */
-      1191, /* GL_MODELVIEW9_ARB */
-      1161, /* GL_MODELVIEW10_ARB */
-      1162, /* GL_MODELVIEW11_ARB */
-      1163, /* GL_MODELVIEW12_ARB */
-      1164, /* GL_MODELVIEW13_ARB */
-      1165, /* GL_MODELVIEW14_ARB */
-      1166, /* GL_MODELVIEW15_ARB */
-      1167, /* GL_MODELVIEW16_ARB */
-      1168, /* GL_MODELVIEW17_ARB */
-      1169, /* GL_MODELVIEW18_ARB */
-      1170, /* GL_MODELVIEW19_ARB */
-      1172, /* GL_MODELVIEW20_ARB */
-      1173, /* GL_MODELVIEW21_ARB */
-      1174, /* GL_MODELVIEW22_ARB */
-      1175, /* GL_MODELVIEW23_ARB */
-      1176, /* GL_MODELVIEW24_ARB */
-      1177, /* GL_MODELVIEW25_ARB */
-      1178, /* GL_MODELVIEW26_ARB */
-      1179, /* GL_MODELVIEW27_ARB */
-      1180, /* GL_MODELVIEW28_ARB */
-      1181, /* GL_MODELVIEW29_ARB */
-      1183, /* GL_MODELVIEW30_ARB */
-      1184, /* GL_MODELVIEW31_ARB */
-       447, /* GL_DOT3_RGB_EXT */
-       445, /* GL_DOT3_RGBA_EXT */
-      1155, /* GL_MIRROR_CLAMP_EXT */
-      1158, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */
-      1197, /* GL_MODULATE_ADD_ATI */
-      1198, /* GL_MODULATE_SIGNED_ADD_ATI */
-      1199, /* GL_MODULATE_SUBTRACT_ATI */
-      2291, /* GL_YCBCR_MESA */
-      1294, /* GL_PACK_INVERT_MESA */
-       388, /* GL_DEBUG_OBJECT_MESA */
-       389, /* GL_DEBUG_PRINT_MESA */
-       387, /* GL_DEBUG_ASSERT_MESA */
+      2295, /* GL_WEIGHT_SUM_UNITY_ARB */
+      2265, /* GL_VERTEX_BLEND_ARB */
+       388, /* GL_CURRENT_WEIGHT_ARB */
+      2293, /* GL_WEIGHT_ARRAY_TYPE_ARB */
+      2291, /* GL_WEIGHT_ARRAY_STRIDE_ARB */
+      2289, /* GL_WEIGHT_ARRAY_SIZE_ARB */
+      2287, /* GL_WEIGHT_ARRAY_POINTER_ARB */
+      2282, /* GL_WEIGHT_ARRAY_ARB */
+       445, /* GL_DOT3_RGB */
+       446, /* GL_DOT3_RGBA */
+       308, /* GL_COMPRESSED_RGB_FXT1_3DFX */
+       303, /* GL_COMPRESSED_RGBA_FXT1_3DFX */
+      1207, /* GL_MULTISAMPLE_3DFX */
+      1725, /* GL_SAMPLE_BUFFERS_3DFX */
+      1716, /* GL_SAMPLES_3DFX */
+      1187, /* GL_MODELVIEW2_ARB */
+      1190, /* GL_MODELVIEW3_ARB */
+      1191, /* GL_MODELVIEW4_ARB */
+      1192, /* GL_MODELVIEW5_ARB */
+      1193, /* GL_MODELVIEW6_ARB */
+      1194, /* GL_MODELVIEW7_ARB */
+      1195, /* GL_MODELVIEW8_ARB */
+      1196, /* GL_MODELVIEW9_ARB */
+      1166, /* GL_MODELVIEW10_ARB */
+      1167, /* GL_MODELVIEW11_ARB */
+      1168, /* GL_MODELVIEW12_ARB */
+      1169, /* GL_MODELVIEW13_ARB */
+      1170, /* GL_MODELVIEW14_ARB */
+      1171, /* GL_MODELVIEW15_ARB */
+      1172, /* GL_MODELVIEW16_ARB */
+      1173, /* GL_MODELVIEW17_ARB */
+      1174, /* GL_MODELVIEW18_ARB */
+      1175, /* GL_MODELVIEW19_ARB */
+      1177, /* GL_MODELVIEW20_ARB */
+      1178, /* GL_MODELVIEW21_ARB */
+      1179, /* GL_MODELVIEW22_ARB */
+      1180, /* GL_MODELVIEW23_ARB */
+      1181, /* GL_MODELVIEW24_ARB */
+      1182, /* GL_MODELVIEW25_ARB */
+      1183, /* GL_MODELVIEW26_ARB */
+      1184, /* GL_MODELVIEW27_ARB */
+      1185, /* GL_MODELVIEW28_ARB */
+      1186, /* GL_MODELVIEW29_ARB */
+      1188, /* GL_MODELVIEW30_ARB */
+      1189, /* GL_MODELVIEW31_ARB */
+       450, /* GL_DOT3_RGB_EXT */
+       448, /* GL_DOT3_RGBA_EXT */
+      1160, /* GL_MIRROR_CLAMP_EXT */
+      1163, /* GL_MIRROR_CLAMP_TO_EDGE_EXT */
+      1202, /* GL_MODULATE_ADD_ATI */
+      1203, /* GL_MODULATE_SIGNED_ADD_ATI */
+      1204, /* GL_MODULATE_SUBTRACT_ATI */
+      2302, /* GL_YCBCR_MESA */
+      1299, /* GL_PACK_INVERT_MESA */
+       391, /* GL_DEBUG_OBJECT_MESA */
+       392, /* GL_DEBUG_PRINT_MESA */
+       390, /* GL_DEBUG_ASSERT_MESA */
        139, /* GL_BUFFER_SIZE */
        141, /* GL_BUFFER_USAGE */
        145, /* GL_BUMP_ROT_MATRIX_ATI */
        146, /* GL_BUMP_ROT_MATRIX_SIZE_ATI */
        144, /* GL_BUMP_NUM_TEX_UNITS_ATI */
        148, /* GL_BUMP_TEX_UNITS_ATI */
-       507, /* GL_DUDV_ATI */
-       506, /* GL_DU8DV8_ATI */
+       510, /* GL_DUDV_ATI */
+       509, /* GL_DU8DV8_ATI */
        143, /* GL_BUMP_ENVMAP_ATI */
        147, /* GL_BUMP_TARGET_ATI */
-      1238, /* GL_NUM_PROGRAM_BINARY_FORMATS_OES */
-      1446, /* GL_PROGRAM_BINARY_FORMATS_OES */
-      1822, /* GL_STENCIL_BACK_FUNC */
-      1820, /* GL_STENCIL_BACK_FAIL */
-      1824, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */
-      1826, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */
-       595, /* GL_FRAGMENT_PROGRAM_ARB */
-      1444, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */
-      1476, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */
-      1475, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */
-      1458, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
-      1464, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
-      1463, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
-      1064, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */
-      1089, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */
-      1088, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */
-      1077, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
-      1083, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
-      1082, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
-      1652, /* GL_RGBA32F */
-      1615, /* GL_RGB32F */
-      1643, /* GL_RGBA16F */
-      1607, /* GL_RGB16F */
-      1033, /* GL_MAX_DRAW_BUFFERS */
-       451, /* GL_DRAW_BUFFER0 */
-       454, /* GL_DRAW_BUFFER1 */
-       475, /* GL_DRAW_BUFFER2 */
-       478, /* GL_DRAW_BUFFER3 */
-       481, /* GL_DRAW_BUFFER4 */
-       484, /* GL_DRAW_BUFFER5 */
-       487, /* GL_DRAW_BUFFER6 */
-       490, /* GL_DRAW_BUFFER7 */
-       493, /* GL_DRAW_BUFFER8 */
-       496, /* GL_DRAW_BUFFER9 */
-       455, /* GL_DRAW_BUFFER10 */
-       458, /* GL_DRAW_BUFFER11 */
-       461, /* GL_DRAW_BUFFER12 */
-       464, /* GL_DRAW_BUFFER13 */
-       467, /* GL_DRAW_BUFFER14 */
-       470, /* GL_DRAW_BUFFER15 */
+      1243, /* GL_NUM_PROGRAM_BINARY_FORMATS_OES */
+      1451, /* GL_PROGRAM_BINARY_FORMATS_OES */
+      1829, /* GL_STENCIL_BACK_FUNC */
+      1827, /* GL_STENCIL_BACK_FAIL */
+      1831, /* GL_STENCIL_BACK_PASS_DEPTH_FAIL */
+      1833, /* GL_STENCIL_BACK_PASS_DEPTH_PASS */
+       599, /* GL_FRAGMENT_PROGRAM_ARB */
+      1449, /* GL_PROGRAM_ALU_INSTRUCTIONS_ARB */
+      1481, /* GL_PROGRAM_TEX_INSTRUCTIONS_ARB */
+      1480, /* GL_PROGRAM_TEX_INDIRECTIONS_ARB */
+      1463, /* GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
+      1469, /* GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
+      1468, /* GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
+      1068, /* GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB */
+      1093, /* GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB */
+      1092, /* GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB */
+      1081, /* GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB */
+      1087, /* GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB */
+      1086, /* GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB */
+      1657, /* GL_RGBA32F */
+      1620, /* GL_RGB32F */
+      1648, /* GL_RGBA16F */
+      1612, /* GL_RGB16F */
+      1676, /* GL_RGBA_FLOAT_MODE_ARB */
+      1037, /* GL_MAX_DRAW_BUFFERS */
+       454, /* GL_DRAW_BUFFER0 */
+       457, /* GL_DRAW_BUFFER1 */
+       478, /* GL_DRAW_BUFFER2 */
+       481, /* GL_DRAW_BUFFER3 */
+       484, /* GL_DRAW_BUFFER4 */
+       487, /* GL_DRAW_BUFFER5 */
+       490, /* GL_DRAW_BUFFER6 */
+       493, /* GL_DRAW_BUFFER7 */
+       496, /* GL_DRAW_BUFFER8 */
+       499, /* GL_DRAW_BUFFER9 */
+       458, /* GL_DRAW_BUFFER10 */
+       461, /* GL_DRAW_BUFFER11 */
+       464, /* GL_DRAW_BUFFER12 */
+       467, /* GL_DRAW_BUFFER13 */
+       470, /* GL_DRAW_BUFFER14 */
+       473, /* GL_DRAW_BUFFER15 */
         97, /* GL_BLEND_EQUATION_ALPHA */
-      1007, /* GL_MATRIX_PALETTE_ARB */
-      1057, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */
-      1060, /* GL_MAX_PALETTE_MATRICES_ARB */
-       369, /* GL_CURRENT_PALETTE_MATRIX_ARB */
-       995, /* GL_MATRIX_INDEX_ARRAY_ARB */
-       364, /* GL_CURRENT_MATRIX_INDEX_ARB */
-      1000, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */
-      1004, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */
-      1002, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */
-       998, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */
-      2038, /* GL_TEXTURE_DEPTH_SIZE */
-       435, /* GL_DEPTH_TEXTURE_MODE */
-      1995, /* GL_TEXTURE_COMPARE_MODE */
-      1993, /* GL_TEXTURE_COMPARE_FUNC */
-       281, /* GL_COMPARE_REF_TO_TEXTURE */
-      1371, /* GL_POINT_SPRITE */
-       343, /* GL_COORD_REPLACE */
-      1376, /* GL_POINT_SPRITE_R_MODE_NV */
-      1516, /* GL_QUERY_COUNTER_BITS */
-       372, /* GL_CURRENT_QUERY */
-      1520, /* GL_QUERY_RESULT */
-      1522, /* GL_QUERY_RESULT_AVAILABLE */
-      1126, /* GL_MAX_VERTEX_ATTRIBS */
-      2244, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */
-       433, /* GL_DEPTH_STENCIL_TO_RGBA_NV */
-       432, /* GL_DEPTH_STENCIL_TO_BGRA_NV */
-      1103, /* GL_MAX_TEXTURE_COORDS */
-      1105, /* GL_MAX_TEXTURE_IMAGE_UNITS */
-      1451, /* GL_PROGRAM_ERROR_STRING_ARB */
-      1453, /* GL_PROGRAM_FORMAT_ASCII_ARB */
-      1452, /* GL_PROGRAM_FORMAT_ARB */
-      2094, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */
-       405, /* GL_DEPTH_BOUNDS_TEST_EXT */
-       404, /* GL_DEPTH_BOUNDS_EXT */
+      1011, /* GL_MATRIX_PALETTE_ARB */
+      1061, /* GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB */
+      1064, /* GL_MAX_PALETTE_MATRICES_ARB */
+       372, /* GL_CURRENT_PALETTE_MATRIX_ARB */
+       999, /* GL_MATRIX_INDEX_ARRAY_ARB */
+       367, /* GL_CURRENT_MATRIX_INDEX_ARB */
+      1004, /* GL_MATRIX_INDEX_ARRAY_SIZE_ARB */
+      1008, /* GL_MATRIX_INDEX_ARRAY_TYPE_ARB */
+      1006, /* GL_MATRIX_INDEX_ARRAY_STRIDE_ARB */
+      1002, /* GL_MATRIX_INDEX_ARRAY_POINTER_ARB */
+      2049, /* GL_TEXTURE_DEPTH_SIZE */
+       438, /* GL_DEPTH_TEXTURE_MODE */
+      2006, /* GL_TEXTURE_COMPARE_MODE */
+      2004, /* GL_TEXTURE_COMPARE_FUNC */
+       284, /* GL_COMPARE_REF_TO_TEXTURE */
+      1376, /* GL_POINT_SPRITE */
+       346, /* GL_COORD_REPLACE */
+      1381, /* GL_POINT_SPRITE_R_MODE_NV */
+      1521, /* GL_QUERY_COUNTER_BITS */
+       375, /* GL_CURRENT_QUERY */
+      1525, /* GL_QUERY_RESULT */
+      1527, /* GL_QUERY_RESULT_AVAILABLE */
+      1131, /* GL_MAX_VERTEX_ATTRIBS */
+      2255, /* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED */
+       436, /* GL_DEPTH_STENCIL_TO_RGBA_NV */
+       435, /* GL_DEPTH_STENCIL_TO_BGRA_NV */
+      1108, /* GL_MAX_TEXTURE_COORDS */
+      1110, /* GL_MAX_TEXTURE_IMAGE_UNITS */
+      1456, /* GL_PROGRAM_ERROR_STRING_ARB */
+      1458, /* GL_PROGRAM_FORMAT_ASCII_ARB */
+      1457, /* GL_PROGRAM_FORMAT_ARB */
+      2105, /* GL_TEXTURE_UNSIGNED_REMAP_MODE_NV */
+       408, /* GL_DEPTH_BOUNDS_TEST_EXT */
+       407, /* GL_DEPTH_BOUNDS_EXT */
         61, /* GL_ARRAY_BUFFER */
-       520, /* GL_ELEMENT_ARRAY_BUFFER */
+       523, /* GL_ELEMENT_ARRAY_BUFFER */
         62, /* GL_ARRAY_BUFFER_BINDING */
-       521, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */
-      2215, /* GL_VERTEX_ARRAY_BUFFER_BINDING */
-      1224, /* GL_NORMAL_ARRAY_BUFFER_BINDING */
-       187, /* GL_COLOR_ARRAY_BUFFER_BINDING */
-       732, /* GL_INDEX_ARRAY_BUFFER_BINDING */
-      2008, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */
-       516, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */
-      1730, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */
-       573, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */
-      2272, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */
-      2237, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */
-      1454, /* GL_PROGRAM_INSTRUCTIONS_ARB */
-      1070, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */
-      1460, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
-      1079, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
-      1474, /* GL_PROGRAM_TEMPORARIES_ARB */
-      1085, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */
-      1462, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */
-      1081, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */
-      1466, /* GL_PROGRAM_PARAMETERS_ARB */
-      1084, /* GL_MAX_PROGRAM_PARAMETERS_ARB */
-      1461, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */
-      1080, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */
-      1445, /* GL_PROGRAM_ATTRIBS_ARB */
-      1065, /* GL_MAX_PROGRAM_ATTRIBS_ARB */
-      1459, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */
-      1078, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */
-      1443, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */
-      1063, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */
-      1457, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
-      1076, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
-      1071, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */
-      1067, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */
-      1477, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */
-      2127, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */
-      1539, /* GL_READ_ONLY */
-      2286, /* GL_WRITE_ONLY */
-      1541, /* GL_READ_WRITE */
+       524, /* GL_ELEMENT_ARRAY_BUFFER_BINDING */
+      2226, /* GL_VERTEX_ARRAY_BUFFER_BINDING */
+      1229, /* GL_NORMAL_ARRAY_BUFFER_BINDING */
+       190, /* GL_COLOR_ARRAY_BUFFER_BINDING */
+       736, /* GL_INDEX_ARRAY_BUFFER_BINDING */
+      2019, /* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING */
+       519, /* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING */
+      1737, /* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING */
+       577, /* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING */
+      2283, /* GL_WEIGHT_ARRAY_BUFFER_BINDING */
+      2248, /* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING */
+      1459, /* GL_PROGRAM_INSTRUCTIONS_ARB */
+      1074, /* GL_MAX_PROGRAM_INSTRUCTIONS_ARB */
+      1465, /* GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
+      1083, /* GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB */
+      1479, /* GL_PROGRAM_TEMPORARIES_ARB */
+      1089, /* GL_MAX_PROGRAM_TEMPORARIES_ARB */
+      1467, /* GL_PROGRAM_NATIVE_TEMPORARIES_ARB */
+      1085, /* GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB */
+      1471, /* GL_PROGRAM_PARAMETERS_ARB */
+      1088, /* GL_MAX_PROGRAM_PARAMETERS_ARB */
+      1466, /* GL_PROGRAM_NATIVE_PARAMETERS_ARB */
+      1084, /* GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB */
+      1450, /* GL_PROGRAM_ATTRIBS_ARB */
+      1069, /* GL_MAX_PROGRAM_ATTRIBS_ARB */
+      1464, /* GL_PROGRAM_NATIVE_ATTRIBS_ARB */
+      1082, /* GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB */
+      1448, /* GL_PROGRAM_ADDRESS_REGISTERS_ARB */
+      1067, /* GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB */
+      1462, /* GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
+      1080, /* GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB */
+      1075, /* GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB */
+      1071, /* GL_MAX_PROGRAM_ENV_PARAMETERS_ARB */
+      1482, /* GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB */
+      2138, /* GL_TRANSPOSE_CURRENT_MATRIX_ARB */
+      1544, /* GL_READ_ONLY */
+      2297, /* GL_WRITE_ONLY */
+      1546, /* GL_READ_WRITE */
        124, /* GL_BUFFER_ACCESS */
        129, /* GL_BUFFER_MAPPED */
        134, /* GL_BUFFER_MAP_POINTER */
-      2101, /* GL_TIME_ELAPSED_EXT */
-       955, /* GL_MATRIX0_ARB */
-       967, /* GL_MATRIX1_ARB */
-       979, /* GL_MATRIX2_ARB */
-       983, /* GL_MATRIX3_ARB */
-       985, /* GL_MATRIX4_ARB */
-       987, /* GL_MATRIX5_ARB */
-       989, /* GL_MATRIX6_ARB */
-       991, /* GL_MATRIX7_ARB */
-       993, /* GL_MATRIX8_ARB */
-       994, /* GL_MATRIX9_ARB */
-       957, /* GL_MATRIX10_ARB */
-       958, /* GL_MATRIX11_ARB */
-       959, /* GL_MATRIX12_ARB */
-       960, /* GL_MATRIX13_ARB */
-       961, /* GL_MATRIX14_ARB */
-       962, /* GL_MATRIX15_ARB */
-       963, /* GL_MATRIX16_ARB */
-       964, /* GL_MATRIX17_ARB */
-       965, /* GL_MATRIX18_ARB */
-       966, /* GL_MATRIX19_ARB */
-       969, /* GL_MATRIX20_ARB */
-       970, /* GL_MATRIX21_ARB */
-       971, /* GL_MATRIX22_ARB */
-       972, /* GL_MATRIX23_ARB */
-       973, /* GL_MATRIX24_ARB */
-       974, /* GL_MATRIX25_ARB */
-       975, /* GL_MATRIX26_ARB */
-       976, /* GL_MATRIX27_ARB */
-       977, /* GL_MATRIX28_ARB */
-       978, /* GL_MATRIX29_ARB */
-       981, /* GL_MATRIX30_ARB */
-       982, /* GL_MATRIX31_ARB */
-      1863, /* GL_STREAM_DRAW */
-      1865, /* GL_STREAM_READ */
-      1861, /* GL_STREAM_COPY */
-      1812, /* GL_STATIC_DRAW */
-      1814, /* GL_STATIC_READ */
-      1810, /* GL_STATIC_COPY */
-       510, /* GL_DYNAMIC_DRAW */
-       512, /* GL_DYNAMIC_READ */
-       508, /* GL_DYNAMIC_COPY */
-      1334, /* GL_PIXEL_PACK_BUFFER */
-      1338, /* GL_PIXEL_UNPACK_BUFFER */
-      1335, /* GL_PIXEL_PACK_BUFFER_BINDING */
-      1339, /* GL_PIXEL_UNPACK_BUFFER_BINDING */
-       396, /* GL_DEPTH24_STENCIL8 */
-      2090, /* GL_TEXTURE_STENCIL_SIZE */
-      2036, /* GL_TEXTURE_CUBE_MAP_SEAMLESS */
-      1066, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */
-      1069, /* GL_MAX_PROGRAM_IF_DEPTH_NV */
-      1073, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */
-      1072, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */
-      2242, /* GL_VERTEX_ATTRIB_ARRAY_INTEGER */
-      2239, /* GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB */
-      1012, /* GL_MAX_ARRAY_TEXTURE_LAYERS */
-      1149, /* GL_MIN_PROGRAM_TEXEL_OFFSET */
-      1086, /* GL_MAX_PROGRAM_TEXEL_OFFSET */
-      1854, /* GL_STENCIL_TEST_TWO_SIDE_EXT */
+      2112, /* GL_TIME_ELAPSED_EXT */
+       959, /* GL_MATRIX0_ARB */
+       971, /* GL_MATRIX1_ARB */
+       983, /* GL_MATRIX2_ARB */
+       987, /* GL_MATRIX3_ARB */
+       989, /* GL_MATRIX4_ARB */
+       991, /* GL_MATRIX5_ARB */
+       993, /* GL_MATRIX6_ARB */
+       995, /* GL_MATRIX7_ARB */
+       997, /* GL_MATRIX8_ARB */
+       998, /* GL_MATRIX9_ARB */
+       961, /* GL_MATRIX10_ARB */
+       962, /* GL_MATRIX11_ARB */
+       963, /* GL_MATRIX12_ARB */
+       964, /* GL_MATRIX13_ARB */
+       965, /* GL_MATRIX14_ARB */
+       966, /* GL_MATRIX15_ARB */
+       967, /* GL_MATRIX16_ARB */
+       968, /* GL_MATRIX17_ARB */
+       969, /* GL_MATRIX18_ARB */
+       970, /* GL_MATRIX19_ARB */
+       973, /* GL_MATRIX20_ARB */
+       974, /* GL_MATRIX21_ARB */
+       975, /* GL_MATRIX22_ARB */
+       976, /* GL_MATRIX23_ARB */
+       977, /* GL_MATRIX24_ARB */
+       978, /* GL_MATRIX25_ARB */
+       979, /* GL_MATRIX26_ARB */
+       980, /* GL_MATRIX27_ARB */
+       981, /* GL_MATRIX28_ARB */
+       982, /* GL_MATRIX29_ARB */
+       985, /* GL_MATRIX30_ARB */
+       986, /* GL_MATRIX31_ARB */
+      1870, /* GL_STREAM_DRAW */
+      1872, /* GL_STREAM_READ */
+      1868, /* GL_STREAM_COPY */
+      1819, /* GL_STATIC_DRAW */
+      1821, /* GL_STATIC_READ */
+      1817, /* GL_STATIC_COPY */
+       513, /* GL_DYNAMIC_DRAW */
+       515, /* GL_DYNAMIC_READ */
+       511, /* GL_DYNAMIC_COPY */
+      1339, /* GL_PIXEL_PACK_BUFFER */
+      1343, /* GL_PIXEL_UNPACK_BUFFER */
+      1340, /* GL_PIXEL_PACK_BUFFER_BINDING */
+      1344, /* GL_PIXEL_UNPACK_BUFFER_BINDING */
+       399, /* GL_DEPTH24_STENCIL8 */
+      2101, /* GL_TEXTURE_STENCIL_SIZE */
+      2047, /* GL_TEXTURE_CUBE_MAP_SEAMLESS */
+      1070, /* GL_MAX_PROGRAM_CALL_DEPTH_NV */
+      1073, /* GL_MAX_PROGRAM_IF_DEPTH_NV */
+      1077, /* GL_MAX_PROGRAM_LOOP_DEPTH_NV */
+      1076, /* GL_MAX_PROGRAM_LOOP_COUNT_NV */
+      2253, /* GL_VERTEX_ATTRIB_ARRAY_INTEGER */
+      2250, /* GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB */
+      1016, /* GL_MAX_ARRAY_TEXTURE_LAYERS */
+      1154, /* GL_MIN_PROGRAM_TEXEL_OFFSET */
+      1090, /* GL_MAX_PROGRAM_TEXEL_OFFSET */
+      1861, /* GL_STENCIL_TEST_TWO_SIDE_EXT */
         18, /* GL_ACTIVE_STENCIL_FACE_EXT */
-      1156, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */
-      1711, /* GL_SAMPLES_PASSED */
-       688, /* GL_GEOMETRY_VERTICES_OUT */
-       682, /* GL_GEOMETRY_INPUT_TYPE */
-       684, /* GL_GEOMETRY_OUTPUT_TYPE */
-       156, /* GL_CLAMP_READ_COLOR */
-       546, /* GL_FIXED_ONLY */
-      1358, /* GL_POINT_SIZE_ARRAY_TYPE_OES */
-      1357, /* GL_POINT_SIZE_ARRAY_STRIDE_OES */
-      1356, /* GL_POINT_SIZE_ARRAY_POINTER_OES */
-      1193, /* GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES */
-      1480, /* GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES */
-      2070, /* GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES */
+      1161, /* GL_MIRROR_CLAMP_TO_BORDER_EXT */
+      1718, /* GL_SAMPLES_PASSED */
+       692, /* GL_GEOMETRY_VERTICES_OUT */
+       686, /* GL_GEOMETRY_INPUT_TYPE */
+       688, /* GL_GEOMETRY_OUTPUT_TYPE */
+      1709, /* GL_SAMPLER_BINDING */
+       164, /* GL_CLAMP_VERTEX_COLOR_ARB */
+       156, /* GL_CLAMP_FRAGMENT_COLOR_ARB */
+       157, /* GL_CLAMP_READ_COLOR */
+       549, /* GL_FIXED_ONLY */
+      1363, /* GL_POINT_SIZE_ARRAY_TYPE_OES */
+      1362, /* GL_POINT_SIZE_ARRAY_STRIDE_OES */
+      1361, /* GL_POINT_SIZE_ARRAY_POINTER_OES */
+      1198, /* GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES */
+      1485, /* GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES */
+      2081, /* GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES */
        138, /* GL_BUFFER_SERIALIZED_MODIFY_APPLE */
        128, /* GL_BUFFER_FLUSHING_UNMAP_APPLE */
-      1556, /* GL_RELEASED_APPLE */
-      2269, /* GL_VOLATILE_APPLE */
-      1595, /* GL_RETAINED_APPLE */
-      2144, /* GL_UNDEFINED_APPLE */
-      1504, /* GL_PURGEABLE_APPLE */
-       596, /* GL_FRAGMENT_SHADER */
-      2264, /* GL_VERTEX_SHADER */
-      1465, /* GL_PROGRAM_OBJECT_ARB */
-      1747, /* GL_SHADER_OBJECT_ARB */
-      1041, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */
-      1131, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */
-      1122, /* GL_MAX_VARYING_COMPONENTS */
-      1129, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */
-      1024, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */
-      1254, /* GL_OBJECT_TYPE_ARB */
-      1749, /* GL_SHADER_TYPE */
-       561, /* GL_FLOAT_VEC2 */
-       563, /* GL_FLOAT_VEC3 */
-       565, /* GL_FLOAT_VEC4 */
-       784, /* GL_INT_VEC2 */
-       786, /* GL_INT_VEC3 */
-       788, /* GL_INT_VEC4 */
+      1561, /* GL_RELEASED_APPLE */
+      2280, /* GL_VOLATILE_APPLE */
+      1600, /* GL_RETAINED_APPLE */
+      2155, /* GL_UNDEFINED_APPLE */
+      1509, /* GL_PURGEABLE_APPLE */
+       600, /* GL_FRAGMENT_SHADER */
+      2275, /* GL_VERTEX_SHADER */
+      1470, /* GL_PROGRAM_OBJECT_ARB */
+      1754, /* GL_SHADER_OBJECT_ARB */
+      1045, /* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS */
+      1136, /* GL_MAX_VERTEX_UNIFORM_COMPONENTS */
+      1127, /* GL_MAX_VARYING_COMPONENTS */
+      1134, /* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS */
+      1028, /* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS */
+      1259, /* GL_OBJECT_TYPE_ARB */
+      1756, /* GL_SHADER_TYPE */
+       565, /* GL_FLOAT_VEC2 */
+       567, /* GL_FLOAT_VEC3 */
+       569, /* GL_FLOAT_VEC4 */
+       788, /* GL_INT_VEC2 */
+       790, /* GL_INT_VEC3 */
+       792, /* GL_INT_VEC4 */
        116, /* GL_BOOL */
        118, /* GL_BOOL_VEC2 */
        120, /* GL_BOOL_VEC3 */
        122, /* GL_BOOL_VEC4 */
-       549, /* GL_FLOAT_MAT2 */
-       553, /* GL_FLOAT_MAT3 */
-       557, /* GL_FLOAT_MAT4 */
-      1687, /* GL_SAMPLER_1D */
-      1693, /* GL_SAMPLER_2D */
-      1701, /* GL_SAMPLER_3D */
-      1705, /* GL_SAMPLER_CUBE */
-      1692, /* GL_SAMPLER_1D_SHADOW */
-      1700, /* GL_SAMPLER_2D_SHADOW */
-      1698, /* GL_SAMPLER_2D_RECT */
-      1699, /* GL_SAMPLER_2D_RECT_SHADOW */
-       551, /* GL_FLOAT_MAT2x3 */
-       552, /* GL_FLOAT_MAT2x4 */
-       555, /* GL_FLOAT_MAT3x2 */
-       556, /* GL_FLOAT_MAT3x4 */
-       559, /* GL_FLOAT_MAT4x2 */
-       560, /* GL_FLOAT_MAT4x3 */
-       394, /* GL_DELETE_STATUS */
-       286, /* GL_COMPILE_STATUS */
-       845, /* GL_LINK_STATUS */
-      2209, /* GL_VALIDATE_STATUS */
-       744, /* GL_INFO_LOG_LENGTH */
+       553, /* GL_FLOAT_MAT2 */
+       557, /* GL_FLOAT_MAT3 */
+       561, /* GL_FLOAT_MAT4 */
+      1693, /* GL_SAMPLER_1D */
+      1699, /* GL_SAMPLER_2D */
+      1707, /* GL_SAMPLER_3D */
+      1712, /* GL_SAMPLER_CUBE */
+      1698, /* GL_SAMPLER_1D_SHADOW */
+      1706, /* GL_SAMPLER_2D_SHADOW */
+      1704, /* GL_SAMPLER_2D_RECT */
+      1705, /* GL_SAMPLER_2D_RECT_SHADOW */
+       555, /* GL_FLOAT_MAT2x3 */
+       556, /* GL_FLOAT_MAT2x4 */
+       559, /* GL_FLOAT_MAT3x2 */
+       560, /* GL_FLOAT_MAT3x4 */
+       563, /* GL_FLOAT_MAT4x2 */
+       564, /* GL_FLOAT_MAT4x3 */
+       397, /* GL_DELETE_STATUS */
+       289, /* GL_COMPILE_STATUS */
+       849, /* GL_LINK_STATUS */
+      2220, /* GL_VALIDATE_STATUS */
+       748, /* GL_INFO_LOG_LENGTH */
         64, /* GL_ATTACHED_SHADERS */
         21, /* GL_ACTIVE_UNIFORMS */
         22, /* GL_ACTIVE_UNIFORM_MAX_LENGTH */
-      1748, /* GL_SHADER_SOURCE_LENGTH */
+      1755, /* GL_SHADER_SOURCE_LENGTH */
         15, /* GL_ACTIVE_ATTRIBUTES */
         16, /* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH */
-       598, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */
-      1751, /* GL_SHADING_LANGUAGE_VERSION */
-       371, /* GL_CURRENT_PROGRAM */
-      1303, /* GL_PALETTE4_RGB8_OES */
-      1305, /* GL_PALETTE4_RGBA8_OES */
-      1301, /* GL_PALETTE4_R5_G6_B5_OES */
-      1304, /* GL_PALETTE4_RGBA4_OES */
-      1302, /* GL_PALETTE4_RGB5_A1_OES */
-      1308, /* GL_PALETTE8_RGB8_OES */
-      1310, /* GL_PALETTE8_RGBA8_OES */
-      1306, /* GL_PALETTE8_R5_G6_B5_OES */
-      1309, /* GL_PALETTE8_RGBA4_OES */
-      1307, /* GL_PALETTE8_RGB5_A1_OES */
-       725, /* GL_IMPLEMENTATION_COLOR_READ_TYPE */
-       723, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT */
-      1355, /* GL_POINT_SIZE_ARRAY_OES */
-      2014, /* GL_TEXTURE_CROP_RECT_OES */
-       996, /* GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES */
-      1354, /* GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES */
-      2192, /* GL_UNSIGNED_NORMALIZED */
-      1951, /* GL_TEXTURE_1D_ARRAY */
-      1490, /* GL_PROXY_TEXTURE_1D_ARRAY */
-      1954, /* GL_TEXTURE_2D_ARRAY */
-      1494, /* GL_PROXY_TEXTURE_2D_ARRAY */
-      1962, /* GL_TEXTURE_BINDING_1D_ARRAY */
-      1965, /* GL_TEXTURE_BINDING_2D_ARRAY */
-      1048, /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS */
-      1981, /* GL_TEXTURE_BUFFER */
-      1102, /* GL_MAX_TEXTURE_BUFFER_SIZE */
-      1969, /* GL_TEXTURE_BINDING_BUFFER */
-      1982, /* GL_TEXTURE_BUFFER_DATA_STORE_BINDING */
-      1983, /* GL_TEXTURE_BUFFER_FORMAT */
-      1527, /* GL_R11F_G11F_B10F */
-      2158, /* GL_UNSIGNED_INT_10F_11F_11F_REV */
-      1638, /* GL_RGB9_E5 */
-      2167, /* GL_UNSIGNED_INT_5_9_9_9_REV */
-      2088, /* GL_TEXTURE_SHARED_SIZE */
-      1804, /* GL_SRGB */
-      1805, /* GL_SRGB8 */
-      1807, /* GL_SRGB_ALPHA */
-      1806, /* GL_SRGB8_ALPHA8 */
-      1764, /* GL_SLUMINANCE_ALPHA */
-      1763, /* GL_SLUMINANCE8_ALPHA8 */
-      1761, /* GL_SLUMINANCE */
-      1762, /* GL_SLUMINANCE8 */
-       309, /* GL_COMPRESSED_SRGB */
-       310, /* GL_COMPRESSED_SRGB_ALPHA */
-       307, /* GL_COMPRESSED_SLUMINANCE */
-       308, /* GL_COMPRESSED_SLUMINANCE_ALPHA */
-      2123, /* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH */
-      2112, /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE */
-      1120, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS */
-      2121, /* GL_TRANSFORM_FEEDBACK_VARYINGS */
-      2117, /* GL_TRANSFORM_FEEDBACK_BUFFER_START */
-      2115, /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE */
-      1437, /* GL_PRIMITIVES_GENERATED */
-      2119, /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN */
-      1531, /* GL_RASTERIZER_DISCARD */
-      1116, /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS */
-      1118, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS */
-       762, /* GL_INTERLEAVED_ATTRIBS */
-      1740, /* GL_SEPARATE_ATTRIBS */
-      2107, /* GL_TRANSFORM_FEEDBACK_BUFFER */
-      2109, /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING */
-      1373, /* GL_POINT_SPRITE_COORD_ORIGIN */
-       853, /* GL_LOWER_LEFT */
-      2206, /* GL_UPPER_LEFT */
-      1828, /* GL_STENCIL_BACK_REF */
-      1829, /* GL_STENCIL_BACK_VALUE_MASK */
-      1830, /* GL_STENCIL_BACK_WRITEMASK */
-       500, /* GL_DRAW_FRAMEBUFFER_BINDING */
-      1561, /* GL_RENDERBUFFER_BINDING */
-      1535, /* GL_READ_FRAMEBUFFER */
-       499, /* GL_DRAW_FRAMEBUFFER */
-      1536, /* GL_READ_FRAMEBUFFER_BINDING */
-      1580, /* GL_RENDERBUFFER_SAMPLES */
-       612, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */
-       609, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */
-       624, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */
-       619, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */
-       622, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */
-       630, /* GL_FRAMEBUFFER_COMPLETE */
-       635, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */
-       650, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */
-       644, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */
-       639, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */
-       645, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */
-       641, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */
-       655, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */
-       661, /* GL_FRAMEBUFFER_UNSUPPORTED */
-       659, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */
-      1020, /* GL_MAX_COLOR_ATTACHMENTS */
-       193, /* GL_COLOR_ATTACHMENT0 */
-       196, /* GL_COLOR_ATTACHMENT1 */
-       210, /* GL_COLOR_ATTACHMENT2 */
-       212, /* GL_COLOR_ATTACHMENT3 */
-       214, /* GL_COLOR_ATTACHMENT4 */
-       216, /* GL_COLOR_ATTACHMENT5 */
-       218, /* GL_COLOR_ATTACHMENT6 */
-       220, /* GL_COLOR_ATTACHMENT7 */
-       222, /* GL_COLOR_ATTACHMENT8 */
-       224, /* GL_COLOR_ATTACHMENT9 */
-       197, /* GL_COLOR_ATTACHMENT10 */
-       199, /* GL_COLOR_ATTACHMENT11 */
-       201, /* GL_COLOR_ATTACHMENT12 */
-       203, /* GL_COLOR_ATTACHMENT13 */
-       205, /* GL_COLOR_ATTACHMENT14 */
-       207, /* GL_COLOR_ATTACHMENT15 */
-       399, /* GL_DEPTH_ATTACHMENT */
-      1817, /* GL_STENCIL_ATTACHMENT */
-       600, /* GL_FRAMEBUFFER */
-      1558, /* GL_RENDERBUFFER */
-      1584, /* GL_RENDERBUFFER_WIDTH */
-      1571, /* GL_RENDERBUFFER_HEIGHT */
-      1574, /* GL_RENDERBUFFER_INTERNAL_FORMAT */
-      1849, /* GL_STENCIL_INDEX_EXT */
-      1838, /* GL_STENCIL_INDEX1 */
-      1843, /* GL_STENCIL_INDEX4 */
-      1846, /* GL_STENCIL_INDEX8 */
-      1839, /* GL_STENCIL_INDEX16 */
-      1578, /* GL_RENDERBUFFER_RED_SIZE */
-      1569, /* GL_RENDERBUFFER_GREEN_SIZE */
-      1564, /* GL_RENDERBUFFER_BLUE_SIZE */
-      1559, /* GL_RENDERBUFFER_ALPHA_SIZE */
-      1566, /* GL_RENDERBUFFER_DEPTH_SIZE */
-      1582, /* GL_RENDERBUFFER_STENCIL_SIZE */
-       653, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */
-      1097, /* GL_MAX_SAMPLES */
-      2050, /* GL_TEXTURE_GEN_STR_OES */
-       699, /* GL_HALF_FLOAT_OES */
-      1625, /* GL_RGB565_OES */
-      1655, /* GL_RGBA32UI */
-      1618, /* GL_RGB32UI */
+       602, /* GL_FRAGMENT_SHADER_DERIVATIVE_HINT */
+      1758, /* GL_SHADING_LANGUAGE_VERSION */
+       374, /* GL_CURRENT_PROGRAM */
+      1308, /* GL_PALETTE4_RGB8_OES */
+      1310, /* GL_PALETTE4_RGBA8_OES */
+      1306, /* GL_PALETTE4_R5_G6_B5_OES */
+      1309, /* GL_PALETTE4_RGBA4_OES */
+      1307, /* GL_PALETTE4_RGB5_A1_OES */
+      1313, /* GL_PALETTE8_RGB8_OES */
+      1315, /* GL_PALETTE8_RGBA8_OES */
+      1311, /* GL_PALETTE8_R5_G6_B5_OES */
+      1314, /* GL_PALETTE8_RGBA4_OES */
+      1312, /* GL_PALETTE8_RGB5_A1_OES */
+       729, /* GL_IMPLEMENTATION_COLOR_READ_TYPE */
+       727, /* GL_IMPLEMENTATION_COLOR_READ_FORMAT */
+      1360, /* GL_POINT_SIZE_ARRAY_OES */
+      2025, /* GL_TEXTURE_CROP_RECT_OES */
+      1000, /* GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES */
+      1359, /* GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES */
+      2203, /* GL_UNSIGNED_NORMALIZED */
+      1958, /* GL_TEXTURE_1D_ARRAY */
+      1495, /* GL_PROXY_TEXTURE_1D_ARRAY */
+      1961, /* GL_TEXTURE_2D_ARRAY */
+      1499, /* GL_PROXY_TEXTURE_2D_ARRAY */
+      1969, /* GL_TEXTURE_BINDING_1D_ARRAY */
+      1972, /* GL_TEXTURE_BINDING_2D_ARRAY */
+      1052, /* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS */
+      1989, /* GL_TEXTURE_BUFFER */
+      1106, /* GL_MAX_TEXTURE_BUFFER_SIZE */
+      1976, /* GL_TEXTURE_BINDING_BUFFER */
+      1991, /* GL_TEXTURE_BUFFER_DATA_STORE_BINDING */
+      1993, /* GL_TEXTURE_BUFFER_FORMAT */
+      1532, /* GL_R11F_G11F_B10F */
+      2169, /* GL_UNSIGNED_INT_10F_11F_11F_REV */
+      1643, /* GL_RGB9_E5 */
+      2178, /* GL_UNSIGNED_INT_5_9_9_9_REV */
+      2099, /* GL_TEXTURE_SHARED_SIZE */
+      1811, /* GL_SRGB */
+      1812, /* GL_SRGB8 */
+      1814, /* GL_SRGB_ALPHA */
+      1813, /* GL_SRGB8_ALPHA8 */
+      1771, /* GL_SLUMINANCE_ALPHA */
+      1770, /* GL_SLUMINANCE8_ALPHA8 */
+      1768, /* GL_SLUMINANCE */
+      1769, /* GL_SLUMINANCE8 */
+       312, /* GL_COMPRESSED_SRGB */
+       313, /* GL_COMPRESSED_SRGB_ALPHA */
+       310, /* GL_COMPRESSED_SLUMINANCE */
+       311, /* GL_COMPRESSED_SLUMINANCE_ALPHA */
+      2134, /* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH */
+      2123, /* GL_TRANSFORM_FEEDBACK_BUFFER_MODE */
+      1125, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS */
+      2132, /* GL_TRANSFORM_FEEDBACK_VARYINGS */
+      2128, /* GL_TRANSFORM_FEEDBACK_BUFFER_START */
+      2126, /* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE */
+      1442, /* GL_PRIMITIVES_GENERATED */
+      2130, /* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN */
+      1536, /* GL_RASTERIZER_DISCARD */
+      1121, /* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS */
+      1123, /* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS */
+       766, /* GL_INTERLEAVED_ATTRIBS */
+      1747, /* GL_SEPARATE_ATTRIBS */
+      2118, /* GL_TRANSFORM_FEEDBACK_BUFFER */
+      2120, /* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING */
+      1378, /* GL_POINT_SPRITE_COORD_ORIGIN */
+       857, /* GL_LOWER_LEFT */
+      2217, /* GL_UPPER_LEFT */
+      1835, /* GL_STENCIL_BACK_REF */
+      1836, /* GL_STENCIL_BACK_VALUE_MASK */
+      1837, /* GL_STENCIL_BACK_WRITEMASK */
+       503, /* GL_DRAW_FRAMEBUFFER_BINDING */
+      1566, /* GL_RENDERBUFFER_BINDING */
+      1540, /* GL_READ_FRAMEBUFFER */
+       502, /* GL_DRAW_FRAMEBUFFER */
+      1541, /* GL_READ_FRAMEBUFFER_BINDING */
+      1585, /* GL_RENDERBUFFER_SAMPLES */
+       616, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */
+       613, /* GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */
+       628, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */
+       623, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */
+       626, /* GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */
+       634, /* GL_FRAMEBUFFER_COMPLETE */
+       639, /* GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */
+       654, /* GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */
+       648, /* GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT */
+       643, /* GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT */
+       649, /* GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT */
+       645, /* GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */
+       659, /* GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */
+       665, /* GL_FRAMEBUFFER_UNSUPPORTED */
+       663, /* GL_FRAMEBUFFER_STATUS_ERROR_EXT */
+      1024, /* GL_MAX_COLOR_ATTACHMENTS */
+       196, /* GL_COLOR_ATTACHMENT0 */
+       199, /* GL_COLOR_ATTACHMENT1 */
+       213, /* GL_COLOR_ATTACHMENT2 */
+       215, /* GL_COLOR_ATTACHMENT3 */
+       217, /* GL_COLOR_ATTACHMENT4 */
+       219, /* GL_COLOR_ATTACHMENT5 */
+       221, /* GL_COLOR_ATTACHMENT6 */
+       223, /* GL_COLOR_ATTACHMENT7 */
+       225, /* GL_COLOR_ATTACHMENT8 */
+       227, /* GL_COLOR_ATTACHMENT9 */
+       200, /* GL_COLOR_ATTACHMENT10 */
+       202, /* GL_COLOR_ATTACHMENT11 */
+       204, /* GL_COLOR_ATTACHMENT12 */
+       206, /* GL_COLOR_ATTACHMENT13 */
+       208, /* GL_COLOR_ATTACHMENT14 */
+       210, /* GL_COLOR_ATTACHMENT15 */
+       402, /* GL_DEPTH_ATTACHMENT */
+      1824, /* GL_STENCIL_ATTACHMENT */
+       604, /* GL_FRAMEBUFFER */
+      1563, /* GL_RENDERBUFFER */
+      1589, /* GL_RENDERBUFFER_WIDTH */
+      1576, /* GL_RENDERBUFFER_HEIGHT */
+      1579, /* GL_RENDERBUFFER_INTERNAL_FORMAT */
+      1856, /* GL_STENCIL_INDEX_EXT */
+      1845, /* GL_STENCIL_INDEX1 */
+      1850, /* GL_STENCIL_INDEX4 */
+      1853, /* GL_STENCIL_INDEX8 */
+      1846, /* GL_STENCIL_INDEX16 */
+      1583, /* GL_RENDERBUFFER_RED_SIZE */
+      1574, /* GL_RENDERBUFFER_GREEN_SIZE */
+      1569, /* GL_RENDERBUFFER_BLUE_SIZE */
+      1564, /* GL_RENDERBUFFER_ALPHA_SIZE */
+      1571, /* GL_RENDERBUFFER_DEPTH_SIZE */
+      1587, /* GL_RENDERBUFFER_STENCIL_SIZE */
+       657, /* GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */
+      1101, /* GL_MAX_SAMPLES */
+      2061, /* GL_TEXTURE_GEN_STR_OES */
+       703, /* GL_HALF_FLOAT_OES */
+      1630, /* GL_RGB565_OES */
+      1660, /* GL_RGBA32UI */
+      1623, /* GL_RGB32UI */
         40, /* GL_ALPHA32UI_EXT */
-       754, /* GL_INTENSITY32UI_EXT */
-       870, /* GL_LUMINANCE32UI_EXT */
-       887, /* GL_LUMINANCE_ALPHA32UI_EXT */
-      1646, /* GL_RGBA16UI */
-      1610, /* GL_RGB16UI */
+       758, /* GL_INTENSITY32UI_EXT */
+       874, /* GL_LUMINANCE32UI_EXT */
+       891, /* GL_LUMINANCE_ALPHA32UI_EXT */
+      1651, /* GL_RGBA16UI */
+      1615, /* GL_RGB16UI */
         37, /* GL_ALPHA16UI_EXT */
-       751, /* GL_INTENSITY16UI_EXT */
-       865, /* GL_LUMINANCE16UI_EXT */
-       885, /* GL_LUMINANCE_ALPHA16UI_EXT */
-      1665, /* GL_RGBA8UI */
-      1633, /* GL_RGB8UI */
+       755, /* GL_INTENSITY16UI_EXT */
+       869, /* GL_LUMINANCE16UI_EXT */
+       889, /* GL_LUMINANCE_ALPHA16UI_EXT */
+      1670, /* GL_RGBA8UI */
+      1638, /* GL_RGB8UI */
         45, /* GL_ALPHA8UI_EXT */
-       759, /* GL_INTENSITY8UI_EXT */
-       879, /* GL_LUMINANCE8UI_EXT */
-       889, /* GL_LUMINANCE_ALPHA8UI_EXT */
-      1653, /* GL_RGBA32I */
-      1616, /* GL_RGB32I */
+       763, /* GL_INTENSITY8UI_EXT */
+       883, /* GL_LUMINANCE8UI_EXT */
+       893, /* GL_LUMINANCE_ALPHA8UI_EXT */
+      1658, /* GL_RGBA32I */
+      1621, /* GL_RGB32I */
         39, /* GL_ALPHA32I_EXT */
-       753, /* GL_INTENSITY32I_EXT */
-       869, /* GL_LUMINANCE32I_EXT */
-       886, /* GL_LUMINANCE_ALPHA32I_EXT */
-      1644, /* GL_RGBA16I */
-      1608, /* GL_RGB16I */
+       757, /* GL_INTENSITY32I_EXT */
+       873, /* GL_LUMINANCE32I_EXT */
+       890, /* GL_LUMINANCE_ALPHA32I_EXT */
+      1649, /* GL_RGBA16I */
+      1613, /* GL_RGB16I */
         36, /* GL_ALPHA16I_EXT */
-       750, /* GL_INTENSITY16I_EXT */
-       864, /* GL_LUMINANCE16I_EXT */
-       884, /* GL_LUMINANCE_ALPHA16I_EXT */
-      1663, /* GL_RGBA8I */
-      1631, /* GL_RGB8I */
+       754, /* GL_INTENSITY16I_EXT */
+       868, /* GL_LUMINANCE16I_EXT */
+       888, /* GL_LUMINANCE_ALPHA16I_EXT */
+      1668, /* GL_RGBA8I */
+      1636, /* GL_RGB8I */
         44, /* GL_ALPHA8I_EXT */
-       758, /* GL_INTENSITY8I_EXT */
-       878, /* GL_LUMINANCE8I_EXT */
-       888, /* GL_LUMINANCE_ALPHA8I_EXT */
-      1548, /* GL_RED_INTEGER */
-       695, /* GL_GREEN_INTEGER */
+       762, /* GL_INTENSITY8I_EXT */
+       882, /* GL_LUMINANCE8I_EXT */
+       892, /* GL_LUMINANCE_ALPHA8I_EXT */
+      1553, /* GL_RED_INTEGER */
+       699, /* GL_GREEN_INTEGER */
        113, /* GL_BLUE_INTEGER */
         49, /* GL_ALPHA_INTEGER_EXT */
-      1677, /* GL_RGB_INTEGER */
-      1671, /* GL_RGBA_INTEGER */
+      1683, /* GL_RGB_INTEGER */
+      1677, /* GL_RGBA_INTEGER */
         84, /* GL_BGR_INTEGER */
         82, /* GL_BGRA_INTEGER */
-       891, /* GL_LUMINANCE_INTEGER_EXT */
-       890, /* GL_LUMINANCE_ALPHA_INTEGER_EXT */
-      1673, /* GL_RGBA_INTEGER_MODE_EXT */
-       607, /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED */
-       648, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS */
-       647, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB */
-      1688, /* GL_SAMPLER_1D_ARRAY */
-      1694, /* GL_SAMPLER_2D_ARRAY */
-      1703, /* GL_SAMPLER_BUFFER */
-      1690, /* GL_SAMPLER_1D_ARRAY_SHADOW */
-      1696, /* GL_SAMPLER_2D_ARRAY_SHADOW */
-      1706, /* GL_SAMPLER_CUBE_SHADOW */
-      2186, /* GL_UNSIGNED_INT_VEC2 */
-      2188, /* GL_UNSIGNED_INT_VEC3 */
-      2190, /* GL_UNSIGNED_INT_VEC4 */
-       768, /* GL_INT_SAMPLER_1D */
-       772, /* GL_INT_SAMPLER_2D */
-       778, /* GL_INT_SAMPLER_3D */
-       782, /* GL_INT_SAMPLER_CUBE */
-       776, /* GL_INT_SAMPLER_2D_RECT */
-       769, /* GL_INT_SAMPLER_1D_ARRAY */
-       773, /* GL_INT_SAMPLER_2D_ARRAY */
-       780, /* GL_INT_SAMPLER_BUFFER */
-      2170, /* GL_UNSIGNED_INT_SAMPLER_1D */
-      2174, /* GL_UNSIGNED_INT_SAMPLER_2D */
-      2180, /* GL_UNSIGNED_INT_SAMPLER_3D */
-      2184, /* GL_UNSIGNED_INT_SAMPLER_CUBE */
-      2178, /* GL_UNSIGNED_INT_SAMPLER_2D_RECT */
-      2171, /* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY */
-      2175, /* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY */
-      2182, /* GL_UNSIGNED_INT_SAMPLER_BUFFER */
-       686, /* GL_GEOMETRY_SHADER */
-       689, /* GL_GEOMETRY_VERTICES_OUT_ARB */
-       683, /* GL_GEOMETRY_INPUT_TYPE_ARB */
-       685, /* GL_GEOMETRY_OUTPUT_TYPE_ARB */
-      1054, /* GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB */
-      1136, /* GL_MAX_VERTEX_VARYING_COMPONENTS_ARB */
-      1052, /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS */
-      1046, /* GL_MAX_GEOMETRY_OUTPUT_VERTICES */
-      1050, /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS */
-       854, /* GL_LOW_FLOAT */
-      1138, /* GL_MEDIUM_FLOAT */
-       700, /* GL_HIGH_FLOAT */
-       855, /* GL_LOW_INT */
-      1139, /* GL_MEDIUM_INT */
-       701, /* GL_HIGH_INT */
-      2160, /* GL_UNSIGNED_INT_10_10_10_2_OES */
-       767, /* GL_INT_10_10_10_2_OES */
-      1745, /* GL_SHADER_BINARY_FORMATS */
-      1239, /* GL_NUM_SHADER_BINARY_FORMATS */
-      1746, /* GL_SHADER_COMPILER */
-      1133, /* GL_MAX_VERTEX_UNIFORM_VECTORS */
-      1125, /* GL_MAX_VARYING_VECTORS */
-      1043, /* GL_MAX_FRAGMENT_UNIFORM_VECTORS */
-      1524, /* GL_QUERY_WAIT */
-      1518, /* GL_QUERY_NO_WAIT */
-      1514, /* GL_QUERY_BY_REGION_WAIT */
-      1512, /* GL_QUERY_BY_REGION_NO_WAIT */
-      2105, /* GL_TRANSFORM_FEEDBACK */
-      2114, /* GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */
-      2108, /* GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */
-      2106, /* GL_TRANSFORM_FEEDBACK_BINDING */
-      1508, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */
-       542, /* GL_FIRST_VERTEX_CONVENTION */
-       800, /* GL_LAST_VERTEX_CONVENTION */
-      1482, /* GL_PROVOKING_VERTEX */
-       350, /* GL_COPY_READ_BUFFER */
-       351, /* GL_COPY_WRITE_BUFFER */
-      1551, /* GL_RED_SNORM */
-      1684, /* GL_RG_SNORM */
-      1683, /* GL_RGB_SNORM */
-      1676, /* GL_RGBA_SNORM */
-      1530, /* GL_R8_SNORM */
-      1598, /* GL_RG8_SNORM */
-      1637, /* GL_RGB8_SNORM */
-      1669, /* GL_RGBA8_SNORM */
-      1528, /* GL_R16_SNORM */
-      1597, /* GL_RG16_SNORM */
-      1613, /* GL_RGB16_SNORM */
-      1649, /* GL_RGBA16_SNORM */
-      1757, /* GL_SIGNED_NORMALIZED */
-      1439, /* GL_PRIMITIVE_RESTART */
-      1440, /* GL_PRIMITIVE_RESTART_INDEX */
-      1099, /* GL_MAX_SERVER_WAIT_TIMEOUT */
-      1253, /* GL_OBJECT_TYPE */
-      1870, /* GL_SYNC_CONDITION */
-      1875, /* GL_SYNC_STATUS */
-      1872, /* GL_SYNC_FLAGS */
-      1871, /* GL_SYNC_FENCE */
-      1874, /* GL_SYNC_GPU_COMMANDS_COMPLETE */
-      2153, /* GL_UNSIGNALED */
-      1756, /* GL_SIGNALED */
+       895, /* GL_LUMINANCE_INTEGER_EXT */
+       894, /* GL_LUMINANCE_ALPHA_INTEGER_EXT */
+      1679, /* GL_RGBA_INTEGER_MODE_EXT */
+       611, /* GL_FRAMEBUFFER_ATTACHMENT_LAYERED */
+       652, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS */
+       651, /* GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB */
+      1694, /* GL_SAMPLER_1D_ARRAY */
+      1700, /* GL_SAMPLER_2D_ARRAY */
+      1710, /* GL_SAMPLER_BUFFER */
+      1696, /* GL_SAMPLER_1D_ARRAY_SHADOW */
+      1702, /* GL_SAMPLER_2D_ARRAY_SHADOW */
+      1713, /* GL_SAMPLER_CUBE_SHADOW */
+      2197, /* GL_UNSIGNED_INT_VEC2 */
+      2199, /* GL_UNSIGNED_INT_VEC3 */
+      2201, /* GL_UNSIGNED_INT_VEC4 */
+       772, /* GL_INT_SAMPLER_1D */
+       776, /* GL_INT_SAMPLER_2D */
+       782, /* GL_INT_SAMPLER_3D */
+       786, /* GL_INT_SAMPLER_CUBE */
+       780, /* GL_INT_SAMPLER_2D_RECT */
+       773, /* GL_INT_SAMPLER_1D_ARRAY */
+       777, /* GL_INT_SAMPLER_2D_ARRAY */
+       784, /* GL_INT_SAMPLER_BUFFER */
+      2181, /* GL_UNSIGNED_INT_SAMPLER_1D */
+      2185, /* GL_UNSIGNED_INT_SAMPLER_2D */
+      2191, /* GL_UNSIGNED_INT_SAMPLER_3D */
+      2195, /* GL_UNSIGNED_INT_SAMPLER_CUBE */
+      2189, /* GL_UNSIGNED_INT_SAMPLER_2D_RECT */
+      2182, /* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY */
+      2186, /* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY */
+      2193, /* GL_UNSIGNED_INT_SAMPLER_BUFFER */
+       690, /* GL_GEOMETRY_SHADER */
+       693, /* GL_GEOMETRY_VERTICES_OUT_ARB */
+       687, /* GL_GEOMETRY_INPUT_TYPE_ARB */
+       689, /* GL_GEOMETRY_OUTPUT_TYPE_ARB */
+      1058, /* GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB */
+      1141, /* GL_MAX_VERTEX_VARYING_COMPONENTS_ARB */
+      1056, /* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS */
+      1050, /* GL_MAX_GEOMETRY_OUTPUT_VERTICES */
+      1054, /* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS */
+       858, /* GL_LOW_FLOAT */
+      1143, /* GL_MEDIUM_FLOAT */
+       704, /* GL_HIGH_FLOAT */
+       859, /* GL_LOW_INT */
+      1144, /* GL_MEDIUM_INT */
+       705, /* GL_HIGH_INT */
+      2171, /* GL_UNSIGNED_INT_10_10_10_2_OES */
+       771, /* GL_INT_10_10_10_2_OES */
+      1752, /* GL_SHADER_BINARY_FORMATS */
+      1244, /* GL_NUM_SHADER_BINARY_FORMATS */
+      1753, /* GL_SHADER_COMPILER */
+      1138, /* GL_MAX_VERTEX_UNIFORM_VECTORS */
+      1130, /* GL_MAX_VARYING_VECTORS */
+      1047, /* GL_MAX_FRAGMENT_UNIFORM_VECTORS */
+      1529, /* GL_QUERY_WAIT */
+      1523, /* GL_QUERY_NO_WAIT */
+      1519, /* GL_QUERY_BY_REGION_WAIT */
+      1517, /* GL_QUERY_BY_REGION_NO_WAIT */
+      2116, /* GL_TRANSFORM_FEEDBACK */
+      2125, /* GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */
+      2119, /* GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */
+      2117, /* GL_TRANSFORM_FEEDBACK_BINDING */
+      1513, /* GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */
+       545, /* GL_FIRST_VERTEX_CONVENTION */
+       804, /* GL_LAST_VERTEX_CONVENTION */
+      1487, /* GL_PROVOKING_VERTEX */
+       353, /* GL_COPY_READ_BUFFER */
+       354, /* GL_COPY_WRITE_BUFFER */
+      1556, /* GL_RED_SNORM */
+      1690, /* GL_RG_SNORM */
+      1689, /* GL_RGB_SNORM */
+      1682, /* GL_RGBA_SNORM */
+      1535, /* GL_R8_SNORM */
+      1603, /* GL_RG8_SNORM */
+      1642, /* GL_RGB8_SNORM */
+      1674, /* GL_RGBA8_SNORM */
+      1533, /* GL_R16_SNORM */
+      1602, /* GL_RG16_SNORM */
+      1618, /* GL_RGB16_SNORM */
+      1654, /* GL_RGBA16_SNORM */
+      1764, /* GL_SIGNED_NORMALIZED */
+      1444, /* GL_PRIMITIVE_RESTART */
+      1445, /* GL_PRIMITIVE_RESTART_INDEX */
+      1103, /* GL_MAX_SERVER_WAIT_TIMEOUT */
+      1258, /* GL_OBJECT_TYPE */
+      1877, /* GL_SYNC_CONDITION */
+      1882, /* GL_SYNC_STATUS */
+      1879, /* GL_SYNC_FLAGS */
+      1878, /* GL_SYNC_FENCE */
+      1881, /* GL_SYNC_GPU_COMMANDS_COMPLETE */
+      2164, /* GL_UNSIGNALED */
+      1763, /* GL_SIGNALED */
         54, /* GL_ALREADY_SIGNALED */
-      2100, /* GL_TIMEOUT_EXPIRED */
-       312, /* GL_CONDITION_SATISFIED */
-      2270, /* GL_WAIT_FAILED */
+      2111, /* GL_TIMEOUT_EXPIRED */
+       315, /* GL_CONDITION_SATISFIED */
+      2281, /* GL_WAIT_FAILED */
        126, /* GL_BUFFER_ACCESS_FLAGS */
        132, /* GL_BUFFER_MAP_LENGTH */
        133, /* GL_BUFFER_MAP_OFFSET */
-      1128, /* GL_MAX_VERTEX_OUTPUT_COMPONENTS */
-      1044, /* GL_MAX_GEOMETRY_INPUT_COMPONENTS */
-      1045, /* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS */
-      1040, /* GL_MAX_FRAGMENT_INPUT_COMPONENTS */
-       326, /* GL_CONTEXT_PROFILE_MASK */
-       527, /* GL_EVAL_BIT */
-      1533, /* GL_RASTER_POSITION_UNCLIPPED_IBM */
-       847, /* GL_LIST_BIT */
-      1976, /* GL_TEXTURE_BIT */
-      1726, /* GL_SCISSOR_BIT */
+      1133, /* GL_MAX_VERTEX_OUTPUT_COMPONENTS */
+      1048, /* GL_MAX_GEOMETRY_INPUT_COMPONENTS */
+      1049, /* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS */
+      1044, /* GL_MAX_FRAGMENT_INPUT_COMPONENTS */
+       329, /* GL_CONTEXT_PROFILE_MASK */
+       530, /* GL_EVAL_BIT */
+      1538, /* GL_RASTER_POSITION_UNCLIPPED_IBM */
+       851, /* GL_LIST_BIT */
+      1984, /* GL_TEXTURE_BIT */
+      1733, /* GL_SCISSOR_BIT */
         30, /* GL_ALL_ATTRIB_BITS */
-      1204, /* GL_MULTISAMPLE_BIT */
+      1209, /* GL_MULTISAMPLE_BIT */
         31, /* GL_ALL_CLIENT_ATTRIB_BITS */
 };
 
index 4b6e91c4f310cd8e7cae60acab1df5444a01273d..8a0ab9615235d1898e66bc95d3f27efad8eb8aa6 100644 (file)
@@ -79,6 +79,7 @@ static const struct extension extension_table[] = {
    /* ARB Extensions */
    { "GL_ARB_ES2_compatibility",                   o(ARB_ES2_compatibility),                   GL,             2009 },
    { "GL_ARB_blend_func_extended",                 o(ARB_blend_func_extended),                 GL,             2009 },
+   { "GL_ARB_color_buffer_float",                  o(ARB_color_buffer_float),                  GL,             2004 },
    { "GL_ARB_copy_buffer",                         o(ARB_copy_buffer),                         GL,             2008 },
    { "GL_ARB_depth_buffer_float",                  o(ARB_depth_buffer_float),                  GL,             2008 },
    { "GL_ARB_depth_clamp",                         o(ARB_depth_clamp),                         GL,             2003 },
@@ -123,6 +124,7 @@ static const struct extension extension_table[] = {
    { "GL_ARB_texture_env_combine",                 o(ARB_texture_env_combine),                 GL,             2001 },
    { "GL_ARB_texture_env_crossbar",                o(ARB_texture_env_crossbar),                GL,             2001 },
    { "GL_ARB_texture_env_dot3",                    o(ARB_texture_env_dot3),                    GL,             2001 },
+   { "GL_ARB_texture_float",                       o(ARB_texture_float),                       GL,             2004 },
    { "GL_ARB_texture_mirrored_repeat",             o(ARB_texture_mirrored_repeat),             GL,             2001 },
    { "GL_ARB_texture_multisample",                 o(ARB_texture_multisample),                 GL,             2009 },
    { "GL_ARB_texture_non_power_of_two",            o(ARB_texture_non_power_of_two),            GL,             2003 },
@@ -202,6 +204,7 @@ static const struct extension extension_table[] = {
    { "GL_EXT_texture",                             o(EXT_texture),                             GL,             1996 },
    { "GL_EXT_texture_rectangle",                   o(NV_texture_rectangle),                    GL,             2004 },
    { "GL_EXT_texture_shared_exponent",             o(EXT_texture_shared_exponent),             GL,             2004 },
+   { "GL_EXT_texture_snorm",                       o(EXT_texture_snorm),                       GL,             2009 },
    { "GL_EXT_texture_sRGB",                        o(EXT_texture_sRGB),                        GL,             2004 },
    { "GL_EXT_texture_sRGB_decode",                 o(EXT_texture_sRGB_decode),                        GL,      2006 },
    { "GL_EXT_texture_swizzle",                     o(EXT_texture_swizzle),                     GL,             2008 },
@@ -260,11 +263,13 @@ static const struct extension extension_table[] = {
    { "GL_APPLE_packed_pixels",                     o(APPLE_packed_pixels),                     GL,             2002 },
    { "GL_APPLE_vertex_array_object",               o(APPLE_vertex_array_object),               GL,             2002 },
    { "GL_ATI_blend_equation_separate",             o(EXT_blend_equation_separate),             GL,             2003 },
+   { "GL_ATI_draw_buffers",                        o(ARB_draw_buffers),                        GL,             2002 },
    { "GL_ATI_envmap_bumpmap",                      o(ATI_envmap_bumpmap),                      GL,             2001 },
    { "GL_ATI_fragment_shader",                     o(ATI_fragment_shader),                     GL,             2001 },
    { "GL_ATI_separate_stencil",                    o(ATI_separate_stencil),                    GL,             2006 },
    { "GL_ATI_texture_compression_3dc",             o(ATI_texture_compression_3dc),             GL,             2004 },
    { "GL_ATI_texture_env_combine3",                o(ATI_texture_env_combine3),                GL,             2002 },
+   { "GL_ATI_texture_float",                       o(ARB_texture_float),                       GL,             2002 },
    { "GL_ATI_texture_mirror_once",                 o(ATI_texture_mirror_once),                 GL,             2006 },
    { "GL_IBM_multimode_draw_arrays",               o(IBM_multimode_draw_arrays),               GL,             1998 },
    { "GL_IBM_rasterpos_clip",                      o(IBM_rasterpos_clip),                      GL,             1996 },
@@ -273,9 +278,8 @@ static const struct extension extension_table[] = {
    { "GL_MESA_pack_invert",                        o(MESA_pack_invert),                        GL,             2002 },
    { "GL_MESA_resize_buffers",                     o(MESA_resize_buffers),                     GL,             1999 },
    { "GL_MESA_texture_array",                      o(MESA_texture_array),                      GL,             2007 },
-   { "GL_MESA_texture_signed_rgba",                o(MESA_texture_signed_rgba),                GL,             2009 },
+   { "GL_MESA_texture_signed_rgba",                o(EXT_texture_snorm),                       GL,             2009 },
    { "GL_MESA_window_pos",                         o(ARB_window_pos),                          GL,             2000 },
-   { "GL_MESAX_texture_float",                     o(ARB_texture_float),                       GL,             2009 },
    { "GL_MESA_ycbcr_texture",                      o(MESA_ycbcr_texture),                      GL,             2002 },
    { "GL_NV_blend_square",                         o(NV_blend_square),                         GL,             1999 },
    { "GL_NV_conditional_render",                   o(NV_conditional_render),                   GL,             2008 },
@@ -753,7 +757,7 @@ _mesa_extension_is_enabled( struct gl_context *ctx, const char *name )
 static char *
 get_extension_override( struct gl_context *ctx )
 {
-   const char *env_const= _mesa_getenv("MESA_EXTENSION_OVERRIDE");
+   const char *env_const = _mesa_getenv("MESA_EXTENSION_OVERRIDE");
    char *env;
    char *ext;
    char *extra_exts;
@@ -794,7 +798,7 @@ get_extension_override( struct gl_context *ctx )
    }
 
    /* Remove trailing space. */
-   len  = strlen(extra_exts);
+   len = strlen(extra_exts);
    if (extra_exts[len - 1] == ' ')
       extra_exts[len - 1] = '\0';
 
@@ -875,12 +879,24 @@ _mesa_make_extension_string(struct gl_context *ctx)
    GLboolean *base = (GLboolean *) &ctx->Extensions;
    const struct extension *i;
    unsigned j;
-
+   unsigned maxYear = ~0;
+
+   /* Check if the MESA_EXTENSION_MAX_YEAR env var is set */
+   {
+      const char *env = getenv("MESA_EXTENSION_MAX_YEAR");
+      if (env) {
+         maxYear = atoi(env);
+         _mesa_debug(ctx, "Note: limiting GL extensions to %u or earlier\n",
+                     maxYear);
+      }
+   }
 
    /* Compute length of the extension string. */
    count = 0;
    for (i = extension_table; i->name != 0; ++i) {
-      if (base[i->offset] && (i->api_set & (1 << ctx->API))) {
+      if (base[i->offset] &&
+          i->year <= maxYear &&
+          (i->api_set & (1 << ctx->API))) {
         length += strlen(i->name) + 1; /* +1 for space */
         ++count;
       }
@@ -894,7 +910,7 @@ _mesa_make_extension_string(struct gl_context *ctx)
       return NULL;
    }
 
-   extension_indices = malloc(count * sizeof extension_indices);
+   extension_indices = malloc(count * sizeof(extension_index));
    if (extension_indices == NULL) {
       free(exts);
       free(extra_extensions);
@@ -908,7 +924,9 @@ _mesa_make_extension_string(struct gl_context *ctx)
     */
    j = 0;
    for (i = extension_table; i->name != 0; ++i) {
-      if (base[i->offset] && (i->api_set & (1 << ctx->API))) {
+      if (base[i->offset] &&
+          i->year <= maxYear &&
+          (i->api_set & (1 << ctx->API))) {
          extension_indices[j++] = i - extension_table;
       }
    }
index ffdd0842562f3013610d8f3a2b5182ab646e7447..1edb310ea13d650c138c9080b8f304f35db25c41 100644 (file)
@@ -335,7 +335,7 @@ _mesa_set_texture_attachment(struct gl_context *ctx,
    att->Zoffset = zoffset;
    att->Complete = GL_FALSE;
 
-   if (att->Texture->Image[att->CubeMapFace][att->TextureLevel]) {
+   if (_mesa_get_attachment_teximage(att)) {
       ctx->Driver.RenderTexture(ctx, fb, att);
    }
 
@@ -716,8 +716,8 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
       /* get width, height, format of the renderbuffer/texture
        */
       if (att->Type == GL_TEXTURE) {
-         const struct gl_texture_image *texImg
-            = att->Texture->Image[att->CubeMapFace][att->TextureLevel];
+         const struct gl_texture_image *texImg =
+            _mesa_get_attachment_teximage(att);
          minWidth = MIN2(minWidth, texImg->Width);
          maxWidth = MAX2(maxWidth, texImg->Width);
          minHeight = MIN2(minHeight, texImg->Height);
@@ -746,7 +746,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
          continue;
       }
 
-      if (numSamples < 0) {
+      if (att->Renderbuffer && numSamples < 0) {
          /* first buffer */
          numSamples = att->Renderbuffer->NumSamples;
       }
@@ -1081,7 +1081,6 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)
    case GL_RGB10_A2:
    case GL_RGBA12:
    case GL_RGBA16:
-   case GL_RGBA16_SNORM:
    case GL_SRGB8_ALPHA8_EXT:
       return GL_RGBA;
    case GL_STENCIL_INDEX:
@@ -1109,7 +1108,74 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)
    case GL_RG8:
    case GL_RG16:
       return ctx->Extensions.ARB_texture_rg ? GL_RG : 0;
-   /* XXX add floating point and integer formats eventually */
+   /* signed normalized texture formats */
+   case GL_RED_SNORM:
+   case GL_R8_SNORM:
+   case GL_R16_SNORM:
+      return ctx->Extensions.EXT_texture_snorm ? GL_RED : 0;
+   case GL_RG_SNORM:
+   case GL_RG8_SNORM:
+   case GL_RG16_SNORM:
+      return ctx->Extensions.EXT_texture_snorm ? GL_RG : 0;
+   case GL_RGB_SNORM:
+   case GL_RGB8_SNORM:
+   case GL_RGB16_SNORM:
+      return ctx->Extensions.EXT_texture_snorm ? GL_RGB : 0;
+   case GL_RGBA_SNORM:
+   case GL_RGBA8_SNORM:
+   case GL_RGBA16_SNORM:
+      return ctx->Extensions.EXT_texture_snorm ? GL_RGBA : 0;
+   case GL_ALPHA_SNORM:
+   case GL_ALPHA8_SNORM:
+   case GL_ALPHA16_SNORM:
+      return ctx->Extensions.EXT_texture_snorm &&
+             ctx->Extensions.ARB_framebuffer_object ? GL_ALPHA : 0;
+   case GL_LUMINANCE_SNORM:
+   case GL_LUMINANCE8_SNORM:
+   case GL_LUMINANCE16_SNORM:
+      return ctx->Extensions.EXT_texture_snorm &&
+             ctx->Extensions.ARB_framebuffer_object ? GL_LUMINANCE : 0;
+   case GL_LUMINANCE_ALPHA_SNORM:
+   case GL_LUMINANCE8_ALPHA8_SNORM:
+   case GL_LUMINANCE16_ALPHA16_SNORM:
+      return ctx->Extensions.EXT_texture_snorm &&
+             ctx->Extensions.ARB_framebuffer_object ? GL_LUMINANCE_ALPHA : 0;
+   case GL_INTENSITY_SNORM:
+   case GL_INTENSITY8_SNORM:
+   case GL_INTENSITY16_SNORM:
+      return ctx->Extensions.EXT_texture_snorm &&
+             ctx->Extensions.ARB_framebuffer_object ? GL_INTENSITY : 0;
+   case GL_R16F:
+   case GL_R32F:
+      return ctx->Extensions.ARB_texture_rg &&
+             ctx->Extensions.ARB_texture_float ? GL_RED : 0;
+   case GL_RG16F:
+   case GL_RG32F:
+      return ctx->Extensions.ARB_texture_rg &&
+             ctx->Extensions.ARB_texture_float ? GL_RG : 0;
+   case GL_RGB16F:
+   case GL_RGB32F:
+      return ctx->Extensions.ARB_texture_float ? GL_RGB : 0;
+   case GL_RGBA16F:
+   case GL_RGBA32F:
+      return ctx->Extensions.ARB_texture_float ? GL_RGBA : 0;
+   case GL_ALPHA16F_ARB:
+   case GL_ALPHA32F_ARB:
+      return ctx->Extensions.ARB_texture_float &&
+             ctx->Extensions.ARB_framebuffer_object ? GL_ALPHA : 0;
+   case GL_LUMINANCE16F_ARB:
+   case GL_LUMINANCE32F_ARB:
+      return ctx->Extensions.ARB_texture_float &&
+             ctx->Extensions.ARB_framebuffer_object ? GL_LUMINANCE : 0;
+   case GL_LUMINANCE_ALPHA16F_ARB:
+   case GL_LUMINANCE_ALPHA32F_ARB:
+      return ctx->Extensions.ARB_texture_float &&
+             ctx->Extensions.ARB_framebuffer_object ? GL_LUMINANCE_ALPHA : 0;
+   case GL_INTENSITY16F_ARB:
+   case GL_INTENSITY32F_ARB:
+      return ctx->Extensions.ARB_texture_float &&
+             ctx->Extensions.ARB_framebuffer_object ? GL_INTENSITY : 0;
+   /* XXX add integer formats eventually */
    default:
       return 0;
    }
@@ -1460,9 +1526,7 @@ check_begin_texture_render(struct gl_context *ctx, struct gl_framebuffer *fb)
 
    for (i = 0; i < BUFFER_COUNT; i++) {
       struct gl_renderbuffer_attachment *att = fb->Attachment + i;
-      struct gl_texture_object *texObj = att->Texture;
-      if (texObj
-          && texObj->Image[att->CubeMapFace][att->TextureLevel]) {
+      if (att->Texture && _mesa_get_attachment_teximage(att)) {
          ctx->Driver.RenderTexture(ctx, fb, att);
       }
    }
@@ -2321,7 +2385,7 @@ _mesa_BlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
    if ((mask & (GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT))
         && filter != GL_NEAREST) {
       _mesa_error(ctx, GL_INVALID_OPERATION,
-             "glBlitFramebufferEXT(depth/stencil requires GL_NEAREST filter");
+             "glBlitFramebufferEXT(depth/stencil requires GL_NEAREST filter)");
       return;
    }
 
@@ -2342,7 +2406,7 @@ _mesa_BlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
           _mesa_get_format_bits(readRb->Format, GL_STENCIL_BITS) != 
           _mesa_get_format_bits(drawRb->Format, GL_STENCIL_BITS)) {
          _mesa_error(ctx, GL_INVALID_OPERATION,
-                     "glBlitFramebufferEXT(stencil buffer size mismatch");
+                     "glBlitFramebufferEXT(stencil buffer size mismatch)");
          return;
       }
    }
@@ -2355,7 +2419,7 @@ _mesa_BlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
           _mesa_get_format_bits(readRb->Format, GL_DEPTH_BITS) != 
           _mesa_get_format_bits(drawRb->Format, GL_DEPTH_BITS)) {
          _mesa_error(ctx, GL_INVALID_OPERATION,
-                     "glBlitFramebufferEXT(depth buffer size mismatch");
+                     "glBlitFramebufferEXT(depth buffer size mismatch)");
          return;
       }
    }
@@ -2374,7 +2438,7 @@ _mesa_BlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
       if (srcX1 - srcX0 != dstX1 - dstX0 ||
           srcY1 - srcY0 != dstY1 - dstY0) {
          _mesa_error(ctx, GL_INVALID_OPERATION,
-                "glBlitFramebufferEXT(bad src/dst multisample region sizes");
+                "glBlitFramebufferEXT(bad src/dst multisample region sizes)");
          return;
       }
 
@@ -2383,7 +2447,7 @@ _mesa_BlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
           colorDrawRb &&
           colorReadRb->Format != colorDrawRb->Format) {
          _mesa_error(ctx, GL_INVALID_OPERATION,
-                "glBlitFramebufferEXT(bad src/dst multisample pixel formats");
+                "glBlitFramebufferEXT(bad src/dst multisample pixel formats)");
          return;
       }
    }
index ba74a95b74c85f6ff9e83a58cec5899092818a09..7eb20050209b168009949d773c28289d349b5347 100644 (file)
@@ -26,6 +26,7 @@
 #ifndef FBOBJECT_H
 #define FBOBJECT_H
 
+#include "compiler.h"
 #include "glheader.h"
 
 struct gl_context;
@@ -48,6 +49,24 @@ _mesa_get_attachment(struct gl_context *ctx, struct gl_framebuffer *fb,
                      GLenum attachment);
 
 
+/** Return the texture image for a renderbuffer attachment */
+static INLINE struct gl_texture_image *
+_mesa_get_attachment_teximage(struct gl_renderbuffer_attachment *att)
+{
+   assert(att->Type == GL_TEXTURE);
+   return att->Texture->Image[att->CubeMapFace][att->TextureLevel];
+}
+
+
+/** Return the (const) texture image for a renderbuffer attachment */
+static INLINE const struct gl_texture_image *
+_mesa_get_attachment_teximage_const(const struct gl_renderbuffer_attachment *att)
+{
+   assert(att->Type == GL_TEXTURE);
+   return att->Texture->Image[att->CubeMapFace][att->TextureLevel];
+}
+
+
 extern void
 _mesa_remove_attachment(struct gl_context *ctx,
                         struct gl_renderbuffer_attachment *att);
@@ -65,14 +84,16 @@ _mesa_set_renderbuffer_attachment(struct gl_context *ctx,
                                   struct gl_renderbuffer *rb);
 
 extern void
-_mesa_framebuffer_renderbuffer(struct gl_context *ctx, struct gl_framebuffer *fb,
+_mesa_framebuffer_renderbuffer(struct gl_context *ctx,
+                               struct gl_framebuffer *fb,
                                GLenum attachment, struct gl_renderbuffer *rb);
 
 extern void
 _mesa_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb);
 
 extern void
-_mesa_test_framebuffer_completeness(struct gl_context *ctx, struct gl_framebuffer *fb);
+_mesa_test_framebuffer_completeness(struct gl_context *ctx,
+                                    struct gl_framebuffer *fb);
 
 extern GLboolean
 _mesa_is_legal_color_format(const struct gl_context *ctx, GLenum baseFormat);
index 9be531735ed865e303558acdf5cc349f98faa086..0b53c28f7ae8e3d51baec72d0937c67f25110c1a 100644 (file)
@@ -439,9 +439,10 @@ static GLuint make_state_key( struct gl_context *ctx,  struct state_key *key )
       key->unit[i].source_index =
          translate_tex_src_bit(texUnit->_ReallyEnabled);
 
-      key->unit[i].shadow = ((texObj->CompareMode == GL_COMPARE_R_TO_TEXTURE) &&
-                             ((format == GL_DEPTH_COMPONENT) || 
-                              (format == GL_DEPTH_STENCIL_EXT)));
+      key->unit[i].shadow =
+         ((texObj->Sampler.CompareMode == GL_COMPARE_R_TO_TEXTURE) &&
+          ((format == GL_DEPTH_COMPONENT) || 
+           (format == GL_DEPTH_STENCIL_EXT)));
 
       key->unit[i].NumArgsRGB = comb->_NumArgsRGB;
       key->unit[i].NumArgsA = comb->_NumArgsA;
@@ -726,7 +727,7 @@ static struct ureg register_input( struct texenv_fragment_program *p, GLuint inp
    }
    else {
       GLuint idx = frag_to_vert_attrib( input );
-      return register_param3( p, STATE_INTERNAL, STATE_CURRENT_ATTRIB, idx );
+      return register_param3( p, STATE_INTERNAL, STATE_CURRENT_ATTRIB_MAYBE_VP_CLAMPED, idx );
    }
 }
 
@@ -1529,15 +1530,26 @@ create_new_program(struct gl_context *ctx, struct state_key *key,
     */
    emit_arith( &p, OPCODE_END, undef, WRITEMASK_XYZW, 0, undef, undef, undef);
 
-   if (key->fog_enabled) {
-      /* Pull fog mode from struct gl_context, the value in the state key is
-       * a reduced value and not what is expected in FogOption
-       */
-      p.program->FogOption = ctx->Fog.Mode;
-      p.program->Base.InputsRead |= FRAG_BIT_FOGC;
+   /* Allocate final instruction array.  This has to be done before calling
+    * _mesa_append_fog_code because that function frees the Base.Instructions.
+    * At this point, Base.Instructions points to stack data, so it's a really
+    * bad idea to free it.
+    */
+   p.program->Base.Instructions
+      = _mesa_alloc_instructions(p.program->Base.NumInstructions);
+   if (!p.program->Base.Instructions) {
+      _mesa_error(ctx, GL_OUT_OF_MEMORY,
+                  "generating tex env program");
+      return;
    }
-   else {
-      p.program->FogOption = GL_NONE;
+   _mesa_copy_instructions(p.program->Base.Instructions, instBuffer,
+                           p.program->Base.NumInstructions);
+
+   /* Append fog code.  This must be done before checking the program against
+    * the limits becuase it will potentially add some instructions.
+    */
+   if (key->fog_enabled) {
+      _mesa_append_fog_code(ctx, p.program, ctx->Fog.Mode, GL_FALSE);
    }
 
    if (p.program->Base.NumTexIndirections > ctx->Const.FragmentProgram.MaxTexIndirections) 
@@ -1551,23 +1563,6 @@ create_new_program(struct gl_context *ctx, struct state_key *key,
 
    ASSERT(p.program->Base.NumInstructions <= MAX_INSTRUCTIONS);
 
-   /* Allocate final instruction array */
-   p.program->Base.Instructions
-      = _mesa_alloc_instructions(p.program->Base.NumInstructions);
-   if (!p.program->Base.Instructions) {
-      _mesa_error(ctx, GL_OUT_OF_MEMORY,
-                  "generating tex env program");
-      return;
-   }
-   _mesa_copy_instructions(p.program->Base.Instructions, instBuffer,
-                           p.program->Base.NumInstructions);
-
-   if (key->num_draw_buffers && p.program->FogOption) {
-      _mesa_append_fog_code(ctx, p.program);
-      p.program->FogOption = GL_NONE;
-   }
-
-
    /* Notify driver the fragment program has (actually) changed.
     */
    if (ctx->Driver.ProgramStringNotify) {
index fd64bd1fd890266a979a480043dba43999b93fc0..88aa31a7fcbe0315a095a41cfac7cda92c35b67a 100644 (file)
@@ -79,12 +79,17 @@ _mesa_Fogiv(GLenum pname, const GLint *params )
 }
 
 
-#define UPDATE_FOG_SCALE(ctx) do {\
-      if (ctx->Fog.End == ctx->Fog.Start)\
-         ctx->Fog._Scale = 1.0f;\
-      else\
-         ctx->Fog._Scale = 1.0f / (ctx->Fog.End - ctx->Fog.Start);\
-   } while(0)
+/**
+ * Update the gl_fog_attrib::_Scale field.
+ */
+static void
+update_fog_scale(struct gl_context *ctx)
+{
+   if (ctx->Fog.End == ctx->Fog.Start)
+      ctx->Fog._Scale = 1.0f;
+   else
+      ctx->Fog._Scale = 1.0f / (ctx->Fog.End - ctx->Fog.Start);
+}
 
 
 void GLAPIENTRY
@@ -126,14 +131,14 @@ _mesa_Fogfv( GLenum pname, const GLfloat *params )
             return;
          FLUSH_VERTICES(ctx, _NEW_FOG);
          ctx->Fog.Start = *params;
-         UPDATE_FOG_SCALE(ctx);
+         update_fog_scale(ctx);
          break;
       case GL_FOG_END:
          if (ctx->Fog.End == *params)
             return;
          FLUSH_VERTICES(ctx, _NEW_FOG);
          ctx->Fog.End = *params;
-         UPDATE_FOG_SCALE(ctx);
+         update_fog_scale(ctx);
          break;
       case GL_FOG_INDEX:
         if (ctx->Fog.Index == *params)
@@ -145,6 +150,10 @@ _mesa_Fogfv( GLenum pname, const GLfloat *params )
         if (TEST_EQ_4V(ctx->Fog.Color, params))
            return;
         FLUSH_VERTICES(ctx, _NEW_FOG);
+        ctx->Fog.ColorUnclamped[0] = params[0];
+        ctx->Fog.ColorUnclamped[1] = params[1];
+        ctx->Fog.ColorUnclamped[2] = params[2];
+        ctx->Fog.ColorUnclamped[3] = params[3];
         ctx->Fog.Color[0] = CLAMP(params[0], 0.0F, 1.0F);
         ctx->Fog.Color[1] = CLAMP(params[1], 0.0F, 1.0F);
         ctx->Fog.Color[2] = CLAMP(params[2], 0.0F, 1.0F);
@@ -184,6 +193,7 @@ void _mesa_init_fog( struct gl_context * ctx )
    ctx->Fog.Enabled = GL_FALSE;
    ctx->Fog.Mode = GL_EXP;
    ASSIGN_4V( ctx->Fog.Color, 0.0, 0.0, 0.0, 0.0 );
+   ASSIGN_4V( ctx->Fog.ColorUnclamped, 0.0, 0.0, 0.0, 0.0 );
    ctx->Fog.Index = 0.0;
    ctx->Fog.Density = 1.0;
    ctx->Fog.Start = 0.0;
index db10c9b4c2e2550d98ddb27a0b8a1c96f5e26860..4c31ccb763c082353b1e48908a5ca06cc6f42e4e 100644 (file)
@@ -677,7 +677,7 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
    {
       MESA_FORMAT_LUMINANCE_FLOAT32,
       "MESA_FORMAT_LUMINANCE_FLOAT32",
-      GL_ALPHA,
+      GL_LUMINANCE,
       GL_FLOAT,
       0, 0, 0, 0,
       32, 0, 0, 0, 0,
@@ -686,7 +686,7 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
    {
       MESA_FORMAT_LUMINANCE_FLOAT16,
       "MESA_FORMAT_LUMINANCE_FLOAT16",
-      GL_ALPHA,
+      GL_LUMINANCE,
       GL_FLOAT,
       0, 0, 0, 0,
       16, 0, 0, 0, 0,
@@ -728,6 +728,42 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       0, 16, 0, 0, 0,
       1, 1, 2
    },
+   {
+      MESA_FORMAT_R_FLOAT32,
+      "MESA_FORMAT_R_FLOAT32",
+      GL_RED,
+      GL_FLOAT,
+      32, 0, 0, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 4
+   },
+   {
+      MESA_FORMAT_R_FLOAT16,
+      "MESA_FORMAT_R_FLOAT16",
+      GL_RED,
+      GL_FLOAT,
+      16, 0, 0, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 2
+   },
+   {
+      MESA_FORMAT_RG_FLOAT32,
+      "MESA_FORMAT_RG_FLOAT32",
+      GL_RG,
+      GL_FLOAT,
+      32, 32, 0, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 8
+   },
+   {
+      MESA_FORMAT_RG_FLOAT16,
+      "MESA_FORMAT_RG_FLOAT16",
+      GL_RG,
+      GL_FLOAT,
+      16, 16, 0, 0,
+      0, 0, 0, 0, 0,
+      1, 1, 4
+   },
 
    /* unnormalized signed int formats */
    {
@@ -809,8 +845,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 1                       /* BlockWidth/Height,Bytes */
    },
    {
-      MESA_FORMAT_SIGNED_RG88,
-      "MESA_FORMAT_SIGNED_RG88",
+      MESA_FORMAT_SIGNED_RG88_REV,
+      "MESA_FORMAT_SIGNED_RG88_REV",
       GL_RG,
       GL_SIGNED_NORMALIZED,
       8, 8, 0, 0,
@@ -847,8 +883,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
 
    /* Signed 16 bits / channel */
    {
-      MESA_FORMAT_SIGNED_R_16,
-      "MESA_FORMAT_SIGNED_R_16",
+      MESA_FORMAT_SIGNED_R16,
+      "MESA_FORMAT_SIGNED_R16",
       GL_RED,
       GL_SIGNED_NORMALIZED,
       16, 0, 0, 0,
@@ -856,8 +892,8 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
       1, 1, 2
    },
    {
-      MESA_FORMAT_SIGNED_RG_16,
-      "MESA_FORMAT_SIGNED_RG_16",
+      MESA_FORMAT_SIGNED_GR1616,
+      "MESA_FORMAT_SIGNED_GR1616",
       GL_RG,
       GL_SIGNED_NORMALIZED,
       16, 16, 0, 0,
@@ -963,6 +999,80 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
      4, 0, 0, 0, 0,
      4, 4, 16                     /* 16 bytes per 4x4 block */
    },
+
+   /* Signed formats from EXT_texture_snorm that are not in GL3.1 */
+   {
+      MESA_FORMAT_SIGNED_A8,
+      "MESA_FORMAT_SIGNED_A8",
+      GL_ALPHA,
+      GL_SIGNED_NORMALIZED,
+      0, 0, 0, 8,
+      0, 0, 0, 0, 0,
+      1, 1, 1
+   },
+   {
+      MESA_FORMAT_SIGNED_L8,
+      "MESA_FORMAT_SIGNED_L8",
+      GL_LUMINANCE,
+      GL_SIGNED_NORMALIZED,
+      0, 0, 0, 0,
+      8, 0, 0, 0, 0,
+      1, 1, 1
+   },
+   {
+      MESA_FORMAT_SIGNED_AL88,
+      "MESA_FORMAT_SIGNED_AL88",
+      GL_LUMINANCE_ALPHA,
+      GL_SIGNED_NORMALIZED,
+      0, 0, 0, 8,
+      8, 0, 0, 0, 0,
+      1, 1, 2
+   },
+   {
+      MESA_FORMAT_SIGNED_I8,
+      "MESA_FORMAT_SIGNED_I8",
+      GL_INTENSITY,
+      GL_SIGNED_NORMALIZED,
+      0, 0, 0, 0,
+      0, 8, 0, 0, 0,
+      1, 1, 1
+   },
+   {
+      MESA_FORMAT_SIGNED_A16,
+      "MESA_FORMAT_SIGNED_A16",
+      GL_ALPHA,
+      GL_SIGNED_NORMALIZED,
+      0, 0, 0, 16,
+      0, 0, 0, 0, 0,
+      1, 1, 2
+   },
+   {
+      MESA_FORMAT_SIGNED_L16,
+      "MESA_FORMAT_SIGNED_L16",
+      GL_LUMINANCE,
+      GL_SIGNED_NORMALIZED,
+      0, 0, 0, 0,
+      16, 0, 0, 0, 0,
+      1, 1, 2
+   },
+   {
+      MESA_FORMAT_SIGNED_AL1616,
+      "MESA_FORMAT_SIGNED_AL1616",
+      GL_LUMINANCE_ALPHA,
+      GL_SIGNED_NORMALIZED,
+      0, 0, 0, 16,
+      16, 0, 0, 0, 0,
+      1, 1, 4
+   },
+   {
+      MESA_FORMAT_SIGNED_I16,
+      "MESA_FORMAT_SIGNED_I16",
+      GL_INTENSITY,
+      GL_SIGNED_NORMALIZED,
+      0, 0, 0, 0,
+      0, 16, 0, 0, 0,
+      1, 1, 2
+   }
 };
 
 
@@ -1530,10 +1640,14 @@ _mesa_format_to_type_and_comps(gl_format format,
       return;
 
    case MESA_FORMAT_SIGNED_R8:
+   case MESA_FORMAT_SIGNED_A8:
+   case MESA_FORMAT_SIGNED_L8:
+   case MESA_FORMAT_SIGNED_I8:
       *datatype = GL_BYTE;
       *comps = 1;
       return;
-   case MESA_FORMAT_SIGNED_RG88:
+   case MESA_FORMAT_SIGNED_RG88_REV:
+   case MESA_FORMAT_SIGNED_AL88:
       *datatype = GL_BYTE;
       *comps = 2;
       return;
@@ -1549,11 +1663,15 @@ _mesa_format_to_type_and_comps(gl_format format,
       *comps = 4;
       return;
 
-   case MESA_FORMAT_SIGNED_R_16:
+   case MESA_FORMAT_SIGNED_R16:
+   case MESA_FORMAT_SIGNED_A16:
+   case MESA_FORMAT_SIGNED_L16:
+   case MESA_FORMAT_SIGNED_I16:
       *datatype = GL_SHORT;
       *comps = 1;
       return;
-   case MESA_FORMAT_SIGNED_RG_16:
+   case MESA_FORMAT_SIGNED_GR1616:
+   case MESA_FORMAT_SIGNED_AL1616:
       *datatype = GL_SHORT;
       *comps = 2;
       return;
@@ -1632,22 +1750,26 @@ _mesa_format_to_type_and_comps(gl_format format,
       *comps = 3;
       return;
    case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32:
+   case MESA_FORMAT_RG_FLOAT32:
       *datatype = GL_FLOAT;
       *comps = 2;
       return;
    case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16:
+   case MESA_FORMAT_RG_FLOAT16:
       *datatype = GL_HALF_FLOAT_ARB;
       *comps = 2;
       return;
    case MESA_FORMAT_ALPHA_FLOAT32:
    case MESA_FORMAT_LUMINANCE_FLOAT32:
    case MESA_FORMAT_INTENSITY_FLOAT32:
+   case MESA_FORMAT_R_FLOAT32:
       *datatype = GL_FLOAT;
       *comps = 1;
       return;
    case MESA_FORMAT_ALPHA_FLOAT16:
    case MESA_FORMAT_LUMINANCE_FLOAT16:
    case MESA_FORMAT_INTENSITY_FLOAT16:
+   case MESA_FORMAT_R_FLOAT16:
       *datatype = GL_HALF_FLOAT_ARB;
       *comps = 1;
       return;
index 04a18930b4e1b53cd5a9710a8d446bb0f885b037..15ac62cfef9589fcd69ebe057744a73789096e54 100644 (file)
@@ -142,6 +142,10 @@ typedef enum
    MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16,
    MESA_FORMAT_INTENSITY_FLOAT32,
    MESA_FORMAT_INTENSITY_FLOAT16,
+   MESA_FORMAT_R_FLOAT32,
+   MESA_FORMAT_R_FLOAT16,
+   MESA_FORMAT_RG_FLOAT32,
+   MESA_FORMAT_RG_FLOAT16,
    /*@}*/
 
    /**
@@ -168,12 +172,12 @@ typedef enum
    /*@{*/
    MESA_FORMAT_DUDV8,             /*                     DUDU DUDU DVDV DVDV */
    MESA_FORMAT_SIGNED_R8,         /*                               RRRR RRRR */
-   MESA_FORMAT_SIGNED_RG88,       /*                     RRRR RRRR GGGG GGGG */
+   MESA_FORMAT_SIGNED_RG88_REV,   /*                     GGGG GGGG RRRR RRRR */
    MESA_FORMAT_SIGNED_RGBX8888,   /* RRRR RRRR GGGG GGGG BBBB BBBB xxxx xxxx */
    MESA_FORMAT_SIGNED_RGBA8888,   /* RRRR RRRR GGGG GGGG BBBB BBBB AAAA AAAA */
    MESA_FORMAT_SIGNED_RGBA8888_REV,/*AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR */
-   MESA_FORMAT_SIGNED_R_16,       /* ushort[0]=R */
-   MESA_FORMAT_SIGNED_RG_16,      /* ushort[0]=R, ushort[1]=G */
+   MESA_FORMAT_SIGNED_R16,        /*                     RRRR RRRR RRRR RRRR */
+   MESA_FORMAT_SIGNED_GR1616,     /* GGGG GGGG GGGG GGGG RRRR RRRR RRRR RRRR */
    MESA_FORMAT_SIGNED_RGB_16,     /* ushort[0]=R, ushort[1]=G, ushort[2]=B */
    MESA_FORMAT_SIGNED_RGBA_16,    /* ... */
    MESA_FORMAT_RGBA_16,           /* ... */
@@ -193,6 +197,15 @@ typedef enum
    MESA_FORMAT_SIGNED_LA_LATC2,
    /*@}*/
 
+   MESA_FORMAT_SIGNED_A8,         /*                               AAAA AAAA */
+   MESA_FORMAT_SIGNED_L8,         /*                               LLLL LLLL */
+   MESA_FORMAT_SIGNED_AL88,       /*                     AAAA AAAA LLLL LLLL */
+   MESA_FORMAT_SIGNED_I8,         /*                               IIII IIII */
+   MESA_FORMAT_SIGNED_A16,        /*                     AAAA AAAA AAAA AAAA */
+   MESA_FORMAT_SIGNED_L16,        /*                     LLLL LLLL LLLL LLLL */
+   MESA_FORMAT_SIGNED_AL1616,     /* AAAA AAAA AAAA AAAA LLLL LLLL LLLL LLLL */
+   MESA_FORMAT_SIGNED_I16,        /*                     IIII IIII IIII IIII */
+
    MESA_FORMAT_COUNT
 } gl_format;
 
index 430e013d017b10b6702739e30064a5a36145810b..66c9bd91096260139b1f32ea2b7cb09c5def7e83 100644 (file)
@@ -551,7 +551,6 @@ _mesa_update_framebuffer_visual(struct gl_context *ctx,
             fb->Visual.alphaBits = _mesa_get_format_bits(fmt, GL_ALPHA_BITS);
             fb->Visual.rgbBits = fb->Visual.redBits
                + fb->Visual.greenBits + fb->Visual.blueBits;
-            fb->Visual.floatMode = GL_FALSE;
             fb->Visual.samples = rb->NumSamples;
             if (_mesa_get_format_color_encoding(fmt) == GL_SRGB)
                 fb->Visual.sRGBCapable = ctx->Const.sRGBCapable;
@@ -560,6 +559,19 @@ _mesa_update_framebuffer_visual(struct gl_context *ctx,
       }
    }
 
+   fb->Visual.floatMode = GL_FALSE;
+   for (i = 0; i < BUFFER_COUNT; i++) {
+      if (fb->Attachment[i].Renderbuffer) {
+         const struct gl_renderbuffer *rb = fb->Attachment[i].Renderbuffer;
+         const gl_format fmt = rb->Format;
+
+         if (_mesa_get_format_datatype(fmt) == GL_FLOAT) {
+            fb->Visual.floatMode = GL_TRUE;
+            break;
+         }
+      }
+   }
+
    if (fb->Attachment[BUFFER_DEPTH].Renderbuffer) {
       const struct gl_renderbuffer *rb =
          fb->Attachment[BUFFER_DEPTH].Renderbuffer;
@@ -1061,12 +1073,12 @@ _mesa_print_framebuffer(const struct gl_framebuffer *fb)
    for (i = 0; i < BUFFER_COUNT; i++) {
       const struct gl_renderbuffer_attachment *att = &fb->Attachment[i];
       if (att->Type == GL_TEXTURE) {
-         const struct gl_texture_image *texImage;
+         const struct gl_texture_image *texImage =
+            _mesa_get_attachment_teximage_const(att);
          fprintf(stderr,
                  "  %2d: Texture %u, level %u, face %u, slice %u, complete %d\n",
                  i, att->Texture->Name, att->TextureLevel, att->CubeMapFace,
                  att->Zoffset, att->Complete);
-         texImage = att->Texture->Image[att->CubeMapFace][att->TextureLevel];
          fprintf(stderr, "       Size: %u x %u x %u  Format %s\n",
                  texImage->Width, texImage->Height, texImage->Depth,
                  _mesa_get_format_name(texImage->TexFormat));
index 7d1a5cf600208ba44277578f37fcafeb1832a0c3..e18803280c1a52fc0cce3950364d9917826cf9a1 100644 (file)
@@ -131,6 +131,7 @@ enum value_extra {
    EXTRA_VERSION_32,
    EXTRA_VERSION_ES2,
    EXTRA_NEW_BUFFERS, 
+   EXTRA_NEW_FRAG_CLAMP,
    EXTRA_VALID_DRAW_BUFFER,
    EXTRA_VALID_TEXTURE_UNIT,
    EXTRA_FLUSH_CURRENT,
@@ -223,6 +224,11 @@ static const int extra_new_buffers[] = {
    EXTRA_END
 };
 
+static const int extra_new_frag_clamp[] = {
+   EXTRA_NEW_FRAG_CLAMP,
+   EXTRA_END
+};
+
 static const int extra_valid_draw_buffer[] = {
    EXTRA_VALID_DRAW_BUFFER,
    EXTRA_END
@@ -272,6 +278,11 @@ static const int extra_EXT_gpu_shader4[] = {
    EXTRA_END
 };
 
+static const int extra_ARB_sampler_objects[] = {
+   EXT(ARB_sampler_objects),
+   EXTRA_END
+};
+
 
 EXTRA_EXT(ARB_ES2_compatibility);
 EXTRA_EXT(ARB_multitexture);
@@ -317,6 +328,7 @@ EXTRA_EXT(ARB_vertex_buffer_object);
 EXTRA_EXT(ARB_geometry_shader4);
 EXTRA_EXT(ARB_copy_buffer);
 EXTRA_EXT(EXT_framebuffer_sRGB);
+EXTRA_EXT(ARB_texture_buffer_object);
 
 static const int
 extra_ARB_vertex_program_ARB_fragment_program_NV_vertex_program[] = {
@@ -374,7 +386,7 @@ static const struct value_desc values[] = {
    { GL_BLEND, CONTEXT_BIT0(Color.BlendEnabled), NO_EXTRA },
    { GL_BLEND_SRC, CONTEXT_ENUM(Color.Blend[0].SrcRGB), NO_EXTRA },
    { GL_BLUE_BITS, BUFFER_INT(Visual.blueBits), extra_new_buffers },
-   { GL_COLOR_CLEAR_VALUE, CONTEXT_FIELD(Color.ClearColor[0], TYPE_FLOATN_4), NO_EXTRA },
+   { GL_COLOR_CLEAR_VALUE, LOC_CUSTOM, TYPE_FLOATN_4, 0, extra_new_frag_clamp },
    { GL_COLOR_WRITEMASK, LOC_CUSTOM, TYPE_INT_4, 0, NO_EXTRA },
    { GL_CULL_FACE, CONTEXT_BOOL(Polygon.CullFlag), NO_EXTRA },
    { GL_CULL_FACE_MODE, CONTEXT_ENUM(Polygon.CullFaceMode), NO_EXTRA },
@@ -511,7 +523,7 @@ static const struct value_desc values[] = {
    { GL_LIGHT_MODEL_TWO_SIDE, CONTEXT_BOOL(Light.Model.TwoSide), NO_EXTRA },
    { GL_ALPHA_TEST, CONTEXT_BOOL(Color.AlphaEnabled), NO_EXTRA },
    { GL_ALPHA_TEST_FUNC, CONTEXT_ENUM(Color.AlphaFunc), NO_EXTRA },
-   { GL_ALPHA_TEST_REF, CONTEXT_FIELD(Color.AlphaRef, TYPE_FLOATN), NO_EXTRA },
+   { GL_ALPHA_TEST_REF, LOC_CUSTOM, TYPE_FLOATN, 0, extra_new_frag_clamp },
    { GL_BLEND_DST, CONTEXT_ENUM(Color.Blend[0].DstRGB), NO_EXTRA },
    { GL_CLIP_PLANE0, CONTEXT_BIT0(Transform.ClipPlanesEnabled), NO_EXTRA },
    { GL_CLIP_PLANE1, CONTEXT_BIT1(Transform.ClipPlanesEnabled), NO_EXTRA },
@@ -530,7 +542,7 @@ static const struct value_desc values[] = {
      extra_flush_current_valid_texture_unit },
    { GL_DISTANCE_ATTENUATION_EXT, CONTEXT_FLOAT3(Point.Params[0]), NO_EXTRA },
    { GL_FOG, CONTEXT_BOOL(Fog.Enabled), NO_EXTRA },
-   { GL_FOG_COLOR, CONTEXT_FIELD(Fog.Color[0], TYPE_FLOATN_4), NO_EXTRA },
+   { GL_FOG_COLOR, LOC_CUSTOM, TYPE_FLOATN_4, 0, extra_new_frag_clamp },
    { GL_FOG_DENSITY, CONTEXT_FLOAT(Fog.Density), NO_EXTRA },
    { GL_FOG_END, CONTEXT_FLOAT(Fog.End), NO_EXTRA },
    { GL_FOG_HINT, CONTEXT_ENUM(Hint.Fog), NO_EXTRA },
@@ -572,7 +584,7 @@ static const struct value_desc values[] = {
    { GL_VERTEX_ARRAY_SIZE, ARRAY_INT(Vertex.Size), NO_EXTRA },
    { GL_VERTEX_ARRAY_TYPE, ARRAY_ENUM(Vertex.Type), NO_EXTRA },
    { GL_VERTEX_ARRAY_STRIDE, ARRAY_INT(Vertex.Stride), NO_EXTRA },
-   { GL_NORMAL_ARRAY, ARRAY_ENUM(Normal.Enabled), NO_EXTRA },
+   { GL_NORMAL_ARRAY, ARRAY_BOOL(Normal.Enabled), NO_EXTRA },
    { GL_NORMAL_ARRAY_TYPE, ARRAY_ENUM(Normal.Type), NO_EXTRA },
    { GL_NORMAL_ARRAY_STRIDE, ARRAY_INT(Normal.Stride), NO_EXTRA },
    { GL_COLOR_ARRAY, ARRAY_BOOL(Color.Enabled), NO_EXTRA },
@@ -582,11 +594,11 @@ static const struct value_desc values[] = {
    { GL_TEXTURE_COORD_ARRAY,
      LOC_CUSTOM, TYPE_BOOLEAN, offsetof(struct gl_client_array, Enabled), NO_EXTRA },
    { GL_TEXTURE_COORD_ARRAY_SIZE,
-     LOC_CUSTOM, TYPE_BOOLEAN, offsetof(struct gl_client_array, Size), NO_EXTRA },
+     LOC_CUSTOM, TYPE_INT, offsetof(struct gl_client_array, Size), NO_EXTRA },
    { GL_TEXTURE_COORD_ARRAY_TYPE,
-     LOC_CUSTOM, TYPE_BOOLEAN, offsetof(struct gl_client_array, Type), NO_EXTRA },
+     LOC_CUSTOM, TYPE_ENUM, offsetof(struct gl_client_array, Type), NO_EXTRA },
    { GL_TEXTURE_COORD_ARRAY_STRIDE,
-     LOC_CUSTOM, TYPE_BOOLEAN, offsetof(struct gl_client_array, Stride), NO_EXTRA },
+     LOC_CUSTOM, TYPE_INT, offsetof(struct gl_client_array, Stride), NO_EXTRA },
 
    /* GL_ARB_ES2_compatibility */
    { GL_SHADER_COMPILER, CONST(1), extra_ARB_ES2_compatibility },
@@ -674,7 +686,7 @@ static const struct value_desc values[] = {
    /* GL_ARB_draw_buffers */
    { GL_MAX_DRAW_BUFFERS_ARB, CONTEXT_INT(Const.MaxDrawBuffers), NO_EXTRA },
 
-   { GL_BLEND_COLOR_EXT, CONTEXT_FIELD(Color.BlendColor[0], TYPE_FLOATN_4), NO_EXTRA },
+   { GL_BLEND_COLOR_EXT, LOC_CUSTOM, TYPE_FLOATN_4, 0, extra_new_frag_clamp },
    /* GL_ARB_fragment_program */
    { GL_MAX_TEXTURE_IMAGE_UNITS_ARB, /* == GL_MAX_TEXTURE_IMAGE_UNITS_NV */
      CONTEXT_INT(Const.MaxTextureImageUnits),
@@ -1219,6 +1231,9 @@ static const struct value_desc values[] = {
      CONTEXT_INT(Const.MaxVertexVaryingComponents),
      extra_ARB_geometry_shader4 },
 
+   /* GL_ARB_color_buffer_float */
+   { GL_RGBA_FLOAT_MODE_ARB, BUFFER_FIELD(Visual.floatMode, TYPE_BOOLEAN), 0 },
+
    /* GL_EXT_gpu_shader4 / GL 3.0 */
    { GL_MIN_PROGRAM_TEXEL_OFFSET,
      CONTEXT_INT(Const.MinProgramTexelOffset),
@@ -1227,6 +1242,22 @@ static const struct value_desc values[] = {
      CONTEXT_INT(Const.MaxProgramTexelOffset),
      extra_EXT_gpu_shader4 },
 
+   /* GL_ARB_texture_buffer_object */
+   { GL_MAX_TEXTURE_BUFFER_SIZE_ARB, CONTEXT_INT(Const.MaxTextureBufferSize),
+     extra_ARB_texture_buffer_object },
+   { GL_TEXTURE_BINDING_BUFFER_ARB, LOC_CUSTOM, TYPE_INT, 0,
+     extra_ARB_texture_buffer_object },
+   { GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB, LOC_CUSTOM, TYPE_INT,
+     TEXTURE_BUFFER_INDEX, extra_ARB_texture_buffer_object },
+   { GL_TEXTURE_BUFFER_FORMAT_ARB, LOC_CUSTOM, TYPE_INT, 0,
+     extra_ARB_texture_buffer_object },
+   { GL_TEXTURE_BUFFER_ARB, LOC_CUSTOM, TYPE_INT, 0,
+     extra_ARB_texture_buffer_object },
+
+   /* GL_ARB_sampler_objects / GL 3.3 */
+   { GL_SAMPLER_BINDING,
+     LOC_CUSTOM, TYPE_INT, GL_SAMPLER_BINDING, extra_ARB_sampler_objects },
+
    /* GL 3.0 */
    { GL_NUM_EXTENSIONS, LOC_CUSTOM, TYPE_INT, 0, extra_version_30 },
    { GL_MAJOR_VERSION, CONTEXT_INT(VersionMajor), extra_version_30 },
@@ -1367,7 +1398,7 @@ void _mesa_init_get_hash(struct gl_context *ctx)
 static void
 find_custom_value(struct gl_context *ctx, const struct value_desc *d, union value *v)
 {
-   struct gl_buffer_object *buffer_obj;
+   struct gl_buffer_object **buffer_obj;
    struct gl_client_array *array;
    GLuint unit, *p;
 
@@ -1569,9 +1600,9 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu
    case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
    case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
    case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
-      buffer_obj = (struct gl_buffer_object *)
+      buffer_obj = (struct gl_buffer_object **)
         ((char *) ctx->Array.ArrayObj + d->offset);
-      v->value_int = buffer_obj->Name;
+      v->value_int = (*buffer_obj)->Name;
       break;
    case GL_ARRAY_BUFFER_BINDING_ARB:
       v->value_int = ctx->Array.ArrayBufferObj->Name;
@@ -1633,6 +1664,30 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu
       v->value_int = ctx->Array.ArrayObj->PointSize.BufferObj->Name;
       break;
 
+   case GL_FOG_COLOR:
+      if(ctx->Color._ClampFragmentColor)
+         COPY_4FV(v->value_float_4, ctx->Fog.Color);
+      else
+         COPY_4FV(v->value_float_4, ctx->Fog.ColorUnclamped);
+      break;
+   case GL_COLOR_CLEAR_VALUE:
+      if(ctx->Color._ClampFragmentColor)
+         COPY_4FV(v->value_float_4, ctx->Color.ClearColor);
+      else
+         COPY_4FV(v->value_float_4, ctx->Color.ClearColorUnclamped);
+      break;
+   case GL_BLEND_COLOR_EXT:
+      if(ctx->Color._ClampFragmentColor)
+         COPY_4FV(v->value_float_4, ctx->Color.BlendColor);
+      else
+         COPY_4FV(v->value_float_4, ctx->Color.BlendColorUnclamped);
+      break;
+   case GL_ALPHA_TEST_REF:
+      if(ctx->Color._ClampFragmentColor)
+         v->value_float = ctx->Color.AlphaRef;
+      else
+         v->value_float = ctx->Color.AlphaRefUnclamped;
+      break;
    case GL_MAX_VERTEX_UNIFORM_VECTORS:
       v->value_int = ctx->Const.VertexProgram.MaxUniformComponents / 4;
       break;
@@ -1640,6 +1695,37 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu
    case GL_MAX_FRAGMENT_UNIFORM_VECTORS:
       v->value_int = ctx->Const.FragmentProgram.MaxUniformComponents / 4;
       break;
+
+   /* GL_ARB_texture_buffer_object */
+   case GL_TEXTURE_BUFFER_ARB:
+      v->value_int = ctx->Texture.BufferObject->Name;
+      break;
+   case GL_TEXTURE_BINDING_BUFFER_ARB:
+      unit = ctx->Texture.CurrentUnit;
+      v->value_int =
+         ctx->Texture.Unit[unit].CurrentTex[TEXTURE_BUFFER_INDEX]->Name;
+      break;
+   case GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB:
+      {
+         struct gl_buffer_object *buf =
+            ctx->Texture.Unit[ctx->Texture.CurrentUnit]
+            .CurrentTex[TEXTURE_BUFFER_INDEX]->BufferObject;
+         v->value_int = buf ? buf->Name : 0;
+      }
+      break;
+   case GL_TEXTURE_BUFFER_FORMAT_ARB:
+      v->value_int = ctx->Texture.Unit[ctx->Texture.CurrentUnit]
+         .CurrentTex[TEXTURE_BUFFER_INDEX]->BufferObjectFormat;
+      break;
+
+   /* GL_ARB_sampler_objects */
+   case GL_SAMPLER_BINDING:
+      {
+         struct gl_sampler_object *samp =
+            ctx->Texture.Unit[ctx->Texture.CurrentUnit].Sampler;
+         v->value_int = samp ? samp->Name : 0;
+      }
+      break;
    }   
 }
 
@@ -1687,6 +1773,10 @@ check_extra(struct gl_context *ctx, const char *func, const struct value_desc *d
            enabled++;
         }
         break;
+      case EXTRA_NEW_FRAG_CLAMP:
+         if (ctx->NewState & (_NEW_BUFFERS | _NEW_FRAG_CLAMP))
+            _mesa_update_state(ctx);
+         break;
       case EXTRA_VERSION_ES2:
         if (ctx->API == API_OPENGLES2) {
            total++;
index cbfe6400e42db4d935923aaa4d12a9e1e2241b10..c1cc6cb12543a7daabf2cded8106c06456fe42ba 100644 (file)
@@ -59,7 +59,7 @@
     } while(0)
 
 /* total number of offsets below */
-#define _gloffset_COUNT 892
+#define _gloffset_COUNT 908
 
 #define _gloffset_NewList 0
 #define _gloffset_EndList 1
 #define _gloffset_GetActiveAttribARB 569
 #define _gloffset_GetAttribLocationARB 570
 #define _gloffset_DrawBuffersARB 571
-#define _gloffset_DrawArraysInstancedARB 572
-#define _gloffset_DrawElementsInstancedARB 573
-#define _gloffset_RenderbufferStorageMultisample 574
-#define _gloffset_FramebufferTextureARB 575
-#define _gloffset_FramebufferTextureFaceARB 576
-#define _gloffset_ProgramParameteriARB 577
-#define _gloffset_VertexAttribDivisorARB 578
-#define _gloffset_FlushMappedBufferRange 579
-#define _gloffset_MapBufferRange 580
-#define _gloffset_BindVertexArray 581
-#define _gloffset_GenVertexArrays 582
-#define _gloffset_CopyBufferSubData 583
-#define _gloffset_ClientWaitSync 584
-#define _gloffset_DeleteSync 585
-#define _gloffset_FenceSync 586
-#define _gloffset_GetInteger64v 587
-#define _gloffset_GetSynciv 588
-#define _gloffset_IsSync 589
-#define _gloffset_WaitSync 590
-#define _gloffset_DrawElementsBaseVertex 591
-#define _gloffset_DrawRangeElementsBaseVertex 592
-#define _gloffset_MultiDrawElementsBaseVertex 593
-#define _gloffset_BlendEquationSeparateiARB 594
-#define _gloffset_BlendEquationiARB 595
-#define _gloffset_BlendFuncSeparateiARB 596
-#define _gloffset_BlendFunciARB 597
-#define _gloffset_BindTransformFeedback 598
-#define _gloffset_DeleteTransformFeedbacks 599
-#define _gloffset_DrawTransformFeedback 600
-#define _gloffset_GenTransformFeedbacks 601
-#define _gloffset_IsTransformFeedback 602
-#define _gloffset_PauseTransformFeedback 603
-#define _gloffset_ResumeTransformFeedback 604
-#define _gloffset_ClearDepthf 605
-#define _gloffset_DepthRangef 606
-#define _gloffset_GetShaderPrecisionFormat 607
-#define _gloffset_ReleaseShaderCompiler 608
-#define _gloffset_ShaderBinary 609
-#define _gloffset_PolygonOffsetEXT 610
-#define _gloffset_GetPixelTexGenParameterfvSGIS 611
-#define _gloffset_GetPixelTexGenParameterivSGIS 612
-#define _gloffset_PixelTexGenParameterfSGIS 613
-#define _gloffset_PixelTexGenParameterfvSGIS 614
-#define _gloffset_PixelTexGenParameteriSGIS 615
-#define _gloffset_PixelTexGenParameterivSGIS 616
-#define _gloffset_SampleMaskSGIS 617
-#define _gloffset_SamplePatternSGIS 618
-#define _gloffset_ColorPointerEXT 619
-#define _gloffset_EdgeFlagPointerEXT 620
-#define _gloffset_IndexPointerEXT 621
-#define _gloffset_NormalPointerEXT 622
-#define _gloffset_TexCoordPointerEXT 623
-#define _gloffset_VertexPointerEXT 624
-#define _gloffset_PointParameterfEXT 625
-#define _gloffset_PointParameterfvEXT 626
-#define _gloffset_LockArraysEXT 627
-#define _gloffset_UnlockArraysEXT 628
-#define _gloffset_SecondaryColor3bEXT 629
-#define _gloffset_SecondaryColor3bvEXT 630
-#define _gloffset_SecondaryColor3dEXT 631
-#define _gloffset_SecondaryColor3dvEXT 632
-#define _gloffset_SecondaryColor3fEXT 633
-#define _gloffset_SecondaryColor3fvEXT 634
-#define _gloffset_SecondaryColor3iEXT 635
-#define _gloffset_SecondaryColor3ivEXT 636
-#define _gloffset_SecondaryColor3sEXT 637
-#define _gloffset_SecondaryColor3svEXT 638
-#define _gloffset_SecondaryColor3ubEXT 639
-#define _gloffset_SecondaryColor3ubvEXT 640
-#define _gloffset_SecondaryColor3uiEXT 641
-#define _gloffset_SecondaryColor3uivEXT 642
-#define _gloffset_SecondaryColor3usEXT 643
-#define _gloffset_SecondaryColor3usvEXT 644
-#define _gloffset_SecondaryColorPointerEXT 645
-#define _gloffset_MultiDrawArraysEXT 646
-#define _gloffset_MultiDrawElementsEXT 647
-#define _gloffset_FogCoordPointerEXT 648
-#define _gloffset_FogCoorddEXT 649
-#define _gloffset_FogCoorddvEXT 650
-#define _gloffset_FogCoordfEXT 651
-#define _gloffset_FogCoordfvEXT 652
-#define _gloffset_PixelTexGenSGIX 653
-#define _gloffset_BlendFuncSeparateEXT 654
-#define _gloffset_FlushVertexArrayRangeNV 655
-#define _gloffset_VertexArrayRangeNV 656
-#define _gloffset_CombinerInputNV 657
-#define _gloffset_CombinerOutputNV 658
-#define _gloffset_CombinerParameterfNV 659
-#define _gloffset_CombinerParameterfvNV 660
-#define _gloffset_CombinerParameteriNV 661
-#define _gloffset_CombinerParameterivNV 662
-#define _gloffset_FinalCombinerInputNV 663
-#define _gloffset_GetCombinerInputParameterfvNV 664
-#define _gloffset_GetCombinerInputParameterivNV 665
-#define _gloffset_GetCombinerOutputParameterfvNV 666
-#define _gloffset_GetCombinerOutputParameterivNV 667
-#define _gloffset_GetFinalCombinerInputParameterfvNV 668
-#define _gloffset_GetFinalCombinerInputParameterivNV 669
-#define _gloffset_ResizeBuffersMESA 670
-#define _gloffset_WindowPos2dMESA 671
-#define _gloffset_WindowPos2dvMESA 672
-#define _gloffset_WindowPos2fMESA 673
-#define _gloffset_WindowPos2fvMESA 674
-#define _gloffset_WindowPos2iMESA 675
-#define _gloffset_WindowPos2ivMESA 676
-#define _gloffset_WindowPos2sMESA 677
-#define _gloffset_WindowPos2svMESA 678
-#define _gloffset_WindowPos3dMESA 679
-#define _gloffset_WindowPos3dvMESA 680
-#define _gloffset_WindowPos3fMESA 681
-#define _gloffset_WindowPos3fvMESA 682
-#define _gloffset_WindowPos3iMESA 683
-#define _gloffset_WindowPos3ivMESA 684
-#define _gloffset_WindowPos3sMESA 685
-#define _gloffset_WindowPos3svMESA 686
-#define _gloffset_WindowPos4dMESA 687
-#define _gloffset_WindowPos4dvMESA 688
-#define _gloffset_WindowPos4fMESA 689
-#define _gloffset_WindowPos4fvMESA 690
-#define _gloffset_WindowPos4iMESA 691
-#define _gloffset_WindowPos4ivMESA 692
-#define _gloffset_WindowPos4sMESA 693
-#define _gloffset_WindowPos4svMESA 694
-#define _gloffset_MultiModeDrawArraysIBM 695
-#define _gloffset_MultiModeDrawElementsIBM 696
-#define _gloffset_DeleteFencesNV 697
-#define _gloffset_FinishFenceNV 698
-#define _gloffset_GenFencesNV 699
-#define _gloffset_GetFenceivNV 700
-#define _gloffset_IsFenceNV 701
-#define _gloffset_SetFenceNV 702
-#define _gloffset_TestFenceNV 703
-#define _gloffset_AreProgramsResidentNV 704
-#define _gloffset_BindProgramNV 705
-#define _gloffset_DeleteProgramsNV 706
-#define _gloffset_ExecuteProgramNV 707
-#define _gloffset_GenProgramsNV 708
-#define _gloffset_GetProgramParameterdvNV 709
-#define _gloffset_GetProgramParameterfvNV 710
-#define _gloffset_GetProgramStringNV 711
-#define _gloffset_GetProgramivNV 712
-#define _gloffset_GetTrackMatrixivNV 713
-#define _gloffset_GetVertexAttribPointervNV 714
-#define _gloffset_GetVertexAttribdvNV 715
-#define _gloffset_GetVertexAttribfvNV 716
-#define _gloffset_GetVertexAttribivNV 717
-#define _gloffset_IsProgramNV 718
-#define _gloffset_LoadProgramNV 719
-#define _gloffset_ProgramParameters4dvNV 720
-#define _gloffset_ProgramParameters4fvNV 721
-#define _gloffset_RequestResidentProgramsNV 722
-#define _gloffset_TrackMatrixNV 723
-#define _gloffset_VertexAttrib1dNV 724
-#define _gloffset_VertexAttrib1dvNV 725
-#define _gloffset_VertexAttrib1fNV 726
-#define _gloffset_VertexAttrib1fvNV 727
-#define _gloffset_VertexAttrib1sNV 728
-#define _gloffset_VertexAttrib1svNV 729
-#define _gloffset_VertexAttrib2dNV 730
-#define _gloffset_VertexAttrib2dvNV 731
-#define _gloffset_VertexAttrib2fNV 732
-#define _gloffset_VertexAttrib2fvNV 733
-#define _gloffset_VertexAttrib2sNV 734
-#define _gloffset_VertexAttrib2svNV 735
-#define _gloffset_VertexAttrib3dNV 736
-#define _gloffset_VertexAttrib3dvNV 737
-#define _gloffset_VertexAttrib3fNV 738
-#define _gloffset_VertexAttrib3fvNV 739
-#define _gloffset_VertexAttrib3sNV 740
-#define _gloffset_VertexAttrib3svNV 741
-#define _gloffset_VertexAttrib4dNV 742
-#define _gloffset_VertexAttrib4dvNV 743
-#define _gloffset_VertexAttrib4fNV 744
-#define _gloffset_VertexAttrib4fvNV 745
-#define _gloffset_VertexAttrib4sNV 746
-#define _gloffset_VertexAttrib4svNV 747
-#define _gloffset_VertexAttrib4ubNV 748
-#define _gloffset_VertexAttrib4ubvNV 749
-#define _gloffset_VertexAttribPointerNV 750
-#define _gloffset_VertexAttribs1dvNV 751
-#define _gloffset_VertexAttribs1fvNV 752
-#define _gloffset_VertexAttribs1svNV 753
-#define _gloffset_VertexAttribs2dvNV 754
-#define _gloffset_VertexAttribs2fvNV 755
-#define _gloffset_VertexAttribs2svNV 756
-#define _gloffset_VertexAttribs3dvNV 757
-#define _gloffset_VertexAttribs3fvNV 758
-#define _gloffset_VertexAttribs3svNV 759
-#define _gloffset_VertexAttribs4dvNV 760
-#define _gloffset_VertexAttribs4fvNV 761
-#define _gloffset_VertexAttribs4svNV 762
-#define _gloffset_VertexAttribs4ubvNV 763
-#define _gloffset_GetTexBumpParameterfvATI 764
-#define _gloffset_GetTexBumpParameterivATI 765
-#define _gloffset_TexBumpParameterfvATI 766
-#define _gloffset_TexBumpParameterivATI 767
-#define _gloffset_AlphaFragmentOp1ATI 768
-#define _gloffset_AlphaFragmentOp2ATI 769
-#define _gloffset_AlphaFragmentOp3ATI 770
-#define _gloffset_BeginFragmentShaderATI 771
-#define _gloffset_BindFragmentShaderATI 772
-#define _gloffset_ColorFragmentOp1ATI 773
-#define _gloffset_ColorFragmentOp2ATI 774
-#define _gloffset_ColorFragmentOp3ATI 775
-#define _gloffset_DeleteFragmentShaderATI 776
-#define _gloffset_EndFragmentShaderATI 777
-#define _gloffset_GenFragmentShadersATI 778
-#define _gloffset_PassTexCoordATI 779
-#define _gloffset_SampleMapATI 780
-#define _gloffset_SetFragmentShaderConstantATI 781
-#define _gloffset_PointParameteriNV 782
-#define _gloffset_PointParameterivNV 783
-#define _gloffset_ActiveStencilFaceEXT 784
-#define _gloffset_BindVertexArrayAPPLE 785
-#define _gloffset_DeleteVertexArraysAPPLE 786
-#define _gloffset_GenVertexArraysAPPLE 787
-#define _gloffset_IsVertexArrayAPPLE 788
-#define _gloffset_GetProgramNamedParameterdvNV 789
-#define _gloffset_GetProgramNamedParameterfvNV 790
-#define _gloffset_ProgramNamedParameter4dNV 791
-#define _gloffset_ProgramNamedParameter4dvNV 792
-#define _gloffset_ProgramNamedParameter4fNV 793
-#define _gloffset_ProgramNamedParameter4fvNV 794
-#define _gloffset_PrimitiveRestartIndexNV 795
-#define _gloffset_PrimitiveRestartNV 796
-#define _gloffset_DepthBoundsEXT 797
-#define _gloffset_BlendEquationSeparateEXT 798
-#define _gloffset_BindFramebufferEXT 799
-#define _gloffset_BindRenderbufferEXT 800
-#define _gloffset_CheckFramebufferStatusEXT 801
-#define _gloffset_DeleteFramebuffersEXT 802
-#define _gloffset_DeleteRenderbuffersEXT 803
-#define _gloffset_FramebufferRenderbufferEXT 804
-#define _gloffset_FramebufferTexture1DEXT 805
-#define _gloffset_FramebufferTexture2DEXT 806
-#define _gloffset_FramebufferTexture3DEXT 807
-#define _gloffset_GenFramebuffersEXT 808
-#define _gloffset_GenRenderbuffersEXT 809
-#define _gloffset_GenerateMipmapEXT 810
-#define _gloffset_GetFramebufferAttachmentParameterivEXT 811
-#define _gloffset_GetRenderbufferParameterivEXT 812
-#define _gloffset_IsFramebufferEXT 813
-#define _gloffset_IsRenderbufferEXT 814
-#define _gloffset_RenderbufferStorageEXT 815
-#define _gloffset_BlitFramebufferEXT 816
-#define _gloffset_BufferParameteriAPPLE 817
-#define _gloffset_FlushMappedBufferRangeAPPLE 818
-#define _gloffset_BindFragDataLocationEXT 819
-#define _gloffset_GetFragDataLocationEXT 820
-#define _gloffset_GetUniformuivEXT 821
-#define _gloffset_GetVertexAttribIivEXT 822
-#define _gloffset_GetVertexAttribIuivEXT 823
-#define _gloffset_Uniform1uiEXT 824
-#define _gloffset_Uniform1uivEXT 825
-#define _gloffset_Uniform2uiEXT 826
-#define _gloffset_Uniform2uivEXT 827
-#define _gloffset_Uniform3uiEXT 828
-#define _gloffset_Uniform3uivEXT 829
-#define _gloffset_Uniform4uiEXT 830
-#define _gloffset_Uniform4uivEXT 831
-#define _gloffset_VertexAttribI1iEXT 832
-#define _gloffset_VertexAttribI1ivEXT 833
-#define _gloffset_VertexAttribI1uiEXT 834
-#define _gloffset_VertexAttribI1uivEXT 835
-#define _gloffset_VertexAttribI2iEXT 836
-#define _gloffset_VertexAttribI2ivEXT 837
-#define _gloffset_VertexAttribI2uiEXT 838
-#define _gloffset_VertexAttribI2uivEXT 839
-#define _gloffset_VertexAttribI3iEXT 840
-#define _gloffset_VertexAttribI3ivEXT 841
-#define _gloffset_VertexAttribI3uiEXT 842
-#define _gloffset_VertexAttribI3uivEXT 843
-#define _gloffset_VertexAttribI4bvEXT 844
-#define _gloffset_VertexAttribI4iEXT 845
-#define _gloffset_VertexAttribI4ivEXT 846
-#define _gloffset_VertexAttribI4svEXT 847
-#define _gloffset_VertexAttribI4ubvEXT 848
-#define _gloffset_VertexAttribI4uiEXT 849
-#define _gloffset_VertexAttribI4uivEXT 850
-#define _gloffset_VertexAttribI4usvEXT 851
-#define _gloffset_VertexAttribIPointerEXT 852
-#define _gloffset_FramebufferTextureLayerEXT 853
-#define _gloffset_ColorMaskIndexedEXT 854
-#define _gloffset_DisableIndexedEXT 855
-#define _gloffset_EnableIndexedEXT 856
-#define _gloffset_GetBooleanIndexedvEXT 857
-#define _gloffset_GetIntegerIndexedvEXT 858
-#define _gloffset_IsEnabledIndexedEXT 859
-#define _gloffset_ClearColorIiEXT 860
-#define _gloffset_ClearColorIuiEXT 861
-#define _gloffset_GetTexParameterIivEXT 862
-#define _gloffset_GetTexParameterIuivEXT 863
-#define _gloffset_TexParameterIivEXT 864
-#define _gloffset_TexParameterIuivEXT 865
-#define _gloffset_BeginConditionalRenderNV 866
-#define _gloffset_EndConditionalRenderNV 867
-#define _gloffset_BeginTransformFeedbackEXT 868
-#define _gloffset_BindBufferBaseEXT 869
-#define _gloffset_BindBufferOffsetEXT 870
-#define _gloffset_BindBufferRangeEXT 871
-#define _gloffset_EndTransformFeedbackEXT 872
-#define _gloffset_GetTransformFeedbackVaryingEXT 873
-#define _gloffset_TransformFeedbackVaryingsEXT 874
-#define _gloffset_ProvokingVertexEXT 875
-#define _gloffset_GetTexParameterPointervAPPLE 876
-#define _gloffset_TextureRangeAPPLE 877
-#define _gloffset_GetObjectParameterivAPPLE 878
-#define _gloffset_ObjectPurgeableAPPLE 879
-#define _gloffset_ObjectUnpurgeableAPPLE 880
-#define _gloffset_ActiveProgramEXT 881
-#define _gloffset_CreateShaderProgramEXT 882
-#define _gloffset_UseShaderProgramEXT 883
-#define _gloffset_TextureBarrierNV 884
-#define _gloffset_StencilFuncSeparateATI 885
-#define _gloffset_ProgramEnvParameters4fvEXT 886
-#define _gloffset_ProgramLocalParameters4fvEXT 887
-#define _gloffset_GetQueryObjecti64vEXT 888
-#define _gloffset_GetQueryObjectui64vEXT 889
-#define _gloffset_EGLImageTargetRenderbufferStorageOES 890
-#define _gloffset_EGLImageTargetTexture2DOES 891
+#define _gloffset_ClampColorARB 572
+#define _gloffset_DrawArraysInstancedARB 573
+#define _gloffset_DrawElementsInstancedARB 574
+#define _gloffset_RenderbufferStorageMultisample 575
+#define _gloffset_FramebufferTextureARB 576
+#define _gloffset_FramebufferTextureFaceARB 577
+#define _gloffset_ProgramParameteriARB 578
+#define _gloffset_VertexAttribDivisorARB 579
+#define _gloffset_FlushMappedBufferRange 580
+#define _gloffset_MapBufferRange 581
+#define _gloffset_TexBufferARB 582
+#define _gloffset_BindVertexArray 583
+#define _gloffset_GenVertexArrays 584
+#define _gloffset_CopyBufferSubData 585
+#define _gloffset_ClientWaitSync 586
+#define _gloffset_DeleteSync 587
+#define _gloffset_FenceSync 588
+#define _gloffset_GetInteger64v 589
+#define _gloffset_GetSynciv 590
+#define _gloffset_IsSync 591
+#define _gloffset_WaitSync 592
+#define _gloffset_DrawElementsBaseVertex 593
+#define _gloffset_DrawRangeElementsBaseVertex 594
+#define _gloffset_MultiDrawElementsBaseVertex 595
+#define _gloffset_BlendEquationSeparateiARB 596
+#define _gloffset_BlendEquationiARB 597
+#define _gloffset_BlendFuncSeparateiARB 598
+#define _gloffset_BlendFunciARB 599
+#define _gloffset_BindSampler 600
+#define _gloffset_DeleteSamplers 601
+#define _gloffset_GenSamplers 602
+#define _gloffset_GetSamplerParameterIiv 603
+#define _gloffset_GetSamplerParameterIuiv 604
+#define _gloffset_GetSamplerParameterfv 605
+#define _gloffset_GetSamplerParameteriv 606
+#define _gloffset_IsSampler 607
+#define _gloffset_SamplerParameterIiv 608
+#define _gloffset_SamplerParameterIuiv 609
+#define _gloffset_SamplerParameterf 610
+#define _gloffset_SamplerParameterfv 611
+#define _gloffset_SamplerParameteri 612
+#define _gloffset_SamplerParameteriv 613
+#define _gloffset_BindTransformFeedback 614
+#define _gloffset_DeleteTransformFeedbacks 615
+#define _gloffset_DrawTransformFeedback 616
+#define _gloffset_GenTransformFeedbacks 617
+#define _gloffset_IsTransformFeedback 618
+#define _gloffset_PauseTransformFeedback 619
+#define _gloffset_ResumeTransformFeedback 620
+#define _gloffset_ClearDepthf 621
+#define _gloffset_DepthRangef 622
+#define _gloffset_GetShaderPrecisionFormat 623
+#define _gloffset_ReleaseShaderCompiler 624
+#define _gloffset_ShaderBinary 625
+#define _gloffset_PolygonOffsetEXT 626
+#define _gloffset_GetPixelTexGenParameterfvSGIS 627
+#define _gloffset_GetPixelTexGenParameterivSGIS 628
+#define _gloffset_PixelTexGenParameterfSGIS 629
+#define _gloffset_PixelTexGenParameterfvSGIS 630
+#define _gloffset_PixelTexGenParameteriSGIS 631
+#define _gloffset_PixelTexGenParameterivSGIS 632
+#define _gloffset_SampleMaskSGIS 633
+#define _gloffset_SamplePatternSGIS 634
+#define _gloffset_ColorPointerEXT 635
+#define _gloffset_EdgeFlagPointerEXT 636
+#define _gloffset_IndexPointerEXT 637
+#define _gloffset_NormalPointerEXT 638
+#define _gloffset_TexCoordPointerEXT 639
+#define _gloffset_VertexPointerEXT 640
+#define _gloffset_PointParameterfEXT 641
+#define _gloffset_PointParameterfvEXT 642
+#define _gloffset_LockArraysEXT 643
+#define _gloffset_UnlockArraysEXT 644
+#define _gloffset_SecondaryColor3bEXT 645
+#define _gloffset_SecondaryColor3bvEXT 646
+#define _gloffset_SecondaryColor3dEXT 647
+#define _gloffset_SecondaryColor3dvEXT 648
+#define _gloffset_SecondaryColor3fEXT 649
+#define _gloffset_SecondaryColor3fvEXT 650
+#define _gloffset_SecondaryColor3iEXT 651
+#define _gloffset_SecondaryColor3ivEXT 652
+#define _gloffset_SecondaryColor3sEXT 653
+#define _gloffset_SecondaryColor3svEXT 654
+#define _gloffset_SecondaryColor3ubEXT 655
+#define _gloffset_SecondaryColor3ubvEXT 656
+#define _gloffset_SecondaryColor3uiEXT 657
+#define _gloffset_SecondaryColor3uivEXT 658
+#define _gloffset_SecondaryColor3usEXT 659
+#define _gloffset_SecondaryColor3usvEXT 660
+#define _gloffset_SecondaryColorPointerEXT 661
+#define _gloffset_MultiDrawArraysEXT 662
+#define _gloffset_MultiDrawElementsEXT 663
+#define _gloffset_FogCoordPointerEXT 664
+#define _gloffset_FogCoorddEXT 665
+#define _gloffset_FogCoorddvEXT 666
+#define _gloffset_FogCoordfEXT 667
+#define _gloffset_FogCoordfvEXT 668
+#define _gloffset_PixelTexGenSGIX 669
+#define _gloffset_BlendFuncSeparateEXT 670
+#define _gloffset_FlushVertexArrayRangeNV 671
+#define _gloffset_VertexArrayRangeNV 672
+#define _gloffset_CombinerInputNV 673
+#define _gloffset_CombinerOutputNV 674
+#define _gloffset_CombinerParameterfNV 675
+#define _gloffset_CombinerParameterfvNV 676
+#define _gloffset_CombinerParameteriNV 677
+#define _gloffset_CombinerParameterivNV 678
+#define _gloffset_FinalCombinerInputNV 679
+#define _gloffset_GetCombinerInputParameterfvNV 680
+#define _gloffset_GetCombinerInputParameterivNV 681
+#define _gloffset_GetCombinerOutputParameterfvNV 682
+#define _gloffset_GetCombinerOutputParameterivNV 683
+#define _gloffset_GetFinalCombinerInputParameterfvNV 684
+#define _gloffset_GetFinalCombinerInputParameterivNV 685
+#define _gloffset_ResizeBuffersMESA 686
+#define _gloffset_WindowPos2dMESA 687
+#define _gloffset_WindowPos2dvMESA 688
+#define _gloffset_WindowPos2fMESA 689
+#define _gloffset_WindowPos2fvMESA 690
+#define _gloffset_WindowPos2iMESA 691
+#define _gloffset_WindowPos2ivMESA 692
+#define _gloffset_WindowPos2sMESA 693
+#define _gloffset_WindowPos2svMESA 694
+#define _gloffset_WindowPos3dMESA 695
+#define _gloffset_WindowPos3dvMESA 696
+#define _gloffset_WindowPos3fMESA 697
+#define _gloffset_WindowPos3fvMESA 698
+#define _gloffset_WindowPos3iMESA 699
+#define _gloffset_WindowPos3ivMESA 700
+#define _gloffset_WindowPos3sMESA 701
+#define _gloffset_WindowPos3svMESA 702
+#define _gloffset_WindowPos4dMESA 703
+#define _gloffset_WindowPos4dvMESA 704
+#define _gloffset_WindowPos4fMESA 705
+#define _gloffset_WindowPos4fvMESA 706
+#define _gloffset_WindowPos4iMESA 707
+#define _gloffset_WindowPos4ivMESA 708
+#define _gloffset_WindowPos4sMESA 709
+#define _gloffset_WindowPos4svMESA 710
+#define _gloffset_MultiModeDrawArraysIBM 711
+#define _gloffset_MultiModeDrawElementsIBM 712
+#define _gloffset_DeleteFencesNV 713
+#define _gloffset_FinishFenceNV 714
+#define _gloffset_GenFencesNV 715
+#define _gloffset_GetFenceivNV 716
+#define _gloffset_IsFenceNV 717
+#define _gloffset_SetFenceNV 718
+#define _gloffset_TestFenceNV 719
+#define _gloffset_AreProgramsResidentNV 720
+#define _gloffset_BindProgramNV 721
+#define _gloffset_DeleteProgramsNV 722
+#define _gloffset_ExecuteProgramNV 723
+#define _gloffset_GenProgramsNV 724
+#define _gloffset_GetProgramParameterdvNV 725
+#define _gloffset_GetProgramParameterfvNV 726
+#define _gloffset_GetProgramStringNV 727
+#define _gloffset_GetProgramivNV 728
+#define _gloffset_GetTrackMatrixivNV 729
+#define _gloffset_GetVertexAttribPointervNV 730
+#define _gloffset_GetVertexAttribdvNV 731
+#define _gloffset_GetVertexAttribfvNV 732
+#define _gloffset_GetVertexAttribivNV 733
+#define _gloffset_IsProgramNV 734
+#define _gloffset_LoadProgramNV 735
+#define _gloffset_ProgramParameters4dvNV 736
+#define _gloffset_ProgramParameters4fvNV 737
+#define _gloffset_RequestResidentProgramsNV 738
+#define _gloffset_TrackMatrixNV 739
+#define _gloffset_VertexAttrib1dNV 740
+#define _gloffset_VertexAttrib1dvNV 741
+#define _gloffset_VertexAttrib1fNV 742
+#define _gloffset_VertexAttrib1fvNV 743
+#define _gloffset_VertexAttrib1sNV 744
+#define _gloffset_VertexAttrib1svNV 745
+#define _gloffset_VertexAttrib2dNV 746
+#define _gloffset_VertexAttrib2dvNV 747
+#define _gloffset_VertexAttrib2fNV 748
+#define _gloffset_VertexAttrib2fvNV 749
+#define _gloffset_VertexAttrib2sNV 750
+#define _gloffset_VertexAttrib2svNV 751
+#define _gloffset_VertexAttrib3dNV 752
+#define _gloffset_VertexAttrib3dvNV 753
+#define _gloffset_VertexAttrib3fNV 754
+#define _gloffset_VertexAttrib3fvNV 755
+#define _gloffset_VertexAttrib3sNV 756
+#define _gloffset_VertexAttrib3svNV 757
+#define _gloffset_VertexAttrib4dNV 758
+#define _gloffset_VertexAttrib4dvNV 759
+#define _gloffset_VertexAttrib4fNV 760
+#define _gloffset_VertexAttrib4fvNV 761
+#define _gloffset_VertexAttrib4sNV 762
+#define _gloffset_VertexAttrib4svNV 763
+#define _gloffset_VertexAttrib4ubNV 764
+#define _gloffset_VertexAttrib4ubvNV 765
+#define _gloffset_VertexAttribPointerNV 766
+#define _gloffset_VertexAttribs1dvNV 767
+#define _gloffset_VertexAttribs1fvNV 768
+#define _gloffset_VertexAttribs1svNV 769
+#define _gloffset_VertexAttribs2dvNV 770
+#define _gloffset_VertexAttribs2fvNV 771
+#define _gloffset_VertexAttribs2svNV 772
+#define _gloffset_VertexAttribs3dvNV 773
+#define _gloffset_VertexAttribs3fvNV 774
+#define _gloffset_VertexAttribs3svNV 775
+#define _gloffset_VertexAttribs4dvNV 776
+#define _gloffset_VertexAttribs4fvNV 777
+#define _gloffset_VertexAttribs4svNV 778
+#define _gloffset_VertexAttribs4ubvNV 779
+#define _gloffset_GetTexBumpParameterfvATI 780
+#define _gloffset_GetTexBumpParameterivATI 781
+#define _gloffset_TexBumpParameterfvATI 782
+#define _gloffset_TexBumpParameterivATI 783
+#define _gloffset_AlphaFragmentOp1ATI 784
+#define _gloffset_AlphaFragmentOp2ATI 785
+#define _gloffset_AlphaFragmentOp3ATI 786
+#define _gloffset_BeginFragmentShaderATI 787
+#define _gloffset_BindFragmentShaderATI 788
+#define _gloffset_ColorFragmentOp1ATI 789
+#define _gloffset_ColorFragmentOp2ATI 790
+#define _gloffset_ColorFragmentOp3ATI 791
+#define _gloffset_DeleteFragmentShaderATI 792
+#define _gloffset_EndFragmentShaderATI 793
+#define _gloffset_GenFragmentShadersATI 794
+#define _gloffset_PassTexCoordATI 795
+#define _gloffset_SampleMapATI 796
+#define _gloffset_SetFragmentShaderConstantATI 797
+#define _gloffset_PointParameteriNV 798
+#define _gloffset_PointParameterivNV 799
+#define _gloffset_ActiveStencilFaceEXT 800
+#define _gloffset_BindVertexArrayAPPLE 801
+#define _gloffset_DeleteVertexArraysAPPLE 802
+#define _gloffset_GenVertexArraysAPPLE 803
+#define _gloffset_IsVertexArrayAPPLE 804
+#define _gloffset_GetProgramNamedParameterdvNV 805
+#define _gloffset_GetProgramNamedParameterfvNV 806
+#define _gloffset_ProgramNamedParameter4dNV 807
+#define _gloffset_ProgramNamedParameter4dvNV 808
+#define _gloffset_ProgramNamedParameter4fNV 809
+#define _gloffset_ProgramNamedParameter4fvNV 810
+#define _gloffset_PrimitiveRestartIndexNV 811
+#define _gloffset_PrimitiveRestartNV 812
+#define _gloffset_DepthBoundsEXT 813
+#define _gloffset_BlendEquationSeparateEXT 814
+#define _gloffset_BindFramebufferEXT 815
+#define _gloffset_BindRenderbufferEXT 816
+#define _gloffset_CheckFramebufferStatusEXT 817
+#define _gloffset_DeleteFramebuffersEXT 818
+#define _gloffset_DeleteRenderbuffersEXT 819
+#define _gloffset_FramebufferRenderbufferEXT 820
+#define _gloffset_FramebufferTexture1DEXT 821
+#define _gloffset_FramebufferTexture2DEXT 822
+#define _gloffset_FramebufferTexture3DEXT 823
+#define _gloffset_GenFramebuffersEXT 824
+#define _gloffset_GenRenderbuffersEXT 825
+#define _gloffset_GenerateMipmapEXT 826
+#define _gloffset_GetFramebufferAttachmentParameterivEXT 827
+#define _gloffset_GetRenderbufferParameterivEXT 828
+#define _gloffset_IsFramebufferEXT 829
+#define _gloffset_IsRenderbufferEXT 830
+#define _gloffset_RenderbufferStorageEXT 831
+#define _gloffset_BlitFramebufferEXT 832
+#define _gloffset_BufferParameteriAPPLE 833
+#define _gloffset_FlushMappedBufferRangeAPPLE 834
+#define _gloffset_BindFragDataLocationEXT 835
+#define _gloffset_GetFragDataLocationEXT 836
+#define _gloffset_GetUniformuivEXT 837
+#define _gloffset_GetVertexAttribIivEXT 838
+#define _gloffset_GetVertexAttribIuivEXT 839
+#define _gloffset_Uniform1uiEXT 840
+#define _gloffset_Uniform1uivEXT 841
+#define _gloffset_Uniform2uiEXT 842
+#define _gloffset_Uniform2uivEXT 843
+#define _gloffset_Uniform3uiEXT 844
+#define _gloffset_Uniform3uivEXT 845
+#define _gloffset_Uniform4uiEXT 846
+#define _gloffset_Uniform4uivEXT 847
+#define _gloffset_VertexAttribI1iEXT 848
+#define _gloffset_VertexAttribI1ivEXT 849
+#define _gloffset_VertexAttribI1uiEXT 850
+#define _gloffset_VertexAttribI1uivEXT 851
+#define _gloffset_VertexAttribI2iEXT 852
+#define _gloffset_VertexAttribI2ivEXT 853
+#define _gloffset_VertexAttribI2uiEXT 854
+#define _gloffset_VertexAttribI2uivEXT 855
+#define _gloffset_VertexAttribI3iEXT 856
+#define _gloffset_VertexAttribI3ivEXT 857
+#define _gloffset_VertexAttribI3uiEXT 858
+#define _gloffset_VertexAttribI3uivEXT 859
+#define _gloffset_VertexAttribI4bvEXT 860
+#define _gloffset_VertexAttribI4iEXT 861
+#define _gloffset_VertexAttribI4ivEXT 862
+#define _gloffset_VertexAttribI4svEXT 863
+#define _gloffset_VertexAttribI4ubvEXT 864
+#define _gloffset_VertexAttribI4uiEXT 865
+#define _gloffset_VertexAttribI4uivEXT 866
+#define _gloffset_VertexAttribI4usvEXT 867
+#define _gloffset_VertexAttribIPointerEXT 868
+#define _gloffset_FramebufferTextureLayerEXT 869
+#define _gloffset_ColorMaskIndexedEXT 870
+#define _gloffset_DisableIndexedEXT 871
+#define _gloffset_EnableIndexedEXT 872
+#define _gloffset_GetBooleanIndexedvEXT 873
+#define _gloffset_GetIntegerIndexedvEXT 874
+#define _gloffset_IsEnabledIndexedEXT 875
+#define _gloffset_ClearColorIiEXT 876
+#define _gloffset_ClearColorIuiEXT 877
+#define _gloffset_GetTexParameterIivEXT 878
+#define _gloffset_GetTexParameterIuivEXT 879
+#define _gloffset_TexParameterIivEXT 880
+#define _gloffset_TexParameterIuivEXT 881
+#define _gloffset_BeginConditionalRenderNV 882
+#define _gloffset_EndConditionalRenderNV 883
+#define _gloffset_BeginTransformFeedbackEXT 884
+#define _gloffset_BindBufferBaseEXT 885
+#define _gloffset_BindBufferOffsetEXT 886
+#define _gloffset_BindBufferRangeEXT 887
+#define _gloffset_EndTransformFeedbackEXT 888
+#define _gloffset_GetTransformFeedbackVaryingEXT 889
+#define _gloffset_TransformFeedbackVaryingsEXT 890
+#define _gloffset_ProvokingVertexEXT 891
+#define _gloffset_GetTexParameterPointervAPPLE 892
+#define _gloffset_TextureRangeAPPLE 893
+#define _gloffset_GetObjectParameterivAPPLE 894
+#define _gloffset_ObjectPurgeableAPPLE 895
+#define _gloffset_ObjectUnpurgeableAPPLE 896
+#define _gloffset_ActiveProgramEXT 897
+#define _gloffset_CreateShaderProgramEXT 898
+#define _gloffset_UseShaderProgramEXT 899
+#define _gloffset_TextureBarrierNV 900
+#define _gloffset_StencilFuncSeparateATI 901
+#define _gloffset_ProgramEnvParameters4fvEXT 902
+#define _gloffset_ProgramLocalParameters4fvEXT 903
+#define _gloffset_GetQueryObjecti64vEXT 904
+#define _gloffset_GetQueryObjectui64vEXT 905
+#define _gloffset_EGLImageTargetRenderbufferStorageOES 906
+#define _gloffset_EGLImageTargetTexture2DOES 907
 
 #else /* !_GLAPI_USE_REMAP_TABLE */
 
-#define driDispatchRemapTable_size 484
+#define driDispatchRemapTable_size 500
 extern int driDispatchRemapTable[ driDispatchRemapTable_size ];
 
 #define AttachShader_remap_index 0
@@ -1126,326 +1142,342 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ];
 #define GetActiveAttribARB_remap_index 161
 #define GetAttribLocationARB_remap_index 162
 #define DrawBuffersARB_remap_index 163
-#define DrawArraysInstancedARB_remap_index 164
-#define DrawElementsInstancedARB_remap_index 165
-#define RenderbufferStorageMultisample_remap_index 166
-#define FramebufferTextureARB_remap_index 167
-#define FramebufferTextureFaceARB_remap_index 168
-#define ProgramParameteriARB_remap_index 169
-#define VertexAttribDivisorARB_remap_index 170
-#define FlushMappedBufferRange_remap_index 171
-#define MapBufferRange_remap_index 172
-#define BindVertexArray_remap_index 173
-#define GenVertexArrays_remap_index 174
-#define CopyBufferSubData_remap_index 175
-#define ClientWaitSync_remap_index 176
-#define DeleteSync_remap_index 177
-#define FenceSync_remap_index 178
-#define GetInteger64v_remap_index 179
-#define GetSynciv_remap_index 180
-#define IsSync_remap_index 181
-#define WaitSync_remap_index 182
-#define DrawElementsBaseVertex_remap_index 183
-#define DrawRangeElementsBaseVertex_remap_index 184
-#define MultiDrawElementsBaseVertex_remap_index 185
-#define BlendEquationSeparateiARB_remap_index 186
-#define BlendEquationiARB_remap_index 187
-#define BlendFuncSeparateiARB_remap_index 188
-#define BlendFunciARB_remap_index 189
-#define BindTransformFeedback_remap_index 190
-#define DeleteTransformFeedbacks_remap_index 191
-#define DrawTransformFeedback_remap_index 192
-#define GenTransformFeedbacks_remap_index 193
-#define IsTransformFeedback_remap_index 194
-#define PauseTransformFeedback_remap_index 195
-#define ResumeTransformFeedback_remap_index 196
-#define ClearDepthf_remap_index 197
-#define DepthRangef_remap_index 198
-#define GetShaderPrecisionFormat_remap_index 199
-#define ReleaseShaderCompiler_remap_index 200
-#define ShaderBinary_remap_index 201
-#define PolygonOffsetEXT_remap_index 202
-#define GetPixelTexGenParameterfvSGIS_remap_index 203
-#define GetPixelTexGenParameterivSGIS_remap_index 204
-#define PixelTexGenParameterfSGIS_remap_index 205
-#define PixelTexGenParameterfvSGIS_remap_index 206
-#define PixelTexGenParameteriSGIS_remap_index 207
-#define PixelTexGenParameterivSGIS_remap_index 208
-#define SampleMaskSGIS_remap_index 209
-#define SamplePatternSGIS_remap_index 210
-#define ColorPointerEXT_remap_index 211
-#define EdgeFlagPointerEXT_remap_index 212
-#define IndexPointerEXT_remap_index 213
-#define NormalPointerEXT_remap_index 214
-#define TexCoordPointerEXT_remap_index 215
-#define VertexPointerEXT_remap_index 216
-#define PointParameterfEXT_remap_index 217
-#define PointParameterfvEXT_remap_index 218
-#define LockArraysEXT_remap_index 219
-#define UnlockArraysEXT_remap_index 220
-#define SecondaryColor3bEXT_remap_index 221
-#define SecondaryColor3bvEXT_remap_index 222
-#define SecondaryColor3dEXT_remap_index 223
-#define SecondaryColor3dvEXT_remap_index 224
-#define SecondaryColor3fEXT_remap_index 225
-#define SecondaryColor3fvEXT_remap_index 226
-#define SecondaryColor3iEXT_remap_index 227
-#define SecondaryColor3ivEXT_remap_index 228
-#define SecondaryColor3sEXT_remap_index 229
-#define SecondaryColor3svEXT_remap_index 230
-#define SecondaryColor3ubEXT_remap_index 231
-#define SecondaryColor3ubvEXT_remap_index 232
-#define SecondaryColor3uiEXT_remap_index 233
-#define SecondaryColor3uivEXT_remap_index 234
-#define SecondaryColor3usEXT_remap_index 235
-#define SecondaryColor3usvEXT_remap_index 236
-#define SecondaryColorPointerEXT_remap_index 237
-#define MultiDrawArraysEXT_remap_index 238
-#define MultiDrawElementsEXT_remap_index 239
-#define FogCoordPointerEXT_remap_index 240
-#define FogCoorddEXT_remap_index 241
-#define FogCoorddvEXT_remap_index 242
-#define FogCoordfEXT_remap_index 243
-#define FogCoordfvEXT_remap_index 244
-#define PixelTexGenSGIX_remap_index 245
-#define BlendFuncSeparateEXT_remap_index 246
-#define FlushVertexArrayRangeNV_remap_index 247
-#define VertexArrayRangeNV_remap_index 248
-#define CombinerInputNV_remap_index 249
-#define CombinerOutputNV_remap_index 250
-#define CombinerParameterfNV_remap_index 251
-#define CombinerParameterfvNV_remap_index 252
-#define CombinerParameteriNV_remap_index 253
-#define CombinerParameterivNV_remap_index 254
-#define FinalCombinerInputNV_remap_index 255
-#define GetCombinerInputParameterfvNV_remap_index 256
-#define GetCombinerInputParameterivNV_remap_index 257
-#define GetCombinerOutputParameterfvNV_remap_index 258
-#define GetCombinerOutputParameterivNV_remap_index 259
-#define GetFinalCombinerInputParameterfvNV_remap_index 260
-#define GetFinalCombinerInputParameterivNV_remap_index 261
-#define ResizeBuffersMESA_remap_index 262
-#define WindowPos2dMESA_remap_index 263
-#define WindowPos2dvMESA_remap_index 264
-#define WindowPos2fMESA_remap_index 265
-#define WindowPos2fvMESA_remap_index 266
-#define WindowPos2iMESA_remap_index 267
-#define WindowPos2ivMESA_remap_index 268
-#define WindowPos2sMESA_remap_index 269
-#define WindowPos2svMESA_remap_index 270
-#define WindowPos3dMESA_remap_index 271
-#define WindowPos3dvMESA_remap_index 272
-#define WindowPos3fMESA_remap_index 273
-#define WindowPos3fvMESA_remap_index 274
-#define WindowPos3iMESA_remap_index 275
-#define WindowPos3ivMESA_remap_index 276
-#define WindowPos3sMESA_remap_index 277
-#define WindowPos3svMESA_remap_index 278
-#define WindowPos4dMESA_remap_index 279
-#define WindowPos4dvMESA_remap_index 280
-#define WindowPos4fMESA_remap_index 281
-#define WindowPos4fvMESA_remap_index 282
-#define WindowPos4iMESA_remap_index 283
-#define WindowPos4ivMESA_remap_index 284
-#define WindowPos4sMESA_remap_index 285
-#define WindowPos4svMESA_remap_index 286
-#define MultiModeDrawArraysIBM_remap_index 287
-#define MultiModeDrawElementsIBM_remap_index 288
-#define DeleteFencesNV_remap_index 289
-#define FinishFenceNV_remap_index 290
-#define GenFencesNV_remap_index 291
-#define GetFenceivNV_remap_index 292
-#define IsFenceNV_remap_index 293
-#define SetFenceNV_remap_index 294
-#define TestFenceNV_remap_index 295
-#define AreProgramsResidentNV_remap_index 296
-#define BindProgramNV_remap_index 297
-#define DeleteProgramsNV_remap_index 298
-#define ExecuteProgramNV_remap_index 299
-#define GenProgramsNV_remap_index 300
-#define GetProgramParameterdvNV_remap_index 301
-#define GetProgramParameterfvNV_remap_index 302
-#define GetProgramStringNV_remap_index 303
-#define GetProgramivNV_remap_index 304
-#define GetTrackMatrixivNV_remap_index 305
-#define GetVertexAttribPointervNV_remap_index 306
-#define GetVertexAttribdvNV_remap_index 307
-#define GetVertexAttribfvNV_remap_index 308
-#define GetVertexAttribivNV_remap_index 309
-#define IsProgramNV_remap_index 310
-#define LoadProgramNV_remap_index 311
-#define ProgramParameters4dvNV_remap_index 312
-#define ProgramParameters4fvNV_remap_index 313
-#define RequestResidentProgramsNV_remap_index 314
-#define TrackMatrixNV_remap_index 315
-#define VertexAttrib1dNV_remap_index 316
-#define VertexAttrib1dvNV_remap_index 317
-#define VertexAttrib1fNV_remap_index 318
-#define VertexAttrib1fvNV_remap_index 319
-#define VertexAttrib1sNV_remap_index 320
-#define VertexAttrib1svNV_remap_index 321
-#define VertexAttrib2dNV_remap_index 322
-#define VertexAttrib2dvNV_remap_index 323
-#define VertexAttrib2fNV_remap_index 324
-#define VertexAttrib2fvNV_remap_index 325
-#define VertexAttrib2sNV_remap_index 326
-#define VertexAttrib2svNV_remap_index 327
-#define VertexAttrib3dNV_remap_index 328
-#define VertexAttrib3dvNV_remap_index 329
-#define VertexAttrib3fNV_remap_index 330
-#define VertexAttrib3fvNV_remap_index 331
-#define VertexAttrib3sNV_remap_index 332
-#define VertexAttrib3svNV_remap_index 333
-#define VertexAttrib4dNV_remap_index 334
-#define VertexAttrib4dvNV_remap_index 335
-#define VertexAttrib4fNV_remap_index 336
-#define VertexAttrib4fvNV_remap_index 337
-#define VertexAttrib4sNV_remap_index 338
-#define VertexAttrib4svNV_remap_index 339
-#define VertexAttrib4ubNV_remap_index 340
-#define VertexAttrib4ubvNV_remap_index 341
-#define VertexAttribPointerNV_remap_index 342
-#define VertexAttribs1dvNV_remap_index 343
-#define VertexAttribs1fvNV_remap_index 344
-#define VertexAttribs1svNV_remap_index 345
-#define VertexAttribs2dvNV_remap_index 346
-#define VertexAttribs2fvNV_remap_index 347
-#define VertexAttribs2svNV_remap_index 348
-#define VertexAttribs3dvNV_remap_index 349
-#define VertexAttribs3fvNV_remap_index 350
-#define VertexAttribs3svNV_remap_index 351
-#define VertexAttribs4dvNV_remap_index 352
-#define VertexAttribs4fvNV_remap_index 353
-#define VertexAttribs4svNV_remap_index 354
-#define VertexAttribs4ubvNV_remap_index 355
-#define GetTexBumpParameterfvATI_remap_index 356
-#define GetTexBumpParameterivATI_remap_index 357
-#define TexBumpParameterfvATI_remap_index 358
-#define TexBumpParameterivATI_remap_index 359
-#define AlphaFragmentOp1ATI_remap_index 360
-#define AlphaFragmentOp2ATI_remap_index 361
-#define AlphaFragmentOp3ATI_remap_index 362
-#define BeginFragmentShaderATI_remap_index 363
-#define BindFragmentShaderATI_remap_index 364
-#define ColorFragmentOp1ATI_remap_index 365
-#define ColorFragmentOp2ATI_remap_index 366
-#define ColorFragmentOp3ATI_remap_index 367
-#define DeleteFragmentShaderATI_remap_index 368
-#define EndFragmentShaderATI_remap_index 369
-#define GenFragmentShadersATI_remap_index 370
-#define PassTexCoordATI_remap_index 371
-#define SampleMapATI_remap_index 372
-#define SetFragmentShaderConstantATI_remap_index 373
-#define PointParameteriNV_remap_index 374
-#define PointParameterivNV_remap_index 375
-#define ActiveStencilFaceEXT_remap_index 376
-#define BindVertexArrayAPPLE_remap_index 377
-#define DeleteVertexArraysAPPLE_remap_index 378
-#define GenVertexArraysAPPLE_remap_index 379
-#define IsVertexArrayAPPLE_remap_index 380
-#define GetProgramNamedParameterdvNV_remap_index 381
-#define GetProgramNamedParameterfvNV_remap_index 382
-#define ProgramNamedParameter4dNV_remap_index 383
-#define ProgramNamedParameter4dvNV_remap_index 384
-#define ProgramNamedParameter4fNV_remap_index 385
-#define ProgramNamedParameter4fvNV_remap_index 386
-#define PrimitiveRestartIndexNV_remap_index 387
-#define PrimitiveRestartNV_remap_index 388
-#define DepthBoundsEXT_remap_index 389
-#define BlendEquationSeparateEXT_remap_index 390
-#define BindFramebufferEXT_remap_index 391
-#define BindRenderbufferEXT_remap_index 392
-#define CheckFramebufferStatusEXT_remap_index 393
-#define DeleteFramebuffersEXT_remap_index 394
-#define DeleteRenderbuffersEXT_remap_index 395
-#define FramebufferRenderbufferEXT_remap_index 396
-#define FramebufferTexture1DEXT_remap_index 397
-#define FramebufferTexture2DEXT_remap_index 398
-#define FramebufferTexture3DEXT_remap_index 399
-#define GenFramebuffersEXT_remap_index 400
-#define GenRenderbuffersEXT_remap_index 401
-#define GenerateMipmapEXT_remap_index 402
-#define GetFramebufferAttachmentParameterivEXT_remap_index 403
-#define GetRenderbufferParameterivEXT_remap_index 404
-#define IsFramebufferEXT_remap_index 405
-#define IsRenderbufferEXT_remap_index 406
-#define RenderbufferStorageEXT_remap_index 407
-#define BlitFramebufferEXT_remap_index 408
-#define BufferParameteriAPPLE_remap_index 409
-#define FlushMappedBufferRangeAPPLE_remap_index 410
-#define BindFragDataLocationEXT_remap_index 411
-#define GetFragDataLocationEXT_remap_index 412
-#define GetUniformuivEXT_remap_index 413
-#define GetVertexAttribIivEXT_remap_index 414
-#define GetVertexAttribIuivEXT_remap_index 415
-#define Uniform1uiEXT_remap_index 416
-#define Uniform1uivEXT_remap_index 417
-#define Uniform2uiEXT_remap_index 418
-#define Uniform2uivEXT_remap_index 419
-#define Uniform3uiEXT_remap_index 420
-#define Uniform3uivEXT_remap_index 421
-#define Uniform4uiEXT_remap_index 422
-#define Uniform4uivEXT_remap_index 423
-#define VertexAttribI1iEXT_remap_index 424
-#define VertexAttribI1ivEXT_remap_index 425
-#define VertexAttribI1uiEXT_remap_index 426
-#define VertexAttribI1uivEXT_remap_index 427
-#define VertexAttribI2iEXT_remap_index 428
-#define VertexAttribI2ivEXT_remap_index 429
-#define VertexAttribI2uiEXT_remap_index 430
-#define VertexAttribI2uivEXT_remap_index 431
-#define VertexAttribI3iEXT_remap_index 432
-#define VertexAttribI3ivEXT_remap_index 433
-#define VertexAttribI3uiEXT_remap_index 434
-#define VertexAttribI3uivEXT_remap_index 435
-#define VertexAttribI4bvEXT_remap_index 436
-#define VertexAttribI4iEXT_remap_index 437
-#define VertexAttribI4ivEXT_remap_index 438
-#define VertexAttribI4svEXT_remap_index 439
-#define VertexAttribI4ubvEXT_remap_index 440
-#define VertexAttribI4uiEXT_remap_index 441
-#define VertexAttribI4uivEXT_remap_index 442
-#define VertexAttribI4usvEXT_remap_index 443
-#define VertexAttribIPointerEXT_remap_index 444
-#define FramebufferTextureLayerEXT_remap_index 445
-#define ColorMaskIndexedEXT_remap_index 446
-#define DisableIndexedEXT_remap_index 447
-#define EnableIndexedEXT_remap_index 448
-#define GetBooleanIndexedvEXT_remap_index 449
-#define GetIntegerIndexedvEXT_remap_index 450
-#define IsEnabledIndexedEXT_remap_index 451
-#define ClearColorIiEXT_remap_index 452
-#define ClearColorIuiEXT_remap_index 453
-#define GetTexParameterIivEXT_remap_index 454
-#define GetTexParameterIuivEXT_remap_index 455
-#define TexParameterIivEXT_remap_index 456
-#define TexParameterIuivEXT_remap_index 457
-#define BeginConditionalRenderNV_remap_index 458
-#define EndConditionalRenderNV_remap_index 459
-#define BeginTransformFeedbackEXT_remap_index 460
-#define BindBufferBaseEXT_remap_index 461
-#define BindBufferOffsetEXT_remap_index 462
-#define BindBufferRangeEXT_remap_index 463
-#define EndTransformFeedbackEXT_remap_index 464
-#define GetTransformFeedbackVaryingEXT_remap_index 465
-#define TransformFeedbackVaryingsEXT_remap_index 466
-#define ProvokingVertexEXT_remap_index 467
-#define GetTexParameterPointervAPPLE_remap_index 468
-#define TextureRangeAPPLE_remap_index 469
-#define GetObjectParameterivAPPLE_remap_index 470
-#define ObjectPurgeableAPPLE_remap_index 471
-#define ObjectUnpurgeableAPPLE_remap_index 472
-#define ActiveProgramEXT_remap_index 473
-#define CreateShaderProgramEXT_remap_index 474
-#define UseShaderProgramEXT_remap_index 475
-#define TextureBarrierNV_remap_index 476
-#define StencilFuncSeparateATI_remap_index 477
-#define ProgramEnvParameters4fvEXT_remap_index 478
-#define ProgramLocalParameters4fvEXT_remap_index 479
-#define GetQueryObjecti64vEXT_remap_index 480
-#define GetQueryObjectui64vEXT_remap_index 481
-#define EGLImageTargetRenderbufferStorageOES_remap_index 482
-#define EGLImageTargetTexture2DOES_remap_index 483
+#define ClampColorARB_remap_index 164
+#define DrawArraysInstancedARB_remap_index 165
+#define DrawElementsInstancedARB_remap_index 166
+#define RenderbufferStorageMultisample_remap_index 167
+#define FramebufferTextureARB_remap_index 168
+#define FramebufferTextureFaceARB_remap_index 169
+#define ProgramParameteriARB_remap_index 170
+#define VertexAttribDivisorARB_remap_index 171
+#define FlushMappedBufferRange_remap_index 172
+#define MapBufferRange_remap_index 173
+#define TexBufferARB_remap_index 174
+#define BindVertexArray_remap_index 175
+#define GenVertexArrays_remap_index 176
+#define CopyBufferSubData_remap_index 177
+#define ClientWaitSync_remap_index 178
+#define DeleteSync_remap_index 179
+#define FenceSync_remap_index 180
+#define GetInteger64v_remap_index 181
+#define GetSynciv_remap_index 182
+#define IsSync_remap_index 183
+#define WaitSync_remap_index 184
+#define DrawElementsBaseVertex_remap_index 185
+#define DrawRangeElementsBaseVertex_remap_index 186
+#define MultiDrawElementsBaseVertex_remap_index 187
+#define BlendEquationSeparateiARB_remap_index 188
+#define BlendEquationiARB_remap_index 189
+#define BlendFuncSeparateiARB_remap_index 190
+#define BlendFunciARB_remap_index 191
+#define BindSampler_remap_index 192
+#define DeleteSamplers_remap_index 193
+#define GenSamplers_remap_index 194
+#define GetSamplerParameterIiv_remap_index 195
+#define GetSamplerParameterIuiv_remap_index 196
+#define GetSamplerParameterfv_remap_index 197
+#define GetSamplerParameteriv_remap_index 198
+#define IsSampler_remap_index 199
+#define SamplerParameterIiv_remap_index 200
+#define SamplerParameterIuiv_remap_index 201
+#define SamplerParameterf_remap_index 202
+#define SamplerParameterfv_remap_index 203
+#define SamplerParameteri_remap_index 204
+#define SamplerParameteriv_remap_index 205
+#define BindTransformFeedback_remap_index 206
+#define DeleteTransformFeedbacks_remap_index 207
+#define DrawTransformFeedback_remap_index 208
+#define GenTransformFeedbacks_remap_index 209
+#define IsTransformFeedback_remap_index 210
+#define PauseTransformFeedback_remap_index 211
+#define ResumeTransformFeedback_remap_index 212
+#define ClearDepthf_remap_index 213
+#define DepthRangef_remap_index 214
+#define GetShaderPrecisionFormat_remap_index 215
+#define ReleaseShaderCompiler_remap_index 216
+#define ShaderBinary_remap_index 217
+#define PolygonOffsetEXT_remap_index 218
+#define GetPixelTexGenParameterfvSGIS_remap_index 219
+#define GetPixelTexGenParameterivSGIS_remap_index 220
+#define PixelTexGenParameterfSGIS_remap_index 221
+#define PixelTexGenParameterfvSGIS_remap_index 222
+#define PixelTexGenParameteriSGIS_remap_index 223
+#define PixelTexGenParameterivSGIS_remap_index 224
+#define SampleMaskSGIS_remap_index 225
+#define SamplePatternSGIS_remap_index 226
+#define ColorPointerEXT_remap_index 227
+#define EdgeFlagPointerEXT_remap_index 228
+#define IndexPointerEXT_remap_index 229
+#define NormalPointerEXT_remap_index 230
+#define TexCoordPointerEXT_remap_index 231
+#define VertexPointerEXT_remap_index 232
+#define PointParameterfEXT_remap_index 233
+#define PointParameterfvEXT_remap_index 234
+#define LockArraysEXT_remap_index 235
+#define UnlockArraysEXT_remap_index 236
+#define SecondaryColor3bEXT_remap_index 237
+#define SecondaryColor3bvEXT_remap_index 238
+#define SecondaryColor3dEXT_remap_index 239
+#define SecondaryColor3dvEXT_remap_index 240
+#define SecondaryColor3fEXT_remap_index 241
+#define SecondaryColor3fvEXT_remap_index 242
+#define SecondaryColor3iEXT_remap_index 243
+#define SecondaryColor3ivEXT_remap_index 244
+#define SecondaryColor3sEXT_remap_index 245
+#define SecondaryColor3svEXT_remap_index 246
+#define SecondaryColor3ubEXT_remap_index 247
+#define SecondaryColor3ubvEXT_remap_index 248
+#define SecondaryColor3uiEXT_remap_index 249
+#define SecondaryColor3uivEXT_remap_index 250
+#define SecondaryColor3usEXT_remap_index 251
+#define SecondaryColor3usvEXT_remap_index 252
+#define SecondaryColorPointerEXT_remap_index 253
+#define MultiDrawArraysEXT_remap_index 254
+#define MultiDrawElementsEXT_remap_index 255
+#define FogCoordPointerEXT_remap_index 256
+#define FogCoorddEXT_remap_index 257
+#define FogCoorddvEXT_remap_index 258
+#define FogCoordfEXT_remap_index 259
+#define FogCoordfvEXT_remap_index 260
+#define PixelTexGenSGIX_remap_index 261
+#define BlendFuncSeparateEXT_remap_index 262
+#define FlushVertexArrayRangeNV_remap_index 263
+#define VertexArrayRangeNV_remap_index 264
+#define CombinerInputNV_remap_index 265
+#define CombinerOutputNV_remap_index 266
+#define CombinerParameterfNV_remap_index 267
+#define CombinerParameterfvNV_remap_index 268
+#define CombinerParameteriNV_remap_index 269
+#define CombinerParameterivNV_remap_index 270
+#define FinalCombinerInputNV_remap_index 271
+#define GetCombinerInputParameterfvNV_remap_index 272
+#define GetCombinerInputParameterivNV_remap_index 273
+#define GetCombinerOutputParameterfvNV_remap_index 274
+#define GetCombinerOutputParameterivNV_remap_index 275
+#define GetFinalCombinerInputParameterfvNV_remap_index 276
+#define GetFinalCombinerInputParameterivNV_remap_index 277
+#define ResizeBuffersMESA_remap_index 278
+#define WindowPos2dMESA_remap_index 279
+#define WindowPos2dvMESA_remap_index 280
+#define WindowPos2fMESA_remap_index 281
+#define WindowPos2fvMESA_remap_index 282
+#define WindowPos2iMESA_remap_index 283
+#define WindowPos2ivMESA_remap_index 284
+#define WindowPos2sMESA_remap_index 285
+#define WindowPos2svMESA_remap_index 286
+#define WindowPos3dMESA_remap_index 287
+#define WindowPos3dvMESA_remap_index 288
+#define WindowPos3fMESA_remap_index 289
+#define WindowPos3fvMESA_remap_index 290
+#define WindowPos3iMESA_remap_index 291
+#define WindowPos3ivMESA_remap_index 292
+#define WindowPos3sMESA_remap_index 293
+#define WindowPos3svMESA_remap_index 294
+#define WindowPos4dMESA_remap_index 295
+#define WindowPos4dvMESA_remap_index 296
+#define WindowPos4fMESA_remap_index 297
+#define WindowPos4fvMESA_remap_index 298
+#define WindowPos4iMESA_remap_index 299
+#define WindowPos4ivMESA_remap_index 300
+#define WindowPos4sMESA_remap_index 301
+#define WindowPos4svMESA_remap_index 302
+#define MultiModeDrawArraysIBM_remap_index 303
+#define MultiModeDrawElementsIBM_remap_index 304
+#define DeleteFencesNV_remap_index 305
+#define FinishFenceNV_remap_index 306
+#define GenFencesNV_remap_index 307
+#define GetFenceivNV_remap_index 308
+#define IsFenceNV_remap_index 309
+#define SetFenceNV_remap_index 310
+#define TestFenceNV_remap_index 311
+#define AreProgramsResidentNV_remap_index 312
+#define BindProgramNV_remap_index 313
+#define DeleteProgramsNV_remap_index 314
+#define ExecuteProgramNV_remap_index 315
+#define GenProgramsNV_remap_index 316
+#define GetProgramParameterdvNV_remap_index 317
+#define GetProgramParameterfvNV_remap_index 318
+#define GetProgramStringNV_remap_index 319
+#define GetProgramivNV_remap_index 320
+#define GetTrackMatrixivNV_remap_index 321
+#define GetVertexAttribPointervNV_remap_index 322
+#define GetVertexAttribdvNV_remap_index 323
+#define GetVertexAttribfvNV_remap_index 324
+#define GetVertexAttribivNV_remap_index 325
+#define IsProgramNV_remap_index 326
+#define LoadProgramNV_remap_index 327
+#define ProgramParameters4dvNV_remap_index 328
+#define ProgramParameters4fvNV_remap_index 329
+#define RequestResidentProgramsNV_remap_index 330
+#define TrackMatrixNV_remap_index 331
+#define VertexAttrib1dNV_remap_index 332
+#define VertexAttrib1dvNV_remap_index 333
+#define VertexAttrib1fNV_remap_index 334
+#define VertexAttrib1fvNV_remap_index 335
+#define VertexAttrib1sNV_remap_index 336
+#define VertexAttrib1svNV_remap_index 337
+#define VertexAttrib2dNV_remap_index 338
+#define VertexAttrib2dvNV_remap_index 339
+#define VertexAttrib2fNV_remap_index 340
+#define VertexAttrib2fvNV_remap_index 341
+#define VertexAttrib2sNV_remap_index 342
+#define VertexAttrib2svNV_remap_index 343
+#define VertexAttrib3dNV_remap_index 344
+#define VertexAttrib3dvNV_remap_index 345
+#define VertexAttrib3fNV_remap_index 346
+#define VertexAttrib3fvNV_remap_index 347
+#define VertexAttrib3sNV_remap_index 348
+#define VertexAttrib3svNV_remap_index 349
+#define VertexAttrib4dNV_remap_index 350
+#define VertexAttrib4dvNV_remap_index 351
+#define VertexAttrib4fNV_remap_index 352
+#define VertexAttrib4fvNV_remap_index 353
+#define VertexAttrib4sNV_remap_index 354
+#define VertexAttrib4svNV_remap_index 355
+#define VertexAttrib4ubNV_remap_index 356
+#define VertexAttrib4ubvNV_remap_index 357
+#define VertexAttribPointerNV_remap_index 358
+#define VertexAttribs1dvNV_remap_index 359
+#define VertexAttribs1fvNV_remap_index 360
+#define VertexAttribs1svNV_remap_index 361
+#define VertexAttribs2dvNV_remap_index 362
+#define VertexAttribs2fvNV_remap_index 363
+#define VertexAttribs2svNV_remap_index 364
+#define VertexAttribs3dvNV_remap_index 365
+#define VertexAttribs3fvNV_remap_index 366
+#define VertexAttribs3svNV_remap_index 367
+#define VertexAttribs4dvNV_remap_index 368
+#define VertexAttribs4fvNV_remap_index 369
+#define VertexAttribs4svNV_remap_index 370
+#define VertexAttribs4ubvNV_remap_index 371
+#define GetTexBumpParameterfvATI_remap_index 372
+#define GetTexBumpParameterivATI_remap_index 373
+#define TexBumpParameterfvATI_remap_index 374
+#define TexBumpParameterivATI_remap_index 375
+#define AlphaFragmentOp1ATI_remap_index 376
+#define AlphaFragmentOp2ATI_remap_index 377
+#define AlphaFragmentOp3ATI_remap_index 378
+#define BeginFragmentShaderATI_remap_index 379
+#define BindFragmentShaderATI_remap_index 380
+#define ColorFragmentOp1ATI_remap_index 381
+#define ColorFragmentOp2ATI_remap_index 382
+#define ColorFragmentOp3ATI_remap_index 383
+#define DeleteFragmentShaderATI_remap_index 384
+#define EndFragmentShaderATI_remap_index 385
+#define GenFragmentShadersATI_remap_index 386
+#define PassTexCoordATI_remap_index 387
+#define SampleMapATI_remap_index 388
+#define SetFragmentShaderConstantATI_remap_index 389
+#define PointParameteriNV_remap_index 390
+#define PointParameterivNV_remap_index 391
+#define ActiveStencilFaceEXT_remap_index 392
+#define BindVertexArrayAPPLE_remap_index 393
+#define DeleteVertexArraysAPPLE_remap_index 394
+#define GenVertexArraysAPPLE_remap_index 395
+#define IsVertexArrayAPPLE_remap_index 396
+#define GetProgramNamedParameterdvNV_remap_index 397
+#define GetProgramNamedParameterfvNV_remap_index 398
+#define ProgramNamedParameter4dNV_remap_index 399
+#define ProgramNamedParameter4dvNV_remap_index 400
+#define ProgramNamedParameter4fNV_remap_index 401
+#define ProgramNamedParameter4fvNV_remap_index 402
+#define PrimitiveRestartIndexNV_remap_index 403
+#define PrimitiveRestartNV_remap_index 404
+#define DepthBoundsEXT_remap_index 405
+#define BlendEquationSeparateEXT_remap_index 406
+#define BindFramebufferEXT_remap_index 407
+#define BindRenderbufferEXT_remap_index 408
+#define CheckFramebufferStatusEXT_remap_index 409
+#define DeleteFramebuffersEXT_remap_index 410
+#define DeleteRenderbuffersEXT_remap_index 411
+#define FramebufferRenderbufferEXT_remap_index 412
+#define FramebufferTexture1DEXT_remap_index 413
+#define FramebufferTexture2DEXT_remap_index 414
+#define FramebufferTexture3DEXT_remap_index 415
+#define GenFramebuffersEXT_remap_index 416
+#define GenRenderbuffersEXT_remap_index 417
+#define GenerateMipmapEXT_remap_index 418
+#define GetFramebufferAttachmentParameterivEXT_remap_index 419
+#define GetRenderbufferParameterivEXT_remap_index 420
+#define IsFramebufferEXT_remap_index 421
+#define IsRenderbufferEXT_remap_index 422
+#define RenderbufferStorageEXT_remap_index 423
+#define BlitFramebufferEXT_remap_index 424
+#define BufferParameteriAPPLE_remap_index 425
+#define FlushMappedBufferRangeAPPLE_remap_index 426
+#define BindFragDataLocationEXT_remap_index 427
+#define GetFragDataLocationEXT_remap_index 428
+#define GetUniformuivEXT_remap_index 429
+#define GetVertexAttribIivEXT_remap_index 430
+#define GetVertexAttribIuivEXT_remap_index 431
+#define Uniform1uiEXT_remap_index 432
+#define Uniform1uivEXT_remap_index 433
+#define Uniform2uiEXT_remap_index 434
+#define Uniform2uivEXT_remap_index 435
+#define Uniform3uiEXT_remap_index 436
+#define Uniform3uivEXT_remap_index 437
+#define Uniform4uiEXT_remap_index 438
+#define Uniform4uivEXT_remap_index 439
+#define VertexAttribI1iEXT_remap_index 440
+#define VertexAttribI1ivEXT_remap_index 441
+#define VertexAttribI1uiEXT_remap_index 442
+#define VertexAttribI1uivEXT_remap_index 443
+#define VertexAttribI2iEXT_remap_index 444
+#define VertexAttribI2ivEXT_remap_index 445
+#define VertexAttribI2uiEXT_remap_index 446
+#define VertexAttribI2uivEXT_remap_index 447
+#define VertexAttribI3iEXT_remap_index 448
+#define VertexAttribI3ivEXT_remap_index 449
+#define VertexAttribI3uiEXT_remap_index 450
+#define VertexAttribI3uivEXT_remap_index 451
+#define VertexAttribI4bvEXT_remap_index 452
+#define VertexAttribI4iEXT_remap_index 453
+#define VertexAttribI4ivEXT_remap_index 454
+#define VertexAttribI4svEXT_remap_index 455
+#define VertexAttribI4ubvEXT_remap_index 456
+#define VertexAttribI4uiEXT_remap_index 457
+#define VertexAttribI4uivEXT_remap_index 458
+#define VertexAttribI4usvEXT_remap_index 459
+#define VertexAttribIPointerEXT_remap_index 460
+#define FramebufferTextureLayerEXT_remap_index 461
+#define ColorMaskIndexedEXT_remap_index 462
+#define DisableIndexedEXT_remap_index 463
+#define EnableIndexedEXT_remap_index 464
+#define GetBooleanIndexedvEXT_remap_index 465
+#define GetIntegerIndexedvEXT_remap_index 466
+#define IsEnabledIndexedEXT_remap_index 467
+#define ClearColorIiEXT_remap_index 468
+#define ClearColorIuiEXT_remap_index 469
+#define GetTexParameterIivEXT_remap_index 470
+#define GetTexParameterIuivEXT_remap_index 471
+#define TexParameterIivEXT_remap_index 472
+#define TexParameterIuivEXT_remap_index 473
+#define BeginConditionalRenderNV_remap_index 474
+#define EndConditionalRenderNV_remap_index 475
+#define BeginTransformFeedbackEXT_remap_index 476
+#define BindBufferBaseEXT_remap_index 477
+#define BindBufferOffsetEXT_remap_index 478
+#define BindBufferRangeEXT_remap_index 479
+#define EndTransformFeedbackEXT_remap_index 480
+#define GetTransformFeedbackVaryingEXT_remap_index 481
+#define TransformFeedbackVaryingsEXT_remap_index 482
+#define ProvokingVertexEXT_remap_index 483
+#define GetTexParameterPointervAPPLE_remap_index 484
+#define TextureRangeAPPLE_remap_index 485
+#define GetObjectParameterivAPPLE_remap_index 486
+#define ObjectPurgeableAPPLE_remap_index 487
+#define ObjectUnpurgeableAPPLE_remap_index 488
+#define ActiveProgramEXT_remap_index 489
+#define CreateShaderProgramEXT_remap_index 490
+#define UseShaderProgramEXT_remap_index 491
+#define TextureBarrierNV_remap_index 492
+#define StencilFuncSeparateATI_remap_index 493
+#define ProgramEnvParameters4fvEXT_remap_index 494
+#define ProgramLocalParameters4fvEXT_remap_index 495
+#define GetQueryObjecti64vEXT_remap_index 496
+#define GetQueryObjectui64vEXT_remap_index 497
+#define EGLImageTargetRenderbufferStorageOES_remap_index 498
+#define EGLImageTargetTexture2DOES_remap_index 499
 
 #define _gloffset_AttachShader driDispatchRemapTable[AttachShader_remap_index]
 #define _gloffset_CreateProgram driDispatchRemapTable[CreateProgram_remap_index]
@@ -1611,6 +1643,7 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ];
 #define _gloffset_GetActiveAttribARB driDispatchRemapTable[GetActiveAttribARB_remap_index]
 #define _gloffset_GetAttribLocationARB driDispatchRemapTable[GetAttribLocationARB_remap_index]
 #define _gloffset_DrawBuffersARB driDispatchRemapTable[DrawBuffersARB_remap_index]
+#define _gloffset_ClampColorARB driDispatchRemapTable[ClampColorARB_remap_index]
 #define _gloffset_DrawArraysInstancedARB driDispatchRemapTable[DrawArraysInstancedARB_remap_index]
 #define _gloffset_DrawElementsInstancedARB driDispatchRemapTable[DrawElementsInstancedARB_remap_index]
 #define _gloffset_RenderbufferStorageMultisample driDispatchRemapTable[RenderbufferStorageMultisample_remap_index]
@@ -1620,6 +1653,7 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ];
 #define _gloffset_VertexAttribDivisorARB driDispatchRemapTable[VertexAttribDivisorARB_remap_index]
 #define _gloffset_FlushMappedBufferRange driDispatchRemapTable[FlushMappedBufferRange_remap_index]
 #define _gloffset_MapBufferRange driDispatchRemapTable[MapBufferRange_remap_index]
+#define _gloffset_TexBufferARB driDispatchRemapTable[TexBufferARB_remap_index]
 #define _gloffset_BindVertexArray driDispatchRemapTable[BindVertexArray_remap_index]
 #define _gloffset_GenVertexArrays driDispatchRemapTable[GenVertexArrays_remap_index]
 #define _gloffset_CopyBufferSubData driDispatchRemapTable[CopyBufferSubData_remap_index]
@@ -1637,6 +1671,20 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ];
 #define _gloffset_BlendEquationiARB driDispatchRemapTable[BlendEquationiARB_remap_index]
 #define _gloffset_BlendFuncSeparateiARB driDispatchRemapTable[BlendFuncSeparateiARB_remap_index]
 #define _gloffset_BlendFunciARB driDispatchRemapTable[BlendFunciARB_remap_index]
+#define _gloffset_BindSampler driDispatchRemapTable[BindSampler_remap_index]
+#define _gloffset_DeleteSamplers driDispatchRemapTable[DeleteSamplers_remap_index]
+#define _gloffset_GenSamplers driDispatchRemapTable[GenSamplers_remap_index]
+#define _gloffset_GetSamplerParameterIiv driDispatchRemapTable[GetSamplerParameterIiv_remap_index]
+#define _gloffset_GetSamplerParameterIuiv driDispatchRemapTable[GetSamplerParameterIuiv_remap_index]
+#define _gloffset_GetSamplerParameterfv driDispatchRemapTable[GetSamplerParameterfv_remap_index]
+#define _gloffset_GetSamplerParameteriv driDispatchRemapTable[GetSamplerParameteriv_remap_index]
+#define _gloffset_IsSampler driDispatchRemapTable[IsSampler_remap_index]
+#define _gloffset_SamplerParameterIiv driDispatchRemapTable[SamplerParameterIiv_remap_index]
+#define _gloffset_SamplerParameterIuiv driDispatchRemapTable[SamplerParameterIuiv_remap_index]
+#define _gloffset_SamplerParameterf driDispatchRemapTable[SamplerParameterf_remap_index]
+#define _gloffset_SamplerParameterfv driDispatchRemapTable[SamplerParameterfv_remap_index]
+#define _gloffset_SamplerParameteri driDispatchRemapTable[SamplerParameteri_remap_index]
+#define _gloffset_SamplerParameteriv driDispatchRemapTable[SamplerParameteriv_remap_index]
 #define _gloffset_BindTransformFeedback driDispatchRemapTable[BindTransformFeedback_remap_index]
 #define _gloffset_DeleteTransformFeedbacks driDispatchRemapTable[DeleteTransformFeedbacks_remap_index]
 #define _gloffset_DrawTransformFeedback driDispatchRemapTable[DrawTransformFeedback_remap_index]
@@ -3227,7 +3275,7 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ];
 #define CALL_ClampColor(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum)), _gloffset_ClampColor, parameters)
 #define GET_ClampColor(disp) GET_by_offset(disp, _gloffset_ClampColor)
 #define SET_ClampColor(disp, fn) SET_by_offset(disp, _gloffset_ClampColor, fn)
-#define CALL_ClearBufferfi(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, const GLfloat, const GLint)), _gloffset_ClearBufferfi, parameters)
+#define CALL_ClearBufferfi(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLfloat, GLint)), _gloffset_ClearBufferfi, parameters)
 #define GET_ClearBufferfi(disp) GET_by_offset(disp, _gloffset_ClearBufferfi)
 #define SET_ClearBufferfi(disp, fn) SET_by_offset(disp, _gloffset_ClearBufferfi, fn)
 #define CALL_ClearBufferfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, const GLfloat *)), _gloffset_ClearBufferfv, parameters)
@@ -3650,6 +3698,9 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ];
 #define CALL_DrawBuffersARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLenum *)), _gloffset_DrawBuffersARB, parameters)
 #define GET_DrawBuffersARB(disp) GET_by_offset(disp, _gloffset_DrawBuffersARB)
 #define SET_DrawBuffersARB(disp, fn) SET_by_offset(disp, _gloffset_DrawBuffersARB, fn)
+#define CALL_ClampColorARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum)), _gloffset_ClampColorARB, parameters)
+#define GET_ClampColorARB(disp) GET_by_offset(disp, _gloffset_ClampColorARB)
+#define SET_ClampColorARB(disp, fn) SET_by_offset(disp, _gloffset_ClampColorARB, fn)
 #define CALL_DrawArraysInstancedARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLint, GLsizei, GLsizei)), _gloffset_DrawArraysInstancedARB, parameters)
 #define GET_DrawArraysInstancedARB(disp) GET_by_offset(disp, _gloffset_DrawArraysInstancedARB)
 #define SET_DrawArraysInstancedARB(disp, fn) SET_by_offset(disp, _gloffset_DrawArraysInstancedARB, fn)
@@ -3677,6 +3728,9 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ];
 #define CALL_MapBufferRange(disp, parameters) CALL_by_offset(disp, (GLvoid * (GLAPIENTRYP)(GLenum, GLintptr, GLsizeiptr, GLbitfield)), _gloffset_MapBufferRange, parameters)
 #define GET_MapBufferRange(disp) GET_by_offset(disp, _gloffset_MapBufferRange)
 #define SET_MapBufferRange(disp, fn) SET_by_offset(disp, _gloffset_MapBufferRange, fn)
+#define CALL_TexBufferARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLenum, GLuint)), _gloffset_TexBufferARB, parameters)
+#define GET_TexBufferARB(disp) GET_by_offset(disp, _gloffset_TexBufferARB)
+#define SET_TexBufferARB(disp, fn) SET_by_offset(disp, _gloffset_TexBufferARB, fn)
 #define CALL_BindVertexArray(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint)), _gloffset_BindVertexArray, parameters)
 #define GET_BindVertexArray(disp) GET_by_offset(disp, _gloffset_BindVertexArray)
 #define SET_BindVertexArray(disp, fn) SET_by_offset(disp, _gloffset_BindVertexArray, fn)
@@ -3728,6 +3782,48 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ];
 #define CALL_BlendFunciARB(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLenum)), _gloffset_BlendFunciARB, parameters)
 #define GET_BlendFunciARB(disp) GET_by_offset(disp, _gloffset_BlendFunciARB)
 #define SET_BlendFunciARB(disp, fn) SET_by_offset(disp, _gloffset_BlendFunciARB, fn)
+#define CALL_BindSampler(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLuint)), _gloffset_BindSampler, parameters)
+#define GET_BindSampler(disp) GET_by_offset(disp, _gloffset_BindSampler)
+#define SET_BindSampler(disp, fn) SET_by_offset(disp, _gloffset_BindSampler, fn)
+#define CALL_DeleteSamplers(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, const GLuint *)), _gloffset_DeleteSamplers, parameters)
+#define GET_DeleteSamplers(disp) GET_by_offset(disp, _gloffset_DeleteSamplers)
+#define SET_DeleteSamplers(disp, fn) SET_by_offset(disp, _gloffset_DeleteSamplers, fn)
+#define CALL_GenSamplers(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLsizei, GLuint *)), _gloffset_GenSamplers, parameters)
+#define GET_GenSamplers(disp) GET_by_offset(disp, _gloffset_GenSamplers)
+#define SET_GenSamplers(disp, fn) SET_by_offset(disp, _gloffset_GenSamplers, fn)
+#define CALL_GetSamplerParameterIiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), _gloffset_GetSamplerParameterIiv, parameters)
+#define GET_GetSamplerParameterIiv(disp) GET_by_offset(disp, _gloffset_GetSamplerParameterIiv)
+#define SET_GetSamplerParameterIiv(disp, fn) SET_by_offset(disp, _gloffset_GetSamplerParameterIiv, fn)
+#define CALL_GetSamplerParameterIuiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLuint *)), _gloffset_GetSamplerParameterIuiv, parameters)
+#define GET_GetSamplerParameterIuiv(disp) GET_by_offset(disp, _gloffset_GetSamplerParameterIuiv)
+#define SET_GetSamplerParameterIuiv(disp, fn) SET_by_offset(disp, _gloffset_GetSamplerParameterIuiv, fn)
+#define CALL_GetSamplerParameterfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLfloat *)), _gloffset_GetSamplerParameterfv, parameters)
+#define GET_GetSamplerParameterfv(disp) GET_by_offset(disp, _gloffset_GetSamplerParameterfv)
+#define SET_GetSamplerParameterfv(disp, fn) SET_by_offset(disp, _gloffset_GetSamplerParameterfv, fn)
+#define CALL_GetSamplerParameteriv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint *)), _gloffset_GetSamplerParameteriv, parameters)
+#define GET_GetSamplerParameteriv(disp) GET_by_offset(disp, _gloffset_GetSamplerParameteriv)
+#define SET_GetSamplerParameteriv(disp, fn) SET_by_offset(disp, _gloffset_GetSamplerParameteriv, fn)
+#define CALL_IsSampler(disp, parameters) CALL_by_offset(disp, (GLboolean (GLAPIENTRYP)(GLuint)), _gloffset_IsSampler, parameters)
+#define GET_IsSampler(disp) GET_by_offset(disp, _gloffset_IsSampler)
+#define SET_IsSampler(disp, fn) SET_by_offset(disp, _gloffset_IsSampler, fn)
+#define CALL_SamplerParameterIiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, const GLint *)), _gloffset_SamplerParameterIiv, parameters)
+#define GET_SamplerParameterIiv(disp) GET_by_offset(disp, _gloffset_SamplerParameterIiv)
+#define SET_SamplerParameterIiv(disp, fn) SET_by_offset(disp, _gloffset_SamplerParameterIiv, fn)
+#define CALL_SamplerParameterIuiv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, const GLuint *)), _gloffset_SamplerParameterIuiv, parameters)
+#define GET_SamplerParameterIuiv(disp) GET_by_offset(disp, _gloffset_SamplerParameterIuiv)
+#define SET_SamplerParameterIuiv(disp, fn) SET_by_offset(disp, _gloffset_SamplerParameterIuiv, fn)
+#define CALL_SamplerParameterf(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLfloat)), _gloffset_SamplerParameterf, parameters)
+#define GET_SamplerParameterf(disp) GET_by_offset(disp, _gloffset_SamplerParameterf)
+#define SET_SamplerParameterf(disp, fn) SET_by_offset(disp, _gloffset_SamplerParameterf, fn)
+#define CALL_SamplerParameterfv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, const GLfloat *)), _gloffset_SamplerParameterfv, parameters)
+#define GET_SamplerParameterfv(disp) GET_by_offset(disp, _gloffset_SamplerParameterfv)
+#define SET_SamplerParameterfv(disp, fn) SET_by_offset(disp, _gloffset_SamplerParameterfv, fn)
+#define CALL_SamplerParameteri(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, GLint)), _gloffset_SamplerParameteri, parameters)
+#define GET_SamplerParameteri(disp) GET_by_offset(disp, _gloffset_SamplerParameteri)
+#define SET_SamplerParameteri(disp, fn) SET_by_offset(disp, _gloffset_SamplerParameteri, fn)
+#define CALL_SamplerParameteriv(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLuint, GLenum, const GLint *)), _gloffset_SamplerParameteriv, parameters)
+#define GET_SamplerParameteriv(disp) GET_by_offset(disp, _gloffset_SamplerParameteriv)
+#define SET_SamplerParameteriv(disp, fn) SET_by_offset(disp, _gloffset_SamplerParameteriv, fn)
 #define CALL_BindTransformFeedback(disp, parameters) CALL_by_offset(disp, (void (GLAPIENTRYP)(GLenum, GLuint)), _gloffset_BindTransformFeedback, parameters)
 #define GET_BindTransformFeedback(disp) GET_by_offset(disp, _gloffset_BindTransformFeedback)
 #define SET_BindTransformFeedback(disp, fn) SET_by_offset(disp, _gloffset_BindTransformFeedback, fn)
index bbde3800e8c9b5df4d8590508251db3dc503c3b0..28841c251020e28a30965d9446474c823466cee4 100644 (file)
@@ -748,9 +748,6 @@ _mesa_is_color_format(GLenum format)
       case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT:
       case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT:
       case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI:
-      /* signed, normalized texture formats */
-      case GL_RGBA_SNORM:
-      case GL_RGBA8_SNORM:
       /* generic integer formats */
       case GL_RED_INTEGER_EXT:
       case GL_GREEN_INTEGER_EXT:
@@ -799,6 +796,31 @@ _mesa_is_color_format(GLenum format)
       case GL_INTENSITY8I_EXT:
       case GL_LUMINANCE8I_EXT:
       case GL_LUMINANCE_ALPHA8I_EXT:
+      /* signed, normalized texture formats */
+      case GL_RED_SNORM:
+      case GL_R8_SNORM:
+      case GL_R16_SNORM:
+      case GL_RG_SNORM:
+      case GL_RG8_SNORM:
+      case GL_RG16_SNORM:
+      case GL_RGB_SNORM:
+      case GL_RGB8_SNORM:
+      case GL_RGB16_SNORM:
+      case GL_RGBA_SNORM:
+      case GL_RGBA8_SNORM:
+      case GL_RGBA16_SNORM:
+      case GL_ALPHA_SNORM:
+      case GL_ALPHA8_SNORM:
+      case GL_ALPHA16_SNORM:
+      case GL_LUMINANCE_SNORM:
+      case GL_LUMINANCE8_SNORM:
+      case GL_LUMINANCE16_SNORM:
+      case GL_LUMINANCE_ALPHA_SNORM:
+      case GL_LUMINANCE8_ALPHA8_SNORM:
+      case GL_LUMINANCE16_ALPHA16_SNORM:
+      case GL_INTENSITY_SNORM:
+      case GL_INTENSITY8_SNORM:
+      case GL_INTENSITY16_SNORM:
          return GL_TRUE;
       case GL_YCBCR_MESA:  /* not considered to be RGB */
          /* fall-through */
index b2ec0ba9b73fbf91c4ade70ec558eac29f0ffbf7..86a58cc6b4303fb29b33e716a5cb37c66dafa83c 100644 (file)
@@ -58,8 +58,7 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256];
 #define BYTE_TO_FLOAT_TEX(B)    ((B) == -128 ? -1.0F : (B) * (1.0F/127.0F))
 
 /** Convert GLfloat in [-1.0,1.0] to GLbyte in [-128,127], texture/fb data */
-#define FLOAT_TO_BYTE_TEX(X)    ( (GLint) (127.0F * (X)) )
-
+#define FLOAT_TO_BYTE_TEX(X)    CLAMP( (GLint) (127.0F * (X)), -128, 127 )
 
 /** Convert GLushort in [0,65535] to GLfloat in [0.0,1.0] */
 #define USHORT_TO_FLOAT(S)  ((GLfloat) (S) * (1.0F / 65535.0F))
index 76c7e1c9d1b44b2d8d94571e40e57ac48b04dc32..56973661cea8f0d37ba4ef28f853e3270258c319 100644 (file)
@@ -140,8 +140,8 @@ _mesa_Ortho( GLdouble left, GLdouble right,
  * \sa glMatrixMode().
  *
  * Flushes the vertices, validates the parameter and updates
- * __struct gl_contextRec::CurrentStack and gl_transform_attrib::MatrixMode with the
- * specified matrix stack.
+ * __struct gl_contextRec::CurrentStack and gl_transform_attrib::MatrixMode
+ * with the specified matrix stack.
  */
 void GLAPIENTRY
 _mesa_MatrixMode( GLenum mode )
@@ -170,7 +170,8 @@ _mesa_MatrixMode( GLenum mode )
        */
 #if 0
       if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureCoordUnits) {
-         _mesa_error(ctx, GL_INVALID_OPERATION, "glMatrixMode(invalid tex unit %d)",
+         _mesa_error(ctx, GL_INVALID_OPERATION,
+                     "glMatrixMode(invalid tex unit %d)",
                      ctx->Texture.CurrentUnit);
          return;
       }
@@ -232,8 +233,8 @@ _mesa_MatrixMode( GLenum mode )
  * \sa glPushMatrix().
  * 
  * Verifies the current matrix stack is not full, and duplicates the top-most
- * matrix in the stack. Marks __struct gl_contextRec::NewState with the stack dirty
- * flag.
+ * matrix in the stack.
+ * Marks __struct gl_contextRec::NewState with the stack dirty flag.
  */
 void GLAPIENTRY
 _mesa_PushMatrix( void )
@@ -272,8 +273,8 @@ _mesa_PushMatrix( void )
  * \sa glPopMatrix().
  * 
  * Flushes the vertices, verifies the current matrix stack is not empty, and
- * moves the stack head down. Marks __struct gl_contextRec::NewState with the dirty
- * stack flag.
+ * moves the stack head down.
+ * Marks __struct gl_contextRec::NewState with the dirty stack flag.
  */
 void GLAPIENTRY
 _mesa_PopMatrix( void )
@@ -309,9 +310,9 @@ _mesa_PopMatrix( void )
  *
  * \sa glLoadIdentity().
  *
- * Flushes the vertices and calls _math_matrix_set_identity() with the top-most
- * matrix in the current stack. Marks __struct gl_contextRec::NewState with the stack
- * dirty flag.
+ * Flushes the vertices and calls _math_matrix_set_identity() with the
+ * top-most matrix in the current stack.
+ * Marks __struct gl_contextRec::NewState with the stack dirty flag.
  */
 void GLAPIENTRY
 _mesa_LoadIdentity( void )
@@ -334,9 +335,9 @@ _mesa_LoadIdentity( void )
  *
  * \sa glLoadMatrixf().
  *
- * Flushes the vertices and calls _math_matrix_loadf() with the top-most matrix
- * in the current stack and the given matrix. Marks __struct gl_contextRec::NewState
- * with the dirty stack flag.
+ * Flushes the vertices and calls _math_matrix_loadf() with the top-most
+ * matrix in the current stack and the given matrix.
+ * Marks __struct gl_contextRec::NewState with the dirty stack flag.
  */
 void GLAPIENTRY
 _mesa_LoadMatrixf( const GLfloat *m )
@@ -560,8 +561,8 @@ _mesa_MultTransposeMatrixdARB( const GLdouble *m )
  * Calls _math_matrix_analyse() with the top-matrix of the projection matrix
  * stack, and recomputes user clip positions if necessary.
  * 
- * \note This routine references __struct gl_contextRec::Tranform attribute values to
- * compute userclip positions in clip space, but is only called on
+ * \note This routine references __struct gl_contextRec::Tranform attribute
+ * values to compute userclip positions in clip space, but is only called on
  * _NEW_PROJECTION.  The _mesa_ClipPlane() function keeps these values up to
  * date across changes to the __struct gl_contextRec::Transform attributes.
  */
@@ -594,8 +595,8 @@ update_projection( struct gl_context *ctx )
  * \param ctx GL context.
  *
  * Multiplies the top matrices of the projection and model view stacks into
- * __struct gl_contextRec::_ModelProjectMatrix via _math_matrix_mul_matrix() and
- * analyzes the resulting matrix via _math_matrix_analyse().
+ * __struct gl_contextRec::_ModelProjectMatrix via _math_matrix_mul_matrix()
+ * and analyzes the resulting matrix via _math_matrix_analyse().
  */
 static void
 calculate_model_project_matrix( struct gl_context *ctx )
@@ -624,7 +625,7 @@ void _mesa_update_modelview_project( struct gl_context *ctx, GLuint new_state )
    if (new_state & _NEW_MODELVIEW) {
       _math_matrix_analyse( ctx->ModelviewMatrixStack.Top );
     
-      /* Bring cull position uptodate.
+      /* Bring cull position up to date.
        */
       TRANSFORM_POINT3( ctx->Transform.CullObjPos, 
                        ctx->ModelviewMatrixStack.Top->inv,
@@ -635,7 +636,7 @@ void _mesa_update_modelview_project( struct gl_context *ctx, GLuint new_state )
    if (new_state & _NEW_PROJECTION)
       update_projection( ctx );
 
-   /* Keep ModelviewProject uptodate always to allow tnl
+   /* Keep ModelviewProject up to date always to allow tnl
     * implementations that go model->clip even when eye is required.
     */
    calculate_model_project_matrix(ctx);
index 1b39f5fdd36475088e03868979ca1e6c904aaab4..33db5081419bbc8d7a0b2b2392d3408ae56978e6 100644 (file)
 #define FEATURE_ARB_framebuffer_object    (FEATURE_GL && FEATURE_EXT_framebuffer_object)
 #define FEATURE_ARB_map_buffer_range      FEATURE_GL
 #define FEATURE_ARB_pixel_buffer_object   (FEATURE_GL && FEATURE_EXT_pixel_buffer_object)
+#define FEATURE_ARB_sampler_objects       FEATURE_GL
 #define FEATURE_ARB_sync                  FEATURE_GL
 #define FEATURE_ARB_vertex_buffer_object  1
 
index 831774fa4b1d5b2087c446631e5012f65f52bbc8..160ae9d26221970f41073579559a3415d108d318 100644 (file)
@@ -691,7 +691,8 @@ struct gl_accum_attrib
 struct gl_colorbuffer_attrib
 {
    GLuint ClearIndex;                  /**< Index to use for glClear */
-   GLclampf ClearColor[4];             /**< Color to use for glClear */
+   GLfloat ClearColorUnclamped[4];              /**< Color to use for glClear*/
+   GLclampf ClearColor[4];               /**< Color to use for glClear */
 
    GLuint IndexMask;                   /**< Color index write mask */
    GLubyte ColorMask[MAX_DRAW_BUFFERS][4];/**< Each flag is 0xff or 0x0 */
@@ -704,6 +705,7 @@ struct gl_colorbuffer_attrib
    /*@{*/
    GLboolean AlphaEnabled;             /**< Alpha test enabled flag */
    GLenum AlphaFunc;                   /**< Alpha test function */
+   GLfloat AlphaRefUnclamped;
    GLclampf AlphaRef;                  /**< Alpha reference value */
    /*@}*/
 
@@ -712,7 +714,14 @@ struct gl_colorbuffer_attrib
     */
    /*@{*/
    GLbitfield BlendEnabled;            /**< Per-buffer blend enable flags */
+
+   /* NOTE: this does _not_ depend on fragment clamping or any other clamping control,
+    * only on the fixed-pointness of the render target.
+    * The query does however depend on fragment color clamping.
+    */
+   GLfloat BlendColorUnclamped[4];               /**< Blending color */
    GLfloat BlendColor[4];              /**< Blending color */
+
    struct
    {
       GLenum SrcRGB;             /**< RGB blend source term */
@@ -741,7 +750,9 @@ struct gl_colorbuffer_attrib
    GLboolean DitherFlag;               /**< Dither enable flag */
 
    GLenum ClampFragmentColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */
+   GLboolean _ClampFragmentColor; /** < with GL_FIXED_ONLY_ARB resolved */
    GLenum ClampReadColor;     /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */
+   GLboolean _ClampReadColor;     /** < with GL_FIXED_ONLY_ARB resolved */
 
    GLboolean sRGBEnabled;      /**< Framebuffer sRGB blending/updating requested */
 };
@@ -840,6 +851,7 @@ struct gl_eval_attrib
 struct gl_fog_attrib
 {
    GLboolean Enabled;          /**< Fog enabled flag */
+   GLfloat ColorUnclamped[4];            /**< Fog color */
    GLfloat Color[4];           /**< Fog color */
    GLfloat Density;            /**< Density >= 0.0 */
    GLfloat Start;              /**< Start distance in eye coords */
@@ -921,6 +933,7 @@ struct gl_light_attrib
    GLbitfield ColorMaterialBitmask;    /**< bitmask formed from Face and Mode */
    GLboolean ColorMaterialEnabled;
    GLenum ClampVertexColor;
+   GLboolean _ClampVertexColor;
 
    struct gl_light EnabledList;         /**< List sentinel */
 
@@ -1126,6 +1139,7 @@ struct gl_stencil_attrib
  */
 typedef enum
 {
+   TEXTURE_BUFFER_INDEX,
    TEXTURE_2D_ARRAY_INDEX,
    TEXTURE_1D_ARRAY_INDEX,
    TEXTURE_CUBE_INDEX,
@@ -1142,6 +1156,7 @@ typedef enum
  * Used for Texture.Unit[]._ReallyEnabled flags.
  */
 /*@{*/
+#define TEXTURE_BUFFER_BIT   (1 << TEXTURE_BUFFER_INDEX)
 #define TEXTURE_2D_ARRAY_BIT (1 << TEXTURE_2D_ARRAY_INDEX)
 #define TEXTURE_1D_ARRAY_BIT (1 << TEXTURE_1D_ARRAY_INDEX)
 #define TEXTURE_CUBE_BIT     (1 << TEXTURE_CUBE_INDEX)
@@ -1290,37 +1305,58 @@ typedef enum
 
 
 /**
- * Texture object state.  Contains the array of mipmap images, border color,
- * wrap modes, filter modes, shadow/texcompare state, and the per-texture
- * color palette.
+ * Sampler object state.  These objects are new with GL_ARB_sampler_objects
+ * and OpenGL 3.3.  Legacy texture objects also contain a sampler object.
  */
-struct gl_texture_object
+struct gl_sampler_object
 {
-   _glthread_Mutex Mutex;      /**< for thread safety */
-   GLint RefCount;             /**< reference count */
-   GLuint Name;                        /**< the user-visible texture object ID */
-   GLenum Target;               /**< GL_TEXTURE_1D, GL_TEXTURE_2D, etc. */
-   GLfloat Priority;           /**< in [0,1] */
-   union {
-      GLfloat f[4];
-      GLuint ui[4];
-      GLint i[4];
-   } BorderColor;               /**< Interpreted according to texture format */
+   GLuint Name;
+   GLint RefCount;
+
    GLenum WrapS;               /**< S-axis texture image wrap mode */
    GLenum WrapT;               /**< T-axis texture image wrap mode */
    GLenum WrapR;               /**< R-axis texture image wrap mode */
    GLenum MinFilter;           /**< minification filter */
    GLenum MagFilter;           /**< magnification filter */
+   union {
+      GLfloat f[4];
+      GLuint ui[4];
+      GLint i[4];
+   } BorderColor;               /**< Interpreted according to texture format */
    GLfloat MinLod;             /**< min lambda, OpenGL 1.2 */
    GLfloat MaxLod;             /**< max lambda, OpenGL 1.2 */
    GLfloat LodBias;            /**< OpenGL 1.4 */
-   GLint BaseLevel;            /**< min mipmap level, OpenGL 1.2 */
-   GLint MaxLevel;             /**< max mipmap level, OpenGL 1.2 */
    GLfloat MaxAnisotropy;      /**< GL_EXT_texture_filter_anisotropic */
    GLenum CompareMode;         /**< GL_ARB_shadow */
    GLenum CompareFunc;         /**< GL_ARB_shadow */
    GLfloat CompareFailValue;    /**< GL_ARB_shadow_ambient */
+   GLenum sRGBDecode;           /**< GL_DECODE_EXT or GL_SKIP_DECODE_EXT */
+
+   /* deprecated sampler state */
    GLenum DepthMode;           /**< GL_ARB_depth_texture */
+
+   /** Is the texture object complete with respect to this sampler? */
+   GLboolean _CompleteTexture;
+};
+
+
+/**
+ * Texture object state.  Contains the array of mipmap images, border color,
+ * wrap modes, filter modes, shadow/texcompare state, and the per-texture
+ * color palette.
+ */
+struct gl_texture_object
+{
+   _glthread_Mutex Mutex;      /**< for thread safety */
+   GLint RefCount;             /**< reference count */
+   GLuint Name;                        /**< the user-visible texture object ID */
+   GLenum Target;               /**< GL_TEXTURE_1D, GL_TEXTURE_2D, etc. */
+
+   struct gl_sampler_object Sampler;
+
+   GLfloat Priority;           /**< in [0,1] */
+   GLint BaseLevel;            /**< min mipmap level, OpenGL 1.2 */
+   GLint MaxLevel;             /**< max mipmap level, OpenGL 1.2 */
    GLint _MaxLevel;            /**< actual max mipmap level (q in the spec) */
    GLfloat _MaxLambda;         /**< = _MaxLevel - BaseLevel (q - b in spec) */
    GLint CropRect[4];           /**< GL_OES_draw_texture */
@@ -1330,11 +1366,14 @@ struct gl_texture_object
    GLboolean _Complete;                /**< Is texture object complete? */
    GLboolean _RenderToTexture;  /**< Any rendering to this texture? */
    GLboolean Purgeable;         /**< Is the buffer purgeable under memory pressure? */
-   GLenum sRGBDecode;           /**< GL_DECODE_EXT or GL_SKIP_DECODE_EXT */
 
    /** Actual texture images, indexed by [cube face] and [mipmap level] */
    struct gl_texture_image *Image[MAX_FACES][MAX_TEXTURE_LEVELS];
 
+   /** GL_ARB_texture_buffer_object */
+   struct gl_buffer_object *BufferObject;
+   GLenum BufferObjectFormat;
+
    /** GL_EXT_paletted_texture */
    struct gl_color_table Palette;
 
@@ -1396,7 +1435,8 @@ struct gl_texture_unit
    GLbitfield _ReallyEnabled;   /**< 0 or exactly one of TEXTURE_*_BIT flags */
 
    GLenum EnvMode;              /**< GL_MODULATE, GL_DECAL, GL_BLEND, etc. */
-   GLfloat EnvColor[4];
+   GLclampf EnvColor[4];
+   GLfloat EnvColorUnclamped[4];
 
    struct gl_texgen GenS;
    struct gl_texgen GenT;
@@ -1409,6 +1449,9 @@ struct gl_texture_unit
    GLenum BumpTarget;
    GLfloat RotMatrix[4]; /* 2x2 matrix */
 
+   /** Current sampler object (GL_ARB_sampler_objects) */
+   struct gl_sampler_object *Sampler;
+
    /** 
     * \name GL_EXT_texture_env_combine 
     */
@@ -1444,6 +1487,9 @@ struct gl_texture_attrib
 
    struct gl_texture_object *ProxyTex[NUM_TEXTURE_TARGETS];
 
+   /** GL_ARB_texture_buffer_object */
+   struct gl_buffer_object *BufferObject;
+
    /** GL_ARB_seamless_cubemap */
    GLboolean CubeMapSeamless;
 
@@ -1877,7 +1923,6 @@ struct gl_geometry_program
 struct gl_fragment_program
 {
    struct gl_program Base;   /**< base class */
-   GLenum FogOption;
    GLboolean UsesKill;          /**< shader uses KIL instruction */
    GLboolean OriginUpperLeft;
    GLboolean PixelCenterInteger;
@@ -2340,6 +2385,9 @@ struct gl_shared_state
    /* GL_ARB_sync */
    struct simple_node SyncObjects;
 
+   /** GL_ARB_sampler_objects */
+   struct _mesa_HashTable *SamplerObjects;
+
    void *DriverData;  /**< Device driver shared state */
 };
 
@@ -2357,27 +2405,26 @@ struct gl_shared_state
  */
 struct gl_renderbuffer
 {
-#define RB_MAGIC 0xaabbccdd
-   int Magic; /** XXX TEMPORARY DEBUG INFO */
    _glthread_Mutex Mutex;                 /**< for thread safety */
    GLuint ClassID;        /**< Useful for drivers */
    GLuint Name;
    GLint RefCount;
    GLuint Width, Height;
+   GLint RowStride;       /**< Padded width in units of pixels */
    GLboolean Purgeable;   /**< Is the buffer purgeable under memory pressure? */
 
+   GLboolean AttachedAnytime; /**< TRUE if it was attached to a framebuffer */
+
+   GLubyte NumSamples;
+
    GLenum InternalFormat; /**< The user-specified format */
    GLenum _BaseFormat;    /**< Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or
                                GL_STENCIL_INDEX. */
    gl_format Format;      /**< The actual renderbuffer memory format */
 
-   GLubyte NumSamples;
-
    GLenum DataType;      /**< Type of values passed to the Get/Put functions */
    GLvoid *Data;        /**< This may not be used by some kinds of RBs */
 
-   GLboolean AttachedAnytime; /**< TRUE if it was attached to a framebuffer */
-
    /* Used to wrap one renderbuffer around another: */
    struct gl_renderbuffer *Wrapped;
 
@@ -2616,6 +2663,7 @@ struct gl_constants
    GLuint MaxTextureUnits;           /**< = MIN(CoordUnits, ImageUnits) */
    GLfloat MaxTextureMaxAnisotropy;  /**< GL_EXT_texture_filter_anisotropic */
    GLfloat MaxTextureLodBias;        /**< GL_EXT_texture_lod_bias */
+   GLuint MaxTextureBufferSize;      /**< GL_ARB_texture_buffer_object */
 
    GLuint MaxArrayLockSize;
 
@@ -2704,6 +2752,7 @@ struct gl_extensions
    GLboolean dummy_false; /* Set false by _mesa_init_extensions(). */
    GLboolean ARB_ES2_compatibility;
    GLboolean ARB_blend_func_extended;
+   GLboolean ARB_color_buffer_float;
    GLboolean ARB_copy_buffer;
    GLboolean ARB_depth_buffer_float;
    GLboolean ARB_depth_clamp;
@@ -2813,6 +2862,7 @@ struct gl_extensions
    GLboolean EXT_texture_lod_bias;
    GLboolean EXT_texture_mirror_clamp;
    GLboolean EXT_texture_shared_exponent;
+   GLboolean EXT_texture_snorm;
    GLboolean EXT_texture_sRGB;
    GLboolean EXT_texture_sRGB_decode;
    GLboolean EXT_texture_swizzle;
@@ -2840,7 +2890,6 @@ struct gl_extensions
    GLboolean MESA_resize_buffers;
    GLboolean MESA_ycbcr_texture;
    GLboolean MESA_texture_array;
-   GLboolean MESA_texture_signed_rgba;
    GLboolean NV_blend_square;
    GLboolean NV_conditional_render;
    GLboolean NV_fragment_program;
@@ -2933,6 +2982,7 @@ struct gl_matrix_stack
 #define _NEW_PROGRAM           (1 << 26)  /**< New program/shader state */
 #define _NEW_PROGRAM_CONSTANTS (1 << 27)
 #define _NEW_BUFFER_OBJECT     (1 << 28)
+#define _NEW_FRAG_CLAMP        (1 << 29)
 #define _NEW_ALL ~0
 /*@}*/
 
@@ -3022,11 +3072,6 @@ struct gl_matrix_stack
                                            _NEW_POINT |                \
                                            _NEW_PROGRAM |      \
                                            _NEW_MODELVIEW)
-
-#define _MESA_NEW_NEED_NORMALS            (_NEW_LIGHT |                \
-                                           _NEW_TEXTURE)
-
-#define _MESA_NEW_TRANSFER_STATE          (_NEW_PIXEL)
 /*@}*/
 
 
index 512835cb803d135e9e976bab2d3a307817c19246..4bb0a90045eaa8b6093d80ea3a78e66c8ec310da 100644 (file)
@@ -504,17 +504,6 @@ _mesa_pack_rgba_span_float(struct gl_context *ctx, GLuint n, GLfloat rgba[][4],
       luminance = NULL;
    }
 
-   /* XXX
-    * This test should probably go away.  Have the caller set/clear the
-    * IMAGE_CLAMP_BIT as needed.
-    */
-   if (dstType != GL_FLOAT || ctx->Color.ClampReadColor == GL_TRUE) {
-      if (!intDstFormat) {
-         /* need to clamp to [0, 1] */
-         transferOps |= IMAGE_CLAMP_BIT;
-      }
-   }
-
    if (transferOps) {
       _mesa_apply_rgba_transfer_ops(ctx, transferOps, n, rgba);
    }
@@ -3984,7 +3973,8 @@ _mesa_unpack_dudv_span_byte( struct gl_context *ctx,
                              GLbitfield transferOps )
 {
    ASSERT(dstFormat == GL_DUDV_ATI);
-   ASSERT(srcFormat == GL_DUDV_ATI);
+   ASSERT(srcFormat == GL_DUDV_ATI ||
+         srcFormat == GL_DU8DV8_ATI);
 
    ASSERT(srcType == GL_UNSIGNED_BYTE ||
           srcType == GL_BYTE ||
index dc00d423ba9079dde568cc4328d46363d79f9468..56b26a954bd560e53f474fee2891335052644031 100644 (file)
@@ -81,8 +81,8 @@ _mesa_validate_pbo_access(GLuint dimensions,
                                format, type, 0, 0, 0);
 
    /* get address just past the last pixel we'll read */
-   end =  _mesa_image_address(dimensions, pack, ptr, width, height,
-                              format, type, depth-1, height-1, width);
+   end = _mesa_image_address(dimensions, pack, ptr, width, height,
+                             format, type, depth-1, height-1, width);
 
 
    sizeAddr = ((const GLubyte *) 0) + pack->BufferObj->Size;
index 195fa234be27df27f4080a7e132d347a2d566e82..da99c9b6f35792d532adc1dffca5b51ed64cc6cb 100644 (file)
@@ -617,7 +617,7 @@ update_image_transfer_state(struct gl_context *ctx)
  */
 void _mesa_update_pixel( struct gl_context *ctx, GLuint new_state )
 {
-   if (new_state & _MESA_NEW_TRANSFER_STATE)
+   if (new_state & _NEW_PIXEL)
       update_image_transfer_state(ctx);
 }
 
index 6e09a52c88a1614423d0943ae7ecd4ee323b7dc8..a172a0000f51e9c81558e3b535b945250a2994c0 100644 (file)
@@ -44,8 +44,8 @@
  * \return GL_TRUE if error detected, GL_FALSE if no errors
  */
 GLboolean
-_mesa_error_check_format_type(struct gl_context *ctx, GLenum format, GLenum type,
-                              GLboolean drawing)
+_mesa_error_check_format_type(struct gl_context *ctx, GLenum format,
+                              GLenum type, GLboolean drawing)
 {
    const char *readDraw = drawing ? "Draw" : "Read";
    const GLboolean reading = !drawing;
index 61530df3e1ac04caad8fab19a119cb103310d4cd..72a2f1e0b817f4b38821d89cbfd3df2f0d9c4354 100644 (file)
@@ -70,4710 +70,4774 @@ static const char _mesa_function_pool[] =
    "\0"
    "glLoadIdentity\0"
    "\0"
-   /* _mesa_function_pool[216]: GetCombinerOutputParameterfvNV (will be remapped) */
-   "iiip\0"
-   "glGetCombinerOutputParameterfvNV\0"
-   "\0"
-   /* _mesa_function_pool[255]: SampleCoverageARB (will be remapped) */
+   /* _mesa_function_pool[216]: SampleCoverageARB (will be remapped) */
    "fi\0"
    "glSampleCoverage\0"
    "glSampleCoverageARB\0"
    "\0"
-   /* _mesa_function_pool[296]: ConvolutionFilter1D (offset 348) */
+   /* _mesa_function_pool[257]: ConvolutionFilter1D (offset 348) */
    "iiiiip\0"
    "glConvolutionFilter1D\0"
    "glConvolutionFilter1DEXT\0"
    "\0"
-   /* _mesa_function_pool[351]: BeginQueryARB (will be remapped) */
+   /* _mesa_function_pool[312]: BeginQueryARB (will be remapped) */
    "ii\0"
    "glBeginQuery\0"
    "glBeginQueryARB\0"
    "\0"
-   /* _mesa_function_pool[384]: RasterPos3dv (offset 71) */
+   /* _mesa_function_pool[345]: RasterPos3dv (offset 71) */
    "p\0"
    "glRasterPos3dv\0"
    "\0"
-   /* _mesa_function_pool[402]: PointParameteriNV (will be remapped) */
+   /* _mesa_function_pool[363]: PointParameteriNV (will be remapped) */
    "ii\0"
    "glPointParameteri\0"
    "glPointParameteriNV\0"
    "\0"
-   /* _mesa_function_pool[444]: GetProgramiv (will be remapped) */
+   /* _mesa_function_pool[405]: GetProgramiv (will be remapped) */
    "iip\0"
    "glGetProgramiv\0"
    "\0"
-   /* _mesa_function_pool[464]: MultiTexCoord3sARB (offset 398) */
+   /* _mesa_function_pool[425]: MultiTexCoord3sARB (offset 398) */
    "iiii\0"
    "glMultiTexCoord3s\0"
    "glMultiTexCoord3sARB\0"
    "\0"
-   /* _mesa_function_pool[509]: SecondaryColor3iEXT (will be remapped) */
+   /* _mesa_function_pool[470]: SecondaryColor3iEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3i\0"
    "glSecondaryColor3iEXT\0"
    "\0"
-   /* _mesa_function_pool[555]: WindowPos3fMESA (will be remapped) */
+   /* _mesa_function_pool[516]: WindowPos3fMESA (will be remapped) */
    "fff\0"
    "glWindowPos3f\0"
    "glWindowPos3fARB\0"
    "glWindowPos3fMESA\0"
    "\0"
-   /* _mesa_function_pool[609]: TexCoord1iv (offset 99) */
+   /* _mesa_function_pool[570]: TexCoord1iv (offset 99) */
    "p\0"
    "glTexCoord1iv\0"
    "\0"
-   /* _mesa_function_pool[626]: TexCoord4sv (offset 125) */
+   /* _mesa_function_pool[587]: TexCoord4sv (offset 125) */
    "p\0"
    "glTexCoord4sv\0"
    "\0"
-   /* _mesa_function_pool[643]: RasterPos4s (offset 84) */
+   /* _mesa_function_pool[604]: RasterPos4s (offset 84) */
    "iiii\0"
    "glRasterPos4s\0"
    "\0"
-   /* _mesa_function_pool[663]: PixelTexGenParameterfvSGIS (will be remapped) */
+   /* _mesa_function_pool[624]: PixelTexGenParameterfvSGIS (will be remapped) */
    "ip\0"
    "glPixelTexGenParameterfvSGIS\0"
    "\0"
-   /* _mesa_function_pool[696]: ActiveTextureARB (offset 374) */
+   /* _mesa_function_pool[657]: ActiveTextureARB (offset 374) */
    "i\0"
    "glActiveTexture\0"
    "glActiveTextureARB\0"
    "\0"
-   /* _mesa_function_pool[734]: BlitFramebufferEXT (will be remapped) */
+   /* _mesa_function_pool[695]: BlitFramebufferEXT (will be remapped) */
    "iiiiiiiiii\0"
    "glBlitFramebuffer\0"
    "glBlitFramebufferEXT\0"
    "\0"
-   /* _mesa_function_pool[785]: TexCoord1f (offset 96) */
+   /* _mesa_function_pool[746]: TexCoord1f (offset 96) */
    "f\0"
    "glTexCoord1f\0"
    "\0"
-   /* _mesa_function_pool[801]: TexCoord1d (offset 94) */
+   /* _mesa_function_pool[762]: TexCoord1d (offset 94) */
    "d\0"
    "glTexCoord1d\0"
    "\0"
-   /* _mesa_function_pool[817]: VertexAttrib4ubvNV (will be remapped) */
+   /* _mesa_function_pool[778]: VertexAttrib4ubvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib4ubvNV\0"
    "\0"
-   /* _mesa_function_pool[842]: TexCoord1i (offset 98) */
+   /* _mesa_function_pool[803]: TexCoord1i (offset 98) */
    "i\0"
    "glTexCoord1i\0"
    "\0"
-   /* _mesa_function_pool[858]: GetProgramNamedParameterdvNV (will be remapped) */
+   /* _mesa_function_pool[819]: GetProgramNamedParameterdvNV (will be remapped) */
    "iipp\0"
    "glGetProgramNamedParameterdvNV\0"
    "\0"
-   /* _mesa_function_pool[895]: Histogram (offset 367) */
+   /* _mesa_function_pool[856]: Histogram (offset 367) */
    "iiii\0"
    "glHistogram\0"
    "glHistogramEXT\0"
    "\0"
-   /* _mesa_function_pool[928]: TexCoord1s (offset 100) */
+   /* _mesa_function_pool[889]: TexCoord1s (offset 100) */
    "i\0"
    "glTexCoord1s\0"
    "\0"
-   /* _mesa_function_pool[944]: GetMapfv (offset 267) */
+   /* _mesa_function_pool[905]: GetMapfv (offset 267) */
    "iip\0"
    "glGetMapfv\0"
    "\0"
-   /* _mesa_function_pool[960]: EvalCoord1f (offset 230) */
+   /* _mesa_function_pool[921]: EvalCoord1f (offset 230) */
    "f\0"
    "glEvalCoord1f\0"
    "\0"
-   /* _mesa_function_pool[977]: FramebufferTexture (will be remapped) */
+   /* _mesa_function_pool[938]: FramebufferTexture (will be remapped) */
    "iiii\0"
    "glFramebufferTexture\0"
    "\0"
-   /* _mesa_function_pool[1004]: VertexAttribI1ivEXT (will be remapped) */
+   /* _mesa_function_pool[965]: VertexAttribI1ivEXT (will be remapped) */
    "ip\0"
    "glVertexAttribI1ivEXT\0"
    "glVertexAttribI1iv\0"
    "\0"
-   /* _mesa_function_pool[1049]: TexImage4DSGIS (dynamic) */
+   /* _mesa_function_pool[1010]: TexImage4DSGIS (dynamic) */
    "iiiiiiiiiip\0"
    "glTexImage4DSGIS\0"
    "\0"
-   /* _mesa_function_pool[1079]: PolygonStipple (offset 175) */
+   /* _mesa_function_pool[1040]: PolygonStipple (offset 175) */
    "p\0"
    "glPolygonStipple\0"
    "\0"
-   /* _mesa_function_pool[1099]: WindowPos2dvMESA (will be remapped) */
+   /* _mesa_function_pool[1060]: WindowPos2dvMESA (will be remapped) */
    "p\0"
    "glWindowPos2dv\0"
    "glWindowPos2dvARB\0"
    "glWindowPos2dvMESA\0"
    "\0"
-   /* _mesa_function_pool[1154]: ReplacementCodeuiColor3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[1115]: ReplacementCodeuiColor3fVertex3fvSUN (dynamic) */
    "ppp\0"
    "glReplacementCodeuiColor3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[1198]: BlendEquationSeparateEXT (will be remapped) */
+   /* _mesa_function_pool[1159]: BlendEquationSeparateEXT (will be remapped) */
    "ii\0"
    "glBlendEquationSeparate\0"
    "glBlendEquationSeparateEXT\0"
    "glBlendEquationSeparateATI\0"
    "\0"
-   /* _mesa_function_pool[1280]: ListParameterfSGIX (dynamic) */
+   /* _mesa_function_pool[1241]: ListParameterfSGIX (dynamic) */
    "iif\0"
    "glListParameterfSGIX\0"
    "\0"
-   /* _mesa_function_pool[1306]: SecondaryColor3bEXT (will be remapped) */
+   /* _mesa_function_pool[1267]: SecondaryColor3bEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3b\0"
    "glSecondaryColor3bEXT\0"
    "\0"
-   /* _mesa_function_pool[1352]: TexCoord4fColor4fNormal3fVertex4fvSUN (dynamic) */
+   /* _mesa_function_pool[1313]: TexCoord4fColor4fNormal3fVertex4fvSUN (dynamic) */
    "pppp\0"
    "glTexCoord4fColor4fNormal3fVertex4fvSUN\0"
    "\0"
-   /* _mesa_function_pool[1398]: GetPixelMapfv (offset 271) */
+   /* _mesa_function_pool[1359]: GetPixelMapfv (offset 271) */
    "ip\0"
    "glGetPixelMapfv\0"
    "\0"
-   /* _mesa_function_pool[1418]: Color3uiv (offset 22) */
+   /* _mesa_function_pool[1379]: Color3uiv (offset 22) */
    "p\0"
    "glColor3uiv\0"
    "\0"
-   /* _mesa_function_pool[1433]: IsEnabled (offset 286) */
+   /* _mesa_function_pool[1394]: IsEnabled (offset 286) */
    "i\0"
    "glIsEnabled\0"
    "\0"
-   /* _mesa_function_pool[1448]: VertexAttrib4svNV (will be remapped) */
+   /* _mesa_function_pool[1409]: VertexAttrib4svNV (will be remapped) */
    "ip\0"
    "glVertexAttrib4svNV\0"
    "\0"
-   /* _mesa_function_pool[1472]: EvalCoord2fv (offset 235) */
+   /* _mesa_function_pool[1433]: EvalCoord2fv (offset 235) */
    "p\0"
    "glEvalCoord2fv\0"
    "\0"
-   /* _mesa_function_pool[1490]: GetBufferSubDataARB (will be remapped) */
+   /* _mesa_function_pool[1451]: GetBufferSubDataARB (will be remapped) */
    "iiip\0"
    "glGetBufferSubData\0"
    "glGetBufferSubDataARB\0"
    "\0"
-   /* _mesa_function_pool[1537]: BufferSubDataARB (will be remapped) */
+   /* _mesa_function_pool[1498]: BufferSubDataARB (will be remapped) */
    "iiip\0"
    "glBufferSubData\0"
    "glBufferSubDataARB\0"
    "\0"
-   /* _mesa_function_pool[1578]: TexCoord2fColor4ubVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[1539]: TexCoord2fColor4ubVertex3fvSUN (dynamic) */
    "ppp\0"
    "glTexCoord2fColor4ubVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[1616]: AttachShader (will be remapped) */
+   /* _mesa_function_pool[1577]: AttachShader (will be remapped) */
    "ii\0"
    "glAttachShader\0"
    "\0"
-   /* _mesa_function_pool[1635]: VertexAttrib2fARB (will be remapped) */
+   /* _mesa_function_pool[1596]: VertexAttrib2fARB (will be remapped) */
    "iff\0"
    "glVertexAttrib2f\0"
    "glVertexAttrib2fARB\0"
    "\0"
-   /* _mesa_function_pool[1677]: GetDebugLogLengthMESA (dynamic) */
+   /* _mesa_function_pool[1638]: GetDebugLogLengthMESA (dynamic) */
    "iii\0"
    "glGetDebugLogLengthMESA\0"
    "\0"
-   /* _mesa_function_pool[1706]: GetMapiv (offset 268) */
+   /* _mesa_function_pool[1667]: GetMapiv (offset 268) */
    "iip\0"
    "glGetMapiv\0"
    "\0"
-   /* _mesa_function_pool[1722]: VertexAttrib3fARB (will be remapped) */
+   /* _mesa_function_pool[1683]: VertexAttrib3fARB (will be remapped) */
    "ifff\0"
    "glVertexAttrib3f\0"
    "glVertexAttrib3fARB\0"
    "\0"
-   /* _mesa_function_pool[1765]: Indexubv (offset 316) */
+   /* _mesa_function_pool[1726]: Indexubv (offset 316) */
    "p\0"
    "glIndexubv\0"
    "\0"
-   /* _mesa_function_pool[1779]: GetQueryivARB (will be remapped) */
+   /* _mesa_function_pool[1740]: GetQueryivARB (will be remapped) */
    "iip\0"
    "glGetQueryiv\0"
    "glGetQueryivARB\0"
    "\0"
-   /* _mesa_function_pool[1813]: TexImage3D (offset 371) */
+   /* _mesa_function_pool[1774]: TexImage3D (offset 371) */
    "iiiiiiiiip\0"
    "glTexImage3D\0"
    "glTexImage3DEXT\0"
    "\0"
-   /* _mesa_function_pool[1854]: BindFragDataLocationEXT (will be remapped) */
+   /* _mesa_function_pool[1815]: BindFragDataLocationEXT (will be remapped) */
    "iip\0"
    "glBindFragDataLocationEXT\0"
    "glBindFragDataLocation\0"
    "\0"
-   /* _mesa_function_pool[1908]: ReplacementCodeuiVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[1869]: ReplacementCodeuiVertex3fvSUN (dynamic) */
    "pp\0"
    "glReplacementCodeuiVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[1944]: EdgeFlagPointer (offset 312) */
+   /* _mesa_function_pool[1905]: EdgeFlagPointer (offset 312) */
    "ip\0"
    "glEdgeFlagPointer\0"
    "\0"
-   /* _mesa_function_pool[1966]: Color3ubv (offset 20) */
+   /* _mesa_function_pool[1927]: Color3ubv (offset 20) */
    "p\0"
    "glColor3ubv\0"
    "\0"
-   /* _mesa_function_pool[1981]: GetQueryObjectivARB (will be remapped) */
+   /* _mesa_function_pool[1942]: GetQueryObjectivARB (will be remapped) */
    "iip\0"
    "glGetQueryObjectiv\0"
    "glGetQueryObjectivARB\0"
    "\0"
-   /* _mesa_function_pool[2027]: Vertex3dv (offset 135) */
+   /* _mesa_function_pool[1988]: Vertex3dv (offset 135) */
    "p\0"
    "glVertex3dv\0"
    "\0"
-   /* _mesa_function_pool[2042]: ReplacementCodeuiTexCoord2fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[2003]: ReplacementCodeuiTexCoord2fVertex3fvSUN (dynamic) */
    "ppp\0"
    "glReplacementCodeuiTexCoord2fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[2089]: CompressedTexSubImage2DARB (will be remapped) */
+   /* _mesa_function_pool[2050]: CompressedTexSubImage2DARB (will be remapped) */
    "iiiiiiiip\0"
    "glCompressedTexSubImage2D\0"
    "glCompressedTexSubImage2DARB\0"
    "\0"
-   /* _mesa_function_pool[2155]: CombinerOutputNV (will be remapped) */
+   /* _mesa_function_pool[2116]: CombinerOutputNV (will be remapped) */
    "iiiiiiiiii\0"
    "glCombinerOutputNV\0"
    "\0"
-   /* _mesa_function_pool[2186]: VertexAttribs3fvNV (will be remapped) */
+   /* _mesa_function_pool[2147]: VertexAttribs3fvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs3fvNV\0"
    "\0"
-   /* _mesa_function_pool[2212]: Uniform2fARB (will be remapped) */
+   /* _mesa_function_pool[2173]: Uniform2fARB (will be remapped) */
    "iff\0"
    "glUniform2f\0"
    "glUniform2fARB\0"
    "\0"
-   /* _mesa_function_pool[2244]: LightModeliv (offset 166) */
+   /* _mesa_function_pool[2205]: LightModeliv (offset 166) */
    "ip\0"
    "glLightModeliv\0"
    "\0"
-   /* _mesa_function_pool[2263]: VertexAttrib1svARB (will be remapped) */
+   /* _mesa_function_pool[2224]: VertexAttrib1svARB (will be remapped) */
    "ip\0"
    "glVertexAttrib1sv\0"
    "glVertexAttrib1svARB\0"
    "\0"
-   /* _mesa_function_pool[2306]: VertexAttribs1dvNV (will be remapped) */
+   /* _mesa_function_pool[2267]: VertexAttribs1dvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs1dvNV\0"
    "\0"
-   /* _mesa_function_pool[2332]: Uniform2ivARB (will be remapped) */
+   /* _mesa_function_pool[2293]: Uniform2ivARB (will be remapped) */
    "iip\0"
    "glUniform2iv\0"
    "glUniform2ivARB\0"
    "\0"
-   /* _mesa_function_pool[2366]: GetImageTransformParameterfvHP (dynamic) */
+   /* _mesa_function_pool[2327]: GetImageTransformParameterfvHP (dynamic) */
    "iip\0"
    "glGetImageTransformParameterfvHP\0"
    "\0"
-   /* _mesa_function_pool[2404]: Normal3bv (offset 53) */
+   /* _mesa_function_pool[2365]: Normal3bv (offset 53) */
    "p\0"
    "glNormal3bv\0"
    "\0"
-   /* _mesa_function_pool[2419]: TexGeniv (offset 193) */
+   /* _mesa_function_pool[2380]: TexGeniv (offset 193) */
    "iip\0"
    "glTexGeniv\0"
    "\0"
-   /* _mesa_function_pool[2435]: WeightubvARB (dynamic) */
+   /* _mesa_function_pool[2396]: WeightubvARB (dynamic) */
    "ip\0"
    "glWeightubvARB\0"
    "\0"
-   /* _mesa_function_pool[2454]: VertexAttrib1fvNV (will be remapped) */
+   /* _mesa_function_pool[2415]: VertexAttrib1fvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib1fvNV\0"
    "\0"
-   /* _mesa_function_pool[2478]: Vertex3iv (offset 139) */
+   /* _mesa_function_pool[2439]: Vertex3iv (offset 139) */
    "p\0"
    "glVertex3iv\0"
    "\0"
-   /* _mesa_function_pool[2493]: CopyConvolutionFilter1D (offset 354) */
+   /* _mesa_function_pool[2454]: CopyConvolutionFilter1D (offset 354) */
    "iiiii\0"
    "glCopyConvolutionFilter1D\0"
    "glCopyConvolutionFilter1DEXT\0"
    "\0"
-   /* _mesa_function_pool[2555]: VertexAttribI1uiEXT (will be remapped) */
+   /* _mesa_function_pool[2516]: VertexAttribI1uiEXT (will be remapped) */
    "ii\0"
    "glVertexAttribI1uiEXT\0"
    "glVertexAttribI1ui\0"
    "\0"
-   /* _mesa_function_pool[2600]: ReplacementCodeuiNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[2561]: ReplacementCodeuiNormal3fVertex3fSUN (dynamic) */
    "iffffff\0"
    "glReplacementCodeuiNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[2648]: DeleteSync (will be remapped) */
+   /* _mesa_function_pool[2609]: DeleteSync (will be remapped) */
    "i\0"
    "glDeleteSync\0"
    "\0"
-   /* _mesa_function_pool[2664]: FragmentMaterialfvSGIX (dynamic) */
+   /* _mesa_function_pool[2625]: FragmentMaterialfvSGIX (dynamic) */
    "iip\0"
    "glFragmentMaterialfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[2694]: BlendColor (offset 336) */
+   /* _mesa_function_pool[2655]: BlendColor (offset 336) */
    "ffff\0"
    "glBlendColor\0"
    "glBlendColorEXT\0"
    "\0"
-   /* _mesa_function_pool[2729]: UniformMatrix4fvARB (will be remapped) */
+   /* _mesa_function_pool[2690]: UniformMatrix4fvARB (will be remapped) */
    "iiip\0"
    "glUniformMatrix4fv\0"
    "glUniformMatrix4fvARB\0"
    "\0"
-   /* _mesa_function_pool[2776]: DeleteVertexArraysAPPLE (will be remapped) */
+   /* _mesa_function_pool[2737]: DeleteVertexArraysAPPLE (will be remapped) */
    "ip\0"
    "glDeleteVertexArrays\0"
    "glDeleteVertexArraysAPPLE\0"
    "\0"
-   /* _mesa_function_pool[2827]: TexBuffer (will be remapped) */
+   /* _mesa_function_pool[2788]: TexBuffer (will be remapped) */
    "iii\0"
    "glTexBuffer\0"
    "\0"
-   /* _mesa_function_pool[2844]: ReadInstrumentsSGIX (dynamic) */
+   /* _mesa_function_pool[2805]: ReadInstrumentsSGIX (dynamic) */
    "i\0"
    "glReadInstrumentsSGIX\0"
    "\0"
-   /* _mesa_function_pool[2869]: CallLists (offset 3) */
+   /* _mesa_function_pool[2830]: CallLists (offset 3) */
    "iip\0"
    "glCallLists\0"
    "\0"
-   /* _mesa_function_pool[2886]: UniformMatrix2x4fv (will be remapped) */
+   /* _mesa_function_pool[2847]: UniformMatrix2x4fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix2x4fv\0"
    "\0"
-   /* _mesa_function_pool[2913]: Color4ubVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[2874]: Color4ubVertex3fvSUN (dynamic) */
    "pp\0"
    "glColor4ubVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[2940]: Normal3iv (offset 59) */
+   /* _mesa_function_pool[2901]: Normal3iv (offset 59) */
    "p\0"
    "glNormal3iv\0"
    "\0"
-   /* _mesa_function_pool[2955]: PassThrough (offset 199) */
+   /* _mesa_function_pool[2916]: PassThrough (offset 199) */
    "f\0"
    "glPassThrough\0"
    "\0"
-   /* _mesa_function_pool[2972]: GetVertexAttribIivEXT (will be remapped) */
+   /* _mesa_function_pool[2933]: GetVertexAttribIivEXT (will be remapped) */
    "iip\0"
    "glGetVertexAttribIivEXT\0"
    "glGetVertexAttribIiv\0"
    "\0"
-   /* _mesa_function_pool[3022]: TexParameterIivEXT (will be remapped) */
+   /* _mesa_function_pool[2983]: TexParameterIivEXT (will be remapped) */
    "iip\0"
    "glTexParameterIivEXT\0"
    "glTexParameterIiv\0"
    "\0"
-   /* _mesa_function_pool[3066]: FramebufferTextureLayerEXT (will be remapped) */
+   /* _mesa_function_pool[3027]: FramebufferTextureLayerEXT (will be remapped) */
    "iiiii\0"
    "glFramebufferTextureLayer\0"
    "glFramebufferTextureLayerEXT\0"
    "\0"
-   /* _mesa_function_pool[3128]: GetListParameterfvSGIX (dynamic) */
+   /* _mesa_function_pool[3089]: GetListParameterfvSGIX (dynamic) */
    "iip\0"
    "glGetListParameterfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[3158]: Viewport (offset 305) */
+   /* _mesa_function_pool[3119]: Viewport (offset 305) */
    "iiii\0"
    "glViewport\0"
    "\0"
-   /* _mesa_function_pool[3175]: VertexAttrib4NusvARB (will be remapped) */
+   /* _mesa_function_pool[3136]: VertexAttrib4NusvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Nusv\0"
    "glVertexAttrib4NusvARB\0"
    "\0"
-   /* _mesa_function_pool[3222]: WindowPos4svMESA (will be remapped) */
+   /* _mesa_function_pool[3183]: WindowPos4svMESA (will be remapped) */
    "p\0"
    "glWindowPos4svMESA\0"
    "\0"
-   /* _mesa_function_pool[3244]: CreateProgramObjectARB (will be remapped) */
+   /* _mesa_function_pool[3205]: CreateProgramObjectARB (will be remapped) */
    "\0"
    "glCreateProgramObjectARB\0"
    "\0"
-   /* _mesa_function_pool[3271]: DeleteTransformFeedbacks (will be remapped) */
+   /* _mesa_function_pool[3232]: DeleteTransformFeedbacks (will be remapped) */
    "ip\0"
    "glDeleteTransformFeedbacks\0"
    "\0"
-   /* _mesa_function_pool[3302]: UniformMatrix4x3fv (will be remapped) */
+   /* _mesa_function_pool[3263]: UniformMatrix4x3fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix4x3fv\0"
    "\0"
-   /* _mesa_function_pool[3329]: PrioritizeTextures (offset 331) */
+   /* _mesa_function_pool[3290]: PrioritizeTextures (offset 331) */
    "ipp\0"
    "glPrioritizeTextures\0"
    "glPrioritizeTexturesEXT\0"
    "\0"
-   /* _mesa_function_pool[3379]: VertexAttribI3uiEXT (will be remapped) */
+   /* _mesa_function_pool[3340]: VertexAttribI3uiEXT (will be remapped) */
    "iiii\0"
    "glVertexAttribI3uiEXT\0"
    "glVertexAttribI3ui\0"
    "\0"
-   /* _mesa_function_pool[3426]: AsyncMarkerSGIX (dynamic) */
+   /* _mesa_function_pool[3387]: AsyncMarkerSGIX (dynamic) */
    "i\0"
    "glAsyncMarkerSGIX\0"
    "\0"
-   /* _mesa_function_pool[3447]: GlobalAlphaFactorubSUN (dynamic) */
+   /* _mesa_function_pool[3408]: GlobalAlphaFactorubSUN (dynamic) */
    "i\0"
    "glGlobalAlphaFactorubSUN\0"
    "\0"
-   /* _mesa_function_pool[3475]: ClearColorIuiEXT (will be remapped) */
+   /* _mesa_function_pool[3436]: ClearColorIuiEXT (will be remapped) */
    "iiii\0"
    "glClearColorIuiEXT\0"
    "\0"
-   /* _mesa_function_pool[3500]: ClearDebugLogMESA (dynamic) */
+   /* _mesa_function_pool[3461]: ClearDebugLogMESA (dynamic) */
    "iii\0"
    "glClearDebugLogMESA\0"
    "\0"
-   /* _mesa_function_pool[3525]: Uniform4uiEXT (will be remapped) */
+   /* _mesa_function_pool[3486]: Uniform4uiEXT (will be remapped) */
    "iiiii\0"
    "glUniform4uiEXT\0"
    "glUniform4ui\0"
    "\0"
-   /* _mesa_function_pool[3561]: ResetHistogram (offset 369) */
+   /* _mesa_function_pool[3522]: ResetHistogram (offset 369) */
    "i\0"
    "glResetHistogram\0"
    "glResetHistogramEXT\0"
    "\0"
-   /* _mesa_function_pool[3601]: GetProgramNamedParameterfvNV (will be remapped) */
+   /* _mesa_function_pool[3562]: GetProgramNamedParameterfvNV (will be remapped) */
    "iipp\0"
    "glGetProgramNamedParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[3638]: PointParameterfEXT (will be remapped) */
+   /* _mesa_function_pool[3599]: PointParameterfEXT (will be remapped) */
    "if\0"
    "glPointParameterf\0"
    "glPointParameterfARB\0"
    "glPointParameterfEXT\0"
    "glPointParameterfSGIS\0"
    "\0"
-   /* _mesa_function_pool[3724]: LoadIdentityDeformationMapSGIX (dynamic) */
+   /* _mesa_function_pool[3685]: LoadIdentityDeformationMapSGIX (dynamic) */
    "i\0"
    "glLoadIdentityDeformationMapSGIX\0"
    "\0"
-   /* _mesa_function_pool[3760]: GenFencesNV (will be remapped) */
+   /* _mesa_function_pool[3721]: GenFencesNV (will be remapped) */
    "ip\0"
    "glGenFencesNV\0"
    "\0"
-   /* _mesa_function_pool[3778]: ImageTransformParameterfHP (dynamic) */
+   /* _mesa_function_pool[3739]: ImageTransformParameterfHP (dynamic) */
    "iif\0"
    "glImageTransformParameterfHP\0"
    "\0"
-   /* _mesa_function_pool[3812]: MatrixIndexusvARB (dynamic) */
+   /* _mesa_function_pool[3773]: MatrixIndexusvARB (dynamic) */
    "ip\0"
    "glMatrixIndexusvARB\0"
    "\0"
-   /* _mesa_function_pool[3836]: DrawElementsBaseVertex (will be remapped) */
+   /* _mesa_function_pool[3797]: DrawElementsBaseVertex (will be remapped) */
    "iiipi\0"
    "glDrawElementsBaseVertex\0"
    "\0"
-   /* _mesa_function_pool[3868]: DisableVertexAttribArrayARB (will be remapped) */
+   /* _mesa_function_pool[3829]: DisableVertexAttribArrayARB (will be remapped) */
    "i\0"
    "glDisableVertexAttribArray\0"
    "glDisableVertexAttribArrayARB\0"
    "\0"
-   /* _mesa_function_pool[3928]: TexCoord2sv (offset 109) */
+   /* _mesa_function_pool[3889]: TexCoord2sv (offset 109) */
    "p\0"
    "glTexCoord2sv\0"
    "\0"
-   /* _mesa_function_pool[3945]: Vertex4dv (offset 143) */
+   /* _mesa_function_pool[3906]: Vertex4dv (offset 143) */
    "p\0"
    "glVertex4dv\0"
    "\0"
-   /* _mesa_function_pool[3960]: StencilMaskSeparate (will be remapped) */
+   /* _mesa_function_pool[3921]: StencilMaskSeparate (will be remapped) */
    "ii\0"
    "glStencilMaskSeparate\0"
    "\0"
-   /* _mesa_function_pool[3986]: ProgramLocalParameter4dARB (will be remapped) */
+   /* _mesa_function_pool[3947]: ProgramLocalParameter4dARB (will be remapped) */
    "iidddd\0"
    "glProgramLocalParameter4dARB\0"
    "\0"
-   /* _mesa_function_pool[4023]: CompressedTexImage3DARB (will be remapped) */
+   /* _mesa_function_pool[3984]: CompressedTexImage3DARB (will be remapped) */
    "iiiiiiiip\0"
    "glCompressedTexImage3D\0"
    "glCompressedTexImage3DARB\0"
    "\0"
-   /* _mesa_function_pool[4083]: Color3sv (offset 18) */
+   /* _mesa_function_pool[4044]: Color3sv (offset 18) */
    "p\0"
    "glColor3sv\0"
    "\0"
-   /* _mesa_function_pool[4097]: GetConvolutionParameteriv (offset 358) */
+   /* _mesa_function_pool[4058]: GetConvolutionParameteriv (offset 358) */
    "iip\0"
    "glGetConvolutionParameteriv\0"
    "glGetConvolutionParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[4161]: VertexAttrib1fARB (will be remapped) */
+   /* _mesa_function_pool[4122]: DeleteSamplers (will be remapped) */
+   "ip\0"
+   "glDeleteSamplers\0"
+   "\0"
+   /* _mesa_function_pool[4143]: VertexAttrib1fARB (will be remapped) */
    "if\0"
    "glVertexAttrib1f\0"
    "glVertexAttrib1fARB\0"
    "\0"
-   /* _mesa_function_pool[4202]: Vertex2dv (offset 127) */
+   /* _mesa_function_pool[4184]: Vertex2dv (offset 127) */
    "p\0"
    "glVertex2dv\0"
    "\0"
-   /* _mesa_function_pool[4217]: TestFenceNV (will be remapped) */
+   /* _mesa_function_pool[4199]: TestFenceNV (will be remapped) */
    "i\0"
    "glTestFenceNV\0"
    "\0"
-   /* _mesa_function_pool[4234]: MultiTexCoord1fvARB (offset 379) */
+   /* _mesa_function_pool[4216]: GetVertexAttribIuivEXT (will be remapped) */
+   "iip\0"
+   "glGetVertexAttribIuivEXT\0"
+   "glGetVertexAttribIuiv\0"
+   "\0"
+   /* _mesa_function_pool[4268]: MultiTexCoord1fvARB (offset 379) */
    "ip\0"
    "glMultiTexCoord1fv\0"
    "glMultiTexCoord1fvARB\0"
    "\0"
-   /* _mesa_function_pool[4279]: TexCoord3iv (offset 115) */
+   /* _mesa_function_pool[4313]: TexCoord3iv (offset 115) */
    "p\0"
    "glTexCoord3iv\0"
    "\0"
-   /* _mesa_function_pool[4296]: Uniform2uivEXT (will be remapped) */
+   /* _mesa_function_pool[4330]: Uniform2uivEXT (will be remapped) */
    "iip\0"
    "glUniform2uivEXT\0"
    "glUniform2uiv\0"
    "\0"
-   /* _mesa_function_pool[4332]: ColorFragmentOp2ATI (will be remapped) */
+   /* _mesa_function_pool[4366]: ColorFragmentOp2ATI (will be remapped) */
    "iiiiiiiiii\0"
    "glColorFragmentOp2ATI\0"
    "\0"
-   /* _mesa_function_pool[4366]: SecondaryColorPointerListIBM (dynamic) */
+   /* _mesa_function_pool[4400]: SecondaryColorPointerListIBM (dynamic) */
    "iiipi\0"
    "glSecondaryColorPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[4404]: GetPixelTexGenParameterivSGIS (will be remapped) */
+   /* _mesa_function_pool[4438]: GetPixelTexGenParameterivSGIS (will be remapped) */
    "ip\0"
    "glGetPixelTexGenParameterivSGIS\0"
    "\0"
-   /* _mesa_function_pool[4440]: Color3fv (offset 14) */
+   /* _mesa_function_pool[4474]: Color3fv (offset 14) */
    "p\0"
    "glColor3fv\0"
    "\0"
-   /* _mesa_function_pool[4454]: VertexAttrib4fNV (will be remapped) */
+   /* _mesa_function_pool[4488]: VertexAttrib4fNV (will be remapped) */
    "iffff\0"
    "glVertexAttrib4fNV\0"
    "\0"
-   /* _mesa_function_pool[4480]: ReplacementCodeubSUN (dynamic) */
+   /* _mesa_function_pool[4514]: ReplacementCodeubSUN (dynamic) */
    "i\0"
    "glReplacementCodeubSUN\0"
    "\0"
-   /* _mesa_function_pool[4506]: FinishAsyncSGIX (dynamic) */
+   /* _mesa_function_pool[4540]: FinishAsyncSGIX (dynamic) */
    "p\0"
    "glFinishAsyncSGIX\0"
    "\0"
-   /* _mesa_function_pool[4527]: GetDebugLogMESA (dynamic) */
+   /* _mesa_function_pool[4561]: GetDebugLogMESA (dynamic) */
    "iiiipp\0"
    "glGetDebugLogMESA\0"
    "\0"
-   /* _mesa_function_pool[4553]: FogCoorddEXT (will be remapped) */
+   /* _mesa_function_pool[4587]: FogCoorddEXT (will be remapped) */
    "d\0"
    "glFogCoordd\0"
    "glFogCoorddEXT\0"
    "\0"
-   /* _mesa_function_pool[4583]: BeginConditionalRenderNV (will be remapped) */
+   /* _mesa_function_pool[4617]: BeginConditionalRenderNV (will be remapped) */
    "ii\0"
    "glBeginConditionalRenderNV\0"
    "glBeginConditionalRender\0"
    "\0"
-   /* _mesa_function_pool[4639]: Color4ubVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[4673]: Color4ubVertex3fSUN (dynamic) */
    "iiiifff\0"
    "glColor4ubVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[4670]: FogCoordfEXT (will be remapped) */
+   /* _mesa_function_pool[4704]: FogCoordfEXT (will be remapped) */
    "f\0"
    "glFogCoordf\0"
    "glFogCoordfEXT\0"
    "\0"
-   /* _mesa_function_pool[4700]: PointSize (offset 173) */
+   /* _mesa_function_pool[4734]: PointSize (offset 173) */
    "f\0"
    "glPointSize\0"
    "\0"
-   /* _mesa_function_pool[4715]: VertexAttribI2uivEXT (will be remapped) */
+   /* _mesa_function_pool[4749]: VertexAttribI2uivEXT (will be remapped) */
    "ip\0"
    "glVertexAttribI2uivEXT\0"
    "glVertexAttribI2uiv\0"
    "\0"
-   /* _mesa_function_pool[4762]: TexCoord2fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[4796]: TexCoord2fVertex3fSUN (dynamic) */
    "fffff\0"
    "glTexCoord2fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[4793]: PopName (offset 200) */
+   /* _mesa_function_pool[4827]: PopName (offset 200) */
    "\0"
    "glPopName\0"
    "\0"
-   /* _mesa_function_pool[4805]: GlobalAlphaFactoriSUN (dynamic) */
+   /* _mesa_function_pool[4839]: GetSamplerParameterfv (will be remapped) */
+   "iip\0"
+   "glGetSamplerParameterfv\0"
+   "\0"
+   /* _mesa_function_pool[4868]: GlobalAlphaFactoriSUN (dynamic) */
    "i\0"
    "glGlobalAlphaFactoriSUN\0"
    "\0"
-   /* _mesa_function_pool[4832]: VertexAttrib2dNV (will be remapped) */
+   /* _mesa_function_pool[4895]: VertexAttrib2dNV (will be remapped) */
    "idd\0"
    "glVertexAttrib2dNV\0"
    "\0"
-   /* _mesa_function_pool[4856]: GetProgramInfoLog (will be remapped) */
+   /* _mesa_function_pool[4919]: GetProgramInfoLog (will be remapped) */
    "iipp\0"
    "glGetProgramInfoLog\0"
    "\0"
-   /* _mesa_function_pool[4882]: VertexAttrib4NbvARB (will be remapped) */
+   /* _mesa_function_pool[4945]: VertexAttrib4NbvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Nbv\0"
    "glVertexAttrib4NbvARB\0"
    "\0"
-   /* _mesa_function_pool[4927]: GetActiveAttribARB (will be remapped) */
+   /* _mesa_function_pool[4990]: GetActiveAttribARB (will be remapped) */
    "iiipppp\0"
    "glGetActiveAttrib\0"
    "glGetActiveAttribARB\0"
    "\0"
-   /* _mesa_function_pool[4975]: Vertex4sv (offset 149) */
+   /* _mesa_function_pool[5038]: Vertex4sv (offset 149) */
    "p\0"
    "glVertex4sv\0"
    "\0"
-   /* _mesa_function_pool[4990]: VertexAttrib4ubNV (will be remapped) */
+   /* _mesa_function_pool[5053]: VertexAttrib4ubNV (will be remapped) */
    "iiiii\0"
    "glVertexAttrib4ubNV\0"
    "\0"
-   /* _mesa_function_pool[5017]: ClampColor (will be remapped) */
+   /* _mesa_function_pool[5080]: ClampColor (will be remapped) */
    "ii\0"
    "glClampColor\0"
    "\0"
-   /* _mesa_function_pool[5034]: TextureRangeAPPLE (will be remapped) */
+   /* _mesa_function_pool[5097]: TextureRangeAPPLE (will be remapped) */
    "iip\0"
    "glTextureRangeAPPLE\0"
    "\0"
-   /* _mesa_function_pool[5059]: GetTexEnvfv (offset 276) */
+   /* _mesa_function_pool[5122]: GetTexEnvfv (offset 276) */
    "iip\0"
    "glGetTexEnvfv\0"
    "\0"
-   /* _mesa_function_pool[5078]: BindTransformFeedback (will be remapped) */
+   /* _mesa_function_pool[5141]: BindTransformFeedback (will be remapped) */
    "ii\0"
    "glBindTransformFeedback\0"
    "\0"
-   /* _mesa_function_pool[5106]: TexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[5169]: TexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */
    "ffffffffffff\0"
    "glTexCoord2fColor4fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[5159]: Indexub (offset 315) */
+   /* _mesa_function_pool[5222]: Indexub (offset 315) */
    "i\0"
    "glIndexub\0"
    "\0"
-   /* _mesa_function_pool[5172]: ColorMaskIndexedEXT (will be remapped) */
-   "iiiii\0"
-   "glColorMaskIndexedEXT\0"
-   "glColorMaski\0"
-   "\0"
-   /* _mesa_function_pool[5214]: TexEnvi (offset 186) */
+   /* _mesa_function_pool[5235]: TexEnvi (offset 186) */
    "iii\0"
    "glTexEnvi\0"
    "\0"
-   /* _mesa_function_pool[5229]: GetClipPlane (offset 259) */
+   /* _mesa_function_pool[5250]: GetClipPlane (offset 259) */
    "ip\0"
    "glGetClipPlane\0"
    "\0"
-   /* _mesa_function_pool[5248]: CombinerParameterfvNV (will be remapped) */
+   /* _mesa_function_pool[5269]: CombinerParameterfvNV (will be remapped) */
    "ip\0"
    "glCombinerParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[5276]: VertexAttribs3dvNV (will be remapped) */
+   /* _mesa_function_pool[5297]: VertexAttribs3dvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs3dvNV\0"
    "\0"
-   /* _mesa_function_pool[5302]: VertexAttribI2uiEXT (will be remapped) */
+   /* _mesa_function_pool[5323]: VertexAttribI2uiEXT (will be remapped) */
    "iii\0"
    "glVertexAttribI2uiEXT\0"
    "glVertexAttribI2ui\0"
    "\0"
-   /* _mesa_function_pool[5348]: VertexAttribs4fvNV (will be remapped) */
+   /* _mesa_function_pool[5369]: VertexAttribs4fvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs4fvNV\0"
    "\0"
-   /* _mesa_function_pool[5374]: VertexArrayRangeNV (will be remapped) */
+   /* _mesa_function_pool[5395]: VertexArrayRangeNV (will be remapped) */
    "ip\0"
    "glVertexArrayRangeNV\0"
    "\0"
-   /* _mesa_function_pool[5399]: FragmentLightiSGIX (dynamic) */
+   /* _mesa_function_pool[5420]: FragmentLightiSGIX (dynamic) */
    "iii\0"
    "glFragmentLightiSGIX\0"
    "\0"
-   /* _mesa_function_pool[5425]: PolygonOffsetEXT (will be remapped) */
+   /* _mesa_function_pool[5446]: PolygonOffsetEXT (will be remapped) */
    "ff\0"
    "glPolygonOffsetEXT\0"
    "\0"
-   /* _mesa_function_pool[5448]: VertexAttribI4uivEXT (will be remapped) */
+   /* _mesa_function_pool[5469]: VertexAttribI4uivEXT (will be remapped) */
    "ip\0"
    "glVertexAttribI4uivEXT\0"
    "glVertexAttribI4uiv\0"
    "\0"
-   /* _mesa_function_pool[5495]: PollAsyncSGIX (dynamic) */
+   /* _mesa_function_pool[5516]: PollAsyncSGIX (dynamic) */
    "p\0"
    "glPollAsyncSGIX\0"
    "\0"
-   /* _mesa_function_pool[5514]: DeleteFragmentShaderATI (will be remapped) */
+   /* _mesa_function_pool[5535]: DeleteFragmentShaderATI (will be remapped) */
    "i\0"
    "glDeleteFragmentShaderATI\0"
    "\0"
-   /* _mesa_function_pool[5543]: Scaled (offset 301) */
+   /* _mesa_function_pool[5564]: Scaled (offset 301) */
    "ddd\0"
    "glScaled\0"
    "\0"
-   /* _mesa_function_pool[5557]: ResumeTransformFeedback (will be remapped) */
+   /* _mesa_function_pool[5578]: ResumeTransformFeedback (will be remapped) */
    "\0"
    "glResumeTransformFeedback\0"
    "\0"
-   /* _mesa_function_pool[5585]: Scalef (offset 302) */
+   /* _mesa_function_pool[5606]: Scalef (offset 302) */
    "fff\0"
    "glScalef\0"
    "\0"
-   /* _mesa_function_pool[5599]: TexCoord2fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[5620]: TexCoord2fNormal3fVertex3fvSUN (dynamic) */
    "ppp\0"
    "glTexCoord2fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[5637]: MultTransposeMatrixdARB (will be remapped) */
+   /* _mesa_function_pool[5658]: ProgramEnvParameters4fvEXT (will be remapped) */
+   "iiip\0"
+   "glProgramEnvParameters4fvEXT\0"
+   "\0"
+   /* _mesa_function_pool[5693]: MultTransposeMatrixdARB (will be remapped) */
    "p\0"
    "glMultTransposeMatrixd\0"
    "glMultTransposeMatrixdARB\0"
    "\0"
-   /* _mesa_function_pool[5689]: ObjectUnpurgeableAPPLE (will be remapped) */
+   /* _mesa_function_pool[5745]: ColorMaskIndexedEXT (will be remapped) */
+   "iiiii\0"
+   "glColorMaskIndexedEXT\0"
+   "glColorMaski\0"
+   "\0"
+   /* _mesa_function_pool[5787]: ObjectUnpurgeableAPPLE (will be remapped) */
    "iii\0"
    "glObjectUnpurgeableAPPLE\0"
    "\0"
-   /* _mesa_function_pool[5719]: AlphaFunc (offset 240) */
+   /* _mesa_function_pool[5817]: AlphaFunc (offset 240) */
    "if\0"
    "glAlphaFunc\0"
    "\0"
-   /* _mesa_function_pool[5735]: WindowPos2svMESA (will be remapped) */
+   /* _mesa_function_pool[5833]: WindowPos2svMESA (will be remapped) */
    "p\0"
    "glWindowPos2sv\0"
    "glWindowPos2svARB\0"
    "glWindowPos2svMESA\0"
    "\0"
-   /* _mesa_function_pool[5790]: EdgeFlag (offset 41) */
+   /* _mesa_function_pool[5888]: EdgeFlag (offset 41) */
    "i\0"
    "glEdgeFlag\0"
    "\0"
-   /* _mesa_function_pool[5804]: TexCoord2iv (offset 107) */
+   /* _mesa_function_pool[5902]: TexCoord2iv (offset 107) */
    "p\0"
    "glTexCoord2iv\0"
    "\0"
-   /* _mesa_function_pool[5821]: CompressedTexImage1DARB (will be remapped) */
+   /* _mesa_function_pool[5919]: CompressedTexImage1DARB (will be remapped) */
    "iiiiiip\0"
    "glCompressedTexImage1D\0"
    "glCompressedTexImage1DARB\0"
    "\0"
-   /* _mesa_function_pool[5879]: Rotated (offset 299) */
+   /* _mesa_function_pool[5977]: Rotated (offset 299) */
    "dddd\0"
    "glRotated\0"
    "\0"
-   /* _mesa_function_pool[5895]: GetTexParameterIuivEXT (will be remapped) */
+   /* _mesa_function_pool[5993]: GetTexParameterIuivEXT (will be remapped) */
    "iip\0"
    "glGetTexParameterIuivEXT\0"
    "glGetTexParameterIuiv\0"
    "\0"
-   /* _mesa_function_pool[5947]: VertexAttrib2sNV (will be remapped) */
+   /* _mesa_function_pool[6045]: VertexAttrib2sNV (will be remapped) */
    "iii\0"
    "glVertexAttrib2sNV\0"
    "\0"
-   /* _mesa_function_pool[5971]: ReadPixels (offset 256) */
+   /* _mesa_function_pool[6069]: ReadPixels (offset 256) */
    "iiiiiip\0"
    "glReadPixels\0"
    "\0"
-   /* _mesa_function_pool[5993]: EdgeFlagv (offset 42) */
+   /* _mesa_function_pool[6091]: EdgeFlagv (offset 42) */
    "p\0"
    "glEdgeFlagv\0"
    "\0"
-   /* _mesa_function_pool[6008]: NormalPointerListIBM (dynamic) */
+   /* _mesa_function_pool[6106]: NormalPointerListIBM (dynamic) */
    "iipi\0"
    "glNormalPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[6037]: IndexPointerEXT (will be remapped) */
+   /* _mesa_function_pool[6135]: IndexPointerEXT (will be remapped) */
    "iiip\0"
    "glIndexPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[6061]: Color4iv (offset 32) */
+   /* _mesa_function_pool[6159]: Color4iv (offset 32) */
    "p\0"
    "glColor4iv\0"
    "\0"
-   /* _mesa_function_pool[6075]: TexParameterf (offset 178) */
+   /* _mesa_function_pool[6173]: TexParameterf (offset 178) */
    "iif\0"
    "glTexParameterf\0"
    "\0"
-   /* _mesa_function_pool[6096]: TexParameteri (offset 180) */
+   /* _mesa_function_pool[6194]: TexParameteri (offset 180) */
    "iii\0"
    "glTexParameteri\0"
    "\0"
-   /* _mesa_function_pool[6117]: NormalPointerEXT (will be remapped) */
+   /* _mesa_function_pool[6215]: NormalPointerEXT (will be remapped) */
    "iiip\0"
    "glNormalPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[6142]: MultiTexCoord3dARB (offset 392) */
+   /* _mesa_function_pool[6240]: MultiTexCoord3dARB (offset 392) */
    "iddd\0"
    "glMultiTexCoord3d\0"
    "glMultiTexCoord3dARB\0"
    "\0"
-   /* _mesa_function_pool[6187]: MultiTexCoord2iARB (offset 388) */
+   /* _mesa_function_pool[6285]: MultiTexCoord2iARB (offset 388) */
    "iii\0"
    "glMultiTexCoord2i\0"
    "glMultiTexCoord2iARB\0"
    "\0"
-   /* _mesa_function_pool[6231]: DrawPixels (offset 257) */
+   /* _mesa_function_pool[6329]: DrawPixels (offset 257) */
    "iiiip\0"
    "glDrawPixels\0"
    "\0"
-   /* _mesa_function_pool[6251]: ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[6349]: ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (dynamic) */
    "iffffffff\0"
    "glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[6311]: MultiTexCoord2svARB (offset 391) */
+   /* _mesa_function_pool[6409]: MultiTexCoord2svARB (offset 391) */
    "ip\0"
    "glMultiTexCoord2sv\0"
    "glMultiTexCoord2svARB\0"
    "\0"
-   /* _mesa_function_pool[6356]: ReplacementCodeubvSUN (dynamic) */
+   /* _mesa_function_pool[6454]: ReplacementCodeubvSUN (dynamic) */
    "p\0"
    "glReplacementCodeubvSUN\0"
    "\0"
-   /* _mesa_function_pool[6383]: Uniform3iARB (will be remapped) */
+   /* _mesa_function_pool[6481]: Uniform3iARB (will be remapped) */
    "iiii\0"
    "glUniform3i\0"
    "glUniform3iARB\0"
    "\0"
-   /* _mesa_function_pool[6416]: DrawTransformFeedback (will be remapped) */
+   /* _mesa_function_pool[6514]: DrawTransformFeedback (will be remapped) */
    "ii\0"
    "glDrawTransformFeedback\0"
    "\0"
-   /* _mesa_function_pool[6444]: DrawElementsInstancedARB (will be remapped) */
+   /* _mesa_function_pool[6542]: DrawElementsInstancedARB (will be remapped) */
    "iiipi\0"
    "glDrawElementsInstancedARB\0"
    "glDrawElementsInstancedEXT\0"
    "glDrawElementsInstanced\0"
    "\0"
-   /* _mesa_function_pool[6529]: GetShaderInfoLog (will be remapped) */
+   /* _mesa_function_pool[6627]: GetShaderInfoLog (will be remapped) */
    "iipp\0"
    "glGetShaderInfoLog\0"
    "\0"
-   /* _mesa_function_pool[6554]: WeightivARB (dynamic) */
+   /* _mesa_function_pool[6652]: WeightivARB (dynamic) */
    "ip\0"
    "glWeightivARB\0"
    "\0"
-   /* _mesa_function_pool[6572]: PollInstrumentsSGIX (dynamic) */
+   /* _mesa_function_pool[6670]: PollInstrumentsSGIX (dynamic) */
    "p\0"
    "glPollInstrumentsSGIX\0"
    "\0"
-   /* _mesa_function_pool[6597]: GlobalAlphaFactordSUN (dynamic) */
+   /* _mesa_function_pool[6695]: GlobalAlphaFactordSUN (dynamic) */
    "d\0"
    "glGlobalAlphaFactordSUN\0"
    "\0"
-   /* _mesa_function_pool[6624]: GetFinalCombinerInputParameterfvNV (will be remapped) */
+   /* _mesa_function_pool[6722]: GetFinalCombinerInputParameterfvNV (will be remapped) */
    "iip\0"
    "glGetFinalCombinerInputParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[6666]: GenerateMipmapEXT (will be remapped) */
+   /* _mesa_function_pool[6764]: GenerateMipmapEXT (will be remapped) */
    "i\0"
    "glGenerateMipmap\0"
    "glGenerateMipmapEXT\0"
    "\0"
-   /* _mesa_function_pool[6706]: GenLists (offset 5) */
+   /* _mesa_function_pool[6804]: GenLists (offset 5) */
    "i\0"
    "glGenLists\0"
    "\0"
-   /* _mesa_function_pool[6720]: DepthRangef (will be remapped) */
+   /* _mesa_function_pool[6818]: DepthRangef (will be remapped) */
    "ff\0"
    "glDepthRangef\0"
    "\0"
-   /* _mesa_function_pool[6738]: GetMapAttribParameterivNV (dynamic) */
+   /* _mesa_function_pool[6836]: GetMapAttribParameterivNV (dynamic) */
    "iiip\0"
    "glGetMapAttribParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[6772]: CreateShaderObjectARB (will be remapped) */
+   /* _mesa_function_pool[6870]: CreateShaderObjectARB (will be remapped) */
    "i\0"
    "glCreateShaderObjectARB\0"
    "\0"
-   /* _mesa_function_pool[6799]: GetSharpenTexFuncSGIS (dynamic) */
+   /* _mesa_function_pool[6897]: GetSharpenTexFuncSGIS (dynamic) */
    "ip\0"
    "glGetSharpenTexFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[6827]: BufferDataARB (will be remapped) */
+   /* _mesa_function_pool[6925]: BufferDataARB (will be remapped) */
    "iipi\0"
    "glBufferData\0"
    "glBufferDataARB\0"
    "\0"
-   /* _mesa_function_pool[6862]: FlushVertexArrayRangeNV (will be remapped) */
+   /* _mesa_function_pool[6960]: FlushVertexArrayRangeNV (will be remapped) */
    "\0"
    "glFlushVertexArrayRangeNV\0"
    "\0"
-   /* _mesa_function_pool[6890]: MapGrid2d (offset 226) */
+   /* _mesa_function_pool[6988]: MapGrid2d (offset 226) */
    "iddidd\0"
    "glMapGrid2d\0"
    "\0"
-   /* _mesa_function_pool[6910]: MapGrid2f (offset 227) */
+   /* _mesa_function_pool[7008]: MapGrid2f (offset 227) */
    "iffiff\0"
    "glMapGrid2f\0"
    "\0"
-   /* _mesa_function_pool[6930]: SampleMapATI (will be remapped) */
+   /* _mesa_function_pool[7028]: SampleMapATI (will be remapped) */
    "iii\0"
    "glSampleMapATI\0"
    "\0"
-   /* _mesa_function_pool[6950]: VertexPointerEXT (will be remapped) */
+   /* _mesa_function_pool[7048]: VertexPointerEXT (will be remapped) */
    "iiiip\0"
    "glVertexPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[6976]: GetTexFilterFuncSGIS (dynamic) */
+   /* _mesa_function_pool[7074]: GetTexFilterFuncSGIS (dynamic) */
    "iip\0"
    "glGetTexFilterFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[7004]: Scissor (offset 176) */
+   /* _mesa_function_pool[7102]: Scissor (offset 176) */
    "iiii\0"
    "glScissor\0"
    "\0"
-   /* _mesa_function_pool[7020]: Fogf (offset 153) */
+   /* _mesa_function_pool[7118]: Fogf (offset 153) */
    "if\0"
    "glFogf\0"
    "\0"
-   /* _mesa_function_pool[7031]: ReplacementCodeuiColor4ubVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[7129]: ReplacementCodeuiColor4ubVertex3fvSUN (dynamic) */
    "ppp\0"
    "glReplacementCodeuiColor4ubVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[7076]: TexSubImage1D (offset 332) */
+   /* _mesa_function_pool[7174]: TexSubImage1D (offset 332) */
    "iiiiiip\0"
    "glTexSubImage1D\0"
    "glTexSubImage1DEXT\0"
    "\0"
-   /* _mesa_function_pool[7120]: VertexAttrib1sARB (will be remapped) */
+   /* _mesa_function_pool[7218]: VertexAttrib1sARB (will be remapped) */
    "ii\0"
    "glVertexAttrib1s\0"
    "glVertexAttrib1sARB\0"
    "\0"
-   /* _mesa_function_pool[7161]: FenceSync (will be remapped) */
+   /* _mesa_function_pool[7259]: FenceSync (will be remapped) */
    "ii\0"
    "glFenceSync\0"
    "\0"
-   /* _mesa_function_pool[7177]: Color4usv (offset 40) */
+   /* _mesa_function_pool[7275]: Color4usv (offset 40) */
    "p\0"
    "glColor4usv\0"
    "\0"
-   /* _mesa_function_pool[7192]: Fogi (offset 155) */
+   /* _mesa_function_pool[7290]: Fogi (offset 155) */
    "ii\0"
    "glFogi\0"
    "\0"
-   /* _mesa_function_pool[7203]: DepthRange (offset 288) */
+   /* _mesa_function_pool[7301]: DepthRange (offset 288) */
    "dd\0"
    "glDepthRange\0"
    "\0"
-   /* _mesa_function_pool[7220]: RasterPos3iv (offset 75) */
+   /* _mesa_function_pool[7318]: RasterPos3iv (offset 75) */
    "p\0"
    "glRasterPos3iv\0"
    "\0"
-   /* _mesa_function_pool[7238]: FinalCombinerInputNV (will be remapped) */
+   /* _mesa_function_pool[7336]: FinalCombinerInputNV (will be remapped) */
    "iiii\0"
    "glFinalCombinerInputNV\0"
    "\0"
-   /* _mesa_function_pool[7267]: TexCoord2i (offset 106) */
+   /* _mesa_function_pool[7365]: TexCoord2i (offset 106) */
    "ii\0"
    "glTexCoord2i\0"
    "\0"
-   /* _mesa_function_pool[7284]: PixelMapfv (offset 251) */
+   /* _mesa_function_pool[7382]: PixelMapfv (offset 251) */
    "iip\0"
    "glPixelMapfv\0"
    "\0"
-   /* _mesa_function_pool[7302]: Color4ui (offset 37) */
+   /* _mesa_function_pool[7400]: Color4ui (offset 37) */
    "iiii\0"
    "glColor4ui\0"
    "\0"
-   /* _mesa_function_pool[7319]: RasterPos3s (offset 76) */
+   /* _mesa_function_pool[7417]: RasterPos3s (offset 76) */
    "iii\0"
    "glRasterPos3s\0"
    "\0"
-   /* _mesa_function_pool[7338]: Color3usv (offset 24) */
+   /* _mesa_function_pool[7436]: Color3usv (offset 24) */
    "p\0"
    "glColor3usv\0"
    "\0"
-   /* _mesa_function_pool[7353]: FlushRasterSGIX (dynamic) */
+   /* _mesa_function_pool[7451]: FlushRasterSGIX (dynamic) */
    "\0"
    "glFlushRasterSGIX\0"
    "\0"
-   /* _mesa_function_pool[7373]: TexCoord2f (offset 104) */
+   /* _mesa_function_pool[7471]: TexCoord2f (offset 104) */
    "ff\0"
    "glTexCoord2f\0"
    "\0"
-   /* _mesa_function_pool[7390]: ReplacementCodeuiTexCoord2fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[7488]: ReplacementCodeuiTexCoord2fVertex3fSUN (dynamic) */
    "ifffff\0"
    "glReplacementCodeuiTexCoord2fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[7439]: TexCoord2d (offset 102) */
+   /* _mesa_function_pool[7537]: TexCoord2d (offset 102) */
    "dd\0"
    "glTexCoord2d\0"
    "\0"
-   /* _mesa_function_pool[7456]: RasterPos3d (offset 70) */
+   /* _mesa_function_pool[7554]: RasterPos3d (offset 70) */
    "ddd\0"
    "glRasterPos3d\0"
    "\0"
-   /* _mesa_function_pool[7475]: RasterPos3f (offset 72) */
+   /* _mesa_function_pool[7573]: RasterPos3f (offset 72) */
    "fff\0"
    "glRasterPos3f\0"
    "\0"
-   /* _mesa_function_pool[7494]: Uniform1fARB (will be remapped) */
+   /* _mesa_function_pool[7592]: Uniform1fARB (will be remapped) */
    "if\0"
    "glUniform1f\0"
    "glUniform1fARB\0"
    "\0"
-   /* _mesa_function_pool[7525]: AreTexturesResident (offset 322) */
+   /* _mesa_function_pool[7623]: AreTexturesResident (offset 322) */
    "ipp\0"
    "glAreTexturesResident\0"
    "glAreTexturesResidentEXT\0"
    "\0"
-   /* _mesa_function_pool[7577]: TexCoord2s (offset 108) */
+   /* _mesa_function_pool[7675]: TexCoord2s (offset 108) */
    "ii\0"
    "glTexCoord2s\0"
    "\0"
-   /* _mesa_function_pool[7594]: StencilOpSeparate (will be remapped) */
+   /* _mesa_function_pool[7692]: StencilOpSeparate (will be remapped) */
    "iiii\0"
    "glStencilOpSeparate\0"
    "glStencilOpSeparateATI\0"
    "\0"
-   /* _mesa_function_pool[7643]: ColorTableParameteriv (offset 341) */
+   /* _mesa_function_pool[7741]: ColorTableParameteriv (offset 341) */
    "iip\0"
    "glColorTableParameteriv\0"
    "glColorTableParameterivSGI\0"
    "\0"
-   /* _mesa_function_pool[7699]: FogCoordPointerListIBM (dynamic) */
+   /* _mesa_function_pool[7797]: FogCoordPointerListIBM (dynamic) */
    "iipi\0"
    "glFogCoordPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[7730]: WindowPos3dMESA (will be remapped) */
+   /* _mesa_function_pool[7828]: WindowPos3dMESA (will be remapped) */
    "ddd\0"
    "glWindowPos3d\0"
    "glWindowPos3dARB\0"
    "glWindowPos3dMESA\0"
    "\0"
-   /* _mesa_function_pool[7784]: Color4us (offset 39) */
+   /* _mesa_function_pool[7882]: Color4us (offset 39) */
    "iiii\0"
    "glColor4us\0"
    "\0"
-   /* _mesa_function_pool[7801]: PointParameterfvEXT (will be remapped) */
+   /* _mesa_function_pool[7899]: PointParameterfvEXT (will be remapped) */
    "ip\0"
    "glPointParameterfv\0"
    "glPointParameterfvARB\0"
    "glPointParameterfvEXT\0"
    "glPointParameterfvSGIS\0"
    "\0"
-   /* _mesa_function_pool[7891]: Color3bv (offset 10) */
+   /* _mesa_function_pool[7989]: Color3bv (offset 10) */
    "p\0"
    "glColor3bv\0"
    "\0"
-   /* _mesa_function_pool[7905]: WindowPos2fvMESA (will be remapped) */
+   /* _mesa_function_pool[8003]: WindowPos2fvMESA (will be remapped) */
    "p\0"
    "glWindowPos2fv\0"
    "glWindowPos2fvARB\0"
    "glWindowPos2fvMESA\0"
    "\0"
-   /* _mesa_function_pool[7960]: SecondaryColor3bvEXT (will be remapped) */
+   /* _mesa_function_pool[8058]: SecondaryColor3bvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3bv\0"
    "glSecondaryColor3bvEXT\0"
    "\0"
-   /* _mesa_function_pool[8006]: VertexPointerListIBM (dynamic) */
+   /* _mesa_function_pool[8104]: VertexPointerListIBM (dynamic) */
    "iiipi\0"
    "glVertexPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[8036]: GetProgramLocalParameterfvARB (will be remapped) */
+   /* _mesa_function_pool[8134]: GetProgramLocalParameterfvARB (will be remapped) */
    "iip\0"
    "glGetProgramLocalParameterfvARB\0"
    "\0"
-   /* _mesa_function_pool[8073]: FragmentMaterialfSGIX (dynamic) */
+   /* _mesa_function_pool[8171]: FragmentMaterialfSGIX (dynamic) */
    "iif\0"
    "glFragmentMaterialfSGIX\0"
    "\0"
-   /* _mesa_function_pool[8102]: TexCoord2fNormal3fVertex3fSUN (dynamic) */
-   "ffffffff\0"
-   "glTexCoord2fNormal3fVertex3fSUN\0"
+   /* _mesa_function_pool[8200]: BindSampler (will be remapped) */
+   "ii\0"
+   "glBindSampler\0"
    "\0"
-   /* _mesa_function_pool[8144]: RenderbufferStorageEXT (will be remapped) */
+   /* _mesa_function_pool[8218]: RenderbufferStorageEXT (will be remapped) */
    "iiii\0"
    "glRenderbufferStorage\0"
    "glRenderbufferStorageEXT\0"
    "\0"
-   /* _mesa_function_pool[8197]: IsFenceNV (will be remapped) */
+   /* _mesa_function_pool[8271]: IsFenceNV (will be remapped) */
    "i\0"
    "glIsFenceNV\0"
    "\0"
-   /* _mesa_function_pool[8212]: AttachObjectARB (will be remapped) */
+   /* _mesa_function_pool[8286]: AttachObjectARB (will be remapped) */
    "ii\0"
    "glAttachObjectARB\0"
    "\0"
-   /* _mesa_function_pool[8234]: GetFragmentLightivSGIX (dynamic) */
+   /* _mesa_function_pool[8308]: GetFragmentLightivSGIX (dynamic) */
    "iip\0"
    "glGetFragmentLightivSGIX\0"
    "\0"
-   /* _mesa_function_pool[8264]: UniformMatrix2fvARB (will be remapped) */
+   /* _mesa_function_pool[8338]: UniformMatrix2fvARB (will be remapped) */
    "iiip\0"
    "glUniformMatrix2fv\0"
    "glUniformMatrix2fvARB\0"
    "\0"
-   /* _mesa_function_pool[8311]: MultiTexCoord2fARB (offset 386) */
+   /* _mesa_function_pool[8385]: MultiTexCoord2fARB (offset 386) */
    "iff\0"
    "glMultiTexCoord2f\0"
    "glMultiTexCoord2fARB\0"
    "\0"
-   /* _mesa_function_pool[8355]: ColorTable (offset 339) */
+   /* _mesa_function_pool[8429]: ColorTable (offset 339) */
    "iiiiip\0"
    "glColorTable\0"
    "glColorTableSGI\0"
    "glColorTableEXT\0"
    "\0"
-   /* _mesa_function_pool[8408]: IndexPointer (offset 314) */
+   /* _mesa_function_pool[8482]: IndexPointer (offset 314) */
    "iip\0"
    "glIndexPointer\0"
    "\0"
-   /* _mesa_function_pool[8428]: Accum (offset 213) */
+   /* _mesa_function_pool[8502]: Accum (offset 213) */
    "if\0"
    "glAccum\0"
    "\0"
-   /* _mesa_function_pool[8440]: GetTexImage (offset 281) */
+   /* _mesa_function_pool[8514]: GetTexImage (offset 281) */
    "iiiip\0"
    "glGetTexImage\0"
    "\0"
-   /* _mesa_function_pool[8461]: MapControlPointsNV (dynamic) */
+   /* _mesa_function_pool[8535]: MapControlPointsNV (dynamic) */
    "iiiiiiiip\0"
    "glMapControlPointsNV\0"
    "\0"
-   /* _mesa_function_pool[8493]: ConvolutionFilter2D (offset 349) */
+   /* _mesa_function_pool[8567]: ConvolutionFilter2D (offset 349) */
    "iiiiiip\0"
    "glConvolutionFilter2D\0"
    "glConvolutionFilter2DEXT\0"
    "\0"
-   /* _mesa_function_pool[8549]: Finish (offset 216) */
+   /* _mesa_function_pool[8623]: Finish (offset 216) */
    "\0"
    "glFinish\0"
    "\0"
-   /* _mesa_function_pool[8560]: MapParameterfvNV (dynamic) */
+   /* _mesa_function_pool[8634]: MapParameterfvNV (dynamic) */
    "iip\0"
    "glMapParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[8584]: ClearStencil (offset 207) */
+   /* _mesa_function_pool[8658]: ClearStencil (offset 207) */
    "i\0"
    "glClearStencil\0"
    "\0"
-   /* _mesa_function_pool[8602]: VertexAttrib3dvARB (will be remapped) */
+   /* _mesa_function_pool[8676]: VertexAttrib3dvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib3dv\0"
    "glVertexAttrib3dvARB\0"
    "\0"
-   /* _mesa_function_pool[8645]: Uniform4uivEXT (will be remapped) */
+   /* _mesa_function_pool[8719]: Uniform4uivEXT (will be remapped) */
    "iip\0"
    "glUniform4uivEXT\0"
    "glUniform4uiv\0"
    "\0"
-   /* _mesa_function_pool[8681]: HintPGI (dynamic) */
+   /* _mesa_function_pool[8755]: HintPGI (dynamic) */
    "ii\0"
    "glHintPGI\0"
    "\0"
-   /* _mesa_function_pool[8695]: ConvolutionParameteriv (offset 353) */
+   /* _mesa_function_pool[8769]: ConvolutionParameteriv (offset 353) */
    "iip\0"
    "glConvolutionParameteriv\0"
    "glConvolutionParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[8753]: Color4s (offset 33) */
+   /* _mesa_function_pool[8827]: Color4s (offset 33) */
    "iiii\0"
    "glColor4s\0"
    "\0"
-   /* _mesa_function_pool[8769]: InterleavedArrays (offset 317) */
+   /* _mesa_function_pool[8843]: InterleavedArrays (offset 317) */
    "iip\0"
    "glInterleavedArrays\0"
    "\0"
-   /* _mesa_function_pool[8794]: RasterPos2fv (offset 65) */
+   /* _mesa_function_pool[8868]: RasterPos2fv (offset 65) */
    "p\0"
    "glRasterPos2fv\0"
    "\0"
-   /* _mesa_function_pool[8812]: TexCoord1fv (offset 97) */
+   /* _mesa_function_pool[8886]: TexCoord1fv (offset 97) */
    "p\0"
    "glTexCoord1fv\0"
    "\0"
-   /* _mesa_function_pool[8829]: Vertex2d (offset 126) */
+   /* _mesa_function_pool[8903]: Vertex2d (offset 126) */
    "dd\0"
    "glVertex2d\0"
    "\0"
-   /* _mesa_function_pool[8844]: CullParameterdvEXT (dynamic) */
+   /* _mesa_function_pool[8918]: CullParameterdvEXT (dynamic) */
    "ip\0"
    "glCullParameterdvEXT\0"
    "\0"
-   /* _mesa_function_pool[8869]: ProgramNamedParameter4fNV (will be remapped) */
+   /* _mesa_function_pool[8943]: ProgramNamedParameter4fNV (will be remapped) */
    "iipffff\0"
    "glProgramNamedParameter4fNV\0"
    "\0"
-   /* _mesa_function_pool[8906]: Color3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[8980]: Color3fVertex3fSUN (dynamic) */
    "ffffff\0"
    "glColor3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[8935]: ProgramEnvParameter4fvARB (will be remapped) */
+   /* _mesa_function_pool[9009]: ProgramEnvParameter4fvARB (will be remapped) */
    "iip\0"
    "glProgramEnvParameter4fvARB\0"
    "glProgramParameter4fvNV\0"
    "\0"
-   /* _mesa_function_pool[8992]: Color4i (offset 31) */
+   /* _mesa_function_pool[9066]: Color4i (offset 31) */
    "iiii\0"
    "glColor4i\0"
    "\0"
-   /* _mesa_function_pool[9008]: Color4f (offset 29) */
+   /* _mesa_function_pool[9082]: Color4f (offset 29) */
    "ffff\0"
    "glColor4f\0"
    "\0"
-   /* _mesa_function_pool[9024]: RasterPos4fv (offset 81) */
+   /* _mesa_function_pool[9098]: RasterPos4fv (offset 81) */
    "p\0"
    "glRasterPos4fv\0"
    "\0"
-   /* _mesa_function_pool[9042]: Color4d (offset 27) */
+   /* _mesa_function_pool[9116]: Color4d (offset 27) */
    "dddd\0"
    "glColor4d\0"
    "\0"
-   /* _mesa_function_pool[9058]: ClearIndex (offset 205) */
+   /* _mesa_function_pool[9132]: ClearIndex (offset 205) */
    "f\0"
    "glClearIndex\0"
    "\0"
-   /* _mesa_function_pool[9074]: Color4b (offset 25) */
+   /* _mesa_function_pool[9148]: Color4b (offset 25) */
    "iiii\0"
    "glColor4b\0"
    "\0"
-   /* _mesa_function_pool[9090]: LoadMatrixd (offset 292) */
+   /* _mesa_function_pool[9164]: LoadMatrixd (offset 292) */
    "p\0"
    "glLoadMatrixd\0"
    "\0"
-   /* _mesa_function_pool[9107]: FragmentLightModeliSGIX (dynamic) */
+   /* _mesa_function_pool[9181]: FragmentLightModeliSGIX (dynamic) */
    "ii\0"
    "glFragmentLightModeliSGIX\0"
    "\0"
-   /* _mesa_function_pool[9137]: RasterPos2dv (offset 63) */
+   /* _mesa_function_pool[9211]: RasterPos2dv (offset 63) */
    "p\0"
    "glRasterPos2dv\0"
    "\0"
-   /* _mesa_function_pool[9155]: ConvolutionParameterfv (offset 351) */
+   /* _mesa_function_pool[9229]: ConvolutionParameterfv (offset 351) */
    "iip\0"
    "glConvolutionParameterfv\0"
    "glConvolutionParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[9213]: TbufferMask3DFX (dynamic) */
+   /* _mesa_function_pool[9287]: TbufferMask3DFX (dynamic) */
    "i\0"
    "glTbufferMask3DFX\0"
    "\0"
-   /* _mesa_function_pool[9234]: GetTexGendv (offset 278) */
+   /* _mesa_function_pool[9308]: GetTexGendv (offset 278) */
    "iip\0"
    "glGetTexGendv\0"
    "\0"
-   /* _mesa_function_pool[9253]: GetVertexAttribfvNV (will be remapped) */
+   /* _mesa_function_pool[9327]: GetVertexAttribfvNV (will be remapped) */
    "iip\0"
    "glGetVertexAttribfvNV\0"
    "\0"
-   /* _mesa_function_pool[9280]: BeginTransformFeedbackEXT (will be remapped) */
+   /* _mesa_function_pool[9354]: BeginTransformFeedbackEXT (will be remapped) */
    "i\0"
    "glBeginTransformFeedbackEXT\0"
    "glBeginTransformFeedback\0"
    "\0"
-   /* _mesa_function_pool[9336]: LoadProgramNV (will be remapped) */
+   /* _mesa_function_pool[9410]: LoadProgramNV (will be remapped) */
    "iiip\0"
    "glLoadProgramNV\0"
    "\0"
-   /* _mesa_function_pool[9358]: WaitSync (will be remapped) */
+   /* _mesa_function_pool[9432]: WaitSync (will be remapped) */
    "iii\0"
    "glWaitSync\0"
    "\0"
-   /* _mesa_function_pool[9374]: EndList (offset 1) */
+   /* _mesa_function_pool[9448]: EndList (offset 1) */
    "\0"
    "glEndList\0"
    "\0"
-   /* _mesa_function_pool[9386]: VertexAttrib4fvNV (will be remapped) */
+   /* _mesa_function_pool[9460]: VertexAttrib4fvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib4fvNV\0"
    "\0"
-   /* _mesa_function_pool[9410]: GetAttachedObjectsARB (will be remapped) */
+   /* _mesa_function_pool[9484]: GetAttachedObjectsARB (will be remapped) */
    "iipp\0"
    "glGetAttachedObjectsARB\0"
    "\0"
-   /* _mesa_function_pool[9440]: Uniform3fvARB (will be remapped) */
+   /* _mesa_function_pool[9514]: Uniform3fvARB (will be remapped) */
    "iip\0"
    "glUniform3fv\0"
    "glUniform3fvARB\0"
    "\0"
-   /* _mesa_function_pool[9474]: EvalCoord1fv (offset 231) */
+   /* _mesa_function_pool[9548]: EvalCoord1fv (offset 231) */
    "p\0"
    "glEvalCoord1fv\0"
    "\0"
-   /* _mesa_function_pool[9492]: DrawRangeElements (offset 338) */
+   /* _mesa_function_pool[9566]: DrawRangeElements (offset 338) */
    "iiiiip\0"
    "glDrawRangeElements\0"
    "glDrawRangeElementsEXT\0"
    "\0"
-   /* _mesa_function_pool[9543]: EvalMesh2 (offset 238) */
+   /* _mesa_function_pool[9617]: EvalMesh2 (offset 238) */
    "iiiii\0"
    "glEvalMesh2\0"
    "\0"
-   /* _mesa_function_pool[9562]: Vertex4fv (offset 145) */
+   /* _mesa_function_pool[9636]: Vertex4fv (offset 145) */
    "p\0"
    "glVertex4fv\0"
    "\0"
-   /* _mesa_function_pool[9577]: GenTransformFeedbacks (will be remapped) */
+   /* _mesa_function_pool[9651]: GenTransformFeedbacks (will be remapped) */
    "ip\0"
    "glGenTransformFeedbacks\0"
    "\0"
-   /* _mesa_function_pool[9605]: SpriteParameterfvSGIX (dynamic) */
+   /* _mesa_function_pool[9679]: SpriteParameterfvSGIX (dynamic) */
    "ip\0"
    "glSpriteParameterfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[9633]: CheckFramebufferStatusEXT (will be remapped) */
+   /* _mesa_function_pool[9707]: CheckFramebufferStatusEXT (will be remapped) */
    "i\0"
    "glCheckFramebufferStatus\0"
    "glCheckFramebufferStatusEXT\0"
    "\0"
-   /* _mesa_function_pool[9689]: GlobalAlphaFactoruiSUN (dynamic) */
+   /* _mesa_function_pool[9763]: GlobalAlphaFactoruiSUN (dynamic) */
    "i\0"
    "glGlobalAlphaFactoruiSUN\0"
    "\0"
-   /* _mesa_function_pool[9717]: GetHandleARB (will be remapped) */
+   /* _mesa_function_pool[9791]: GetHandleARB (will be remapped) */
    "i\0"
    "glGetHandleARB\0"
    "\0"
-   /* _mesa_function_pool[9735]: GetVertexAttribivARB (will be remapped) */
+   /* _mesa_function_pool[9809]: GetVertexAttribivARB (will be remapped) */
    "iip\0"
    "glGetVertexAttribiv\0"
    "glGetVertexAttribivARB\0"
    "\0"
-   /* _mesa_function_pool[9783]: BlendFunciARB (will be remapped) */
+   /* _mesa_function_pool[9857]: BlendFunciARB (will be remapped) */
    "iii\0"
    "glBlendFunciARB\0"
    "\0"
-   /* _mesa_function_pool[9804]: GetCombinerInputParameterfvNV (will be remapped) */
+   /* _mesa_function_pool[9878]: GetCombinerInputParameterfvNV (will be remapped) */
    "iiiip\0"
    "glGetCombinerInputParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[9843]: GetTexParameterIivEXT (will be remapped) */
+   /* _mesa_function_pool[9917]: GetTexParameterIivEXT (will be remapped) */
    "iip\0"
    "glGetTexParameterIivEXT\0"
    "glGetTexParameterIiv\0"
    "\0"
-   /* _mesa_function_pool[9893]: CreateProgram (will be remapped) */
+   /* _mesa_function_pool[9967]: CreateProgram (will be remapped) */
    "\0"
    "glCreateProgram\0"
    "\0"
-   /* _mesa_function_pool[9911]: LoadTransposeMatrixdARB (will be remapped) */
+   /* _mesa_function_pool[9985]: LoadTransposeMatrixdARB (will be remapped) */
    "p\0"
    "glLoadTransposeMatrixd\0"
    "glLoadTransposeMatrixdARB\0"
    "\0"
-   /* _mesa_function_pool[9963]: ReleaseShaderCompiler (will be remapped) */
+   /* _mesa_function_pool[10037]: ReleaseShaderCompiler (will be remapped) */
    "\0"
    "glReleaseShaderCompiler\0"
    "\0"
-   /* _mesa_function_pool[9989]: GetMinmax (offset 364) */
+   /* _mesa_function_pool[10063]: GetMinmax (offset 364) */
    "iiiip\0"
    "glGetMinmax\0"
    "glGetMinmaxEXT\0"
    "\0"
-   /* _mesa_function_pool[10023]: StencilFuncSeparate (will be remapped) */
+   /* _mesa_function_pool[10097]: StencilFuncSeparate (will be remapped) */
    "iiii\0"
    "glStencilFuncSeparate\0"
    "\0"
-   /* _mesa_function_pool[10051]: SecondaryColor3sEXT (will be remapped) */
+   /* _mesa_function_pool[10125]: SecondaryColor3sEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3s\0"
    "glSecondaryColor3sEXT\0"
    "\0"
-   /* _mesa_function_pool[10097]: Color3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[10171]: Color3fVertex3fvSUN (dynamic) */
    "pp\0"
    "glColor3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[10123]: GetInteger64i_v (will be remapped) */
+   /* _mesa_function_pool[10197]: GetInteger64i_v (will be remapped) */
    "iip\0"
    "glGetInteger64i_v\0"
    "\0"
-   /* _mesa_function_pool[10146]: Normal3fv (offset 57) */
+   /* _mesa_function_pool[10220]: Normal3fv (offset 57) */
    "p\0"
    "glNormal3fv\0"
    "\0"
-   /* _mesa_function_pool[10161]: GlobalAlphaFactorbSUN (dynamic) */
+   /* _mesa_function_pool[10235]: GlobalAlphaFactorbSUN (dynamic) */
    "i\0"
    "glGlobalAlphaFactorbSUN\0"
    "\0"
-   /* _mesa_function_pool[10188]: Color3us (offset 23) */
+   /* _mesa_function_pool[10262]: Color3us (offset 23) */
    "iii\0"
    "glColor3us\0"
    "\0"
-   /* _mesa_function_pool[10204]: ImageTransformParameterfvHP (dynamic) */
+   /* _mesa_function_pool[10278]: ImageTransformParameterfvHP (dynamic) */
    "iip\0"
    "glImageTransformParameterfvHP\0"
    "\0"
-   /* _mesa_function_pool[10239]: VertexAttrib4ivARB (will be remapped) */
+   /* _mesa_function_pool[10313]: VertexAttrib4ivARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4iv\0"
    "glVertexAttrib4ivARB\0"
    "\0"
-   /* _mesa_function_pool[10282]: End (offset 43) */
+   /* _mesa_function_pool[10356]: End (offset 43) */
    "\0"
    "glEnd\0"
    "\0"
-   /* _mesa_function_pool[10290]: VertexAttrib3fNV (will be remapped) */
+   /* _mesa_function_pool[10364]: VertexAttrib3fNV (will be remapped) */
    "ifff\0"
    "glVertexAttrib3fNV\0"
    "\0"
-   /* _mesa_function_pool[10315]: VertexAttribs2dvNV (will be remapped) */
+   /* _mesa_function_pool[10389]: VertexAttribs2dvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs2dvNV\0"
    "\0"
-   /* _mesa_function_pool[10341]: GetQueryObjectui64vEXT (will be remapped) */
+   /* _mesa_function_pool[10415]: GetQueryObjectui64vEXT (will be remapped) */
    "iip\0"
    "glGetQueryObjectui64vEXT\0"
    "\0"
-   /* _mesa_function_pool[10371]: MultiTexCoord3fvARB (offset 395) */
+   /* _mesa_function_pool[10445]: MultiTexCoord3fvARB (offset 395) */
    "ip\0"
    "glMultiTexCoord3fv\0"
    "glMultiTexCoord3fvARB\0"
    "\0"
-   /* _mesa_function_pool[10416]: SecondaryColor3dEXT (will be remapped) */
+   /* _mesa_function_pool[10490]: SecondaryColor3dEXT (will be remapped) */
    "ddd\0"
    "glSecondaryColor3d\0"
    "glSecondaryColor3dEXT\0"
    "\0"
-   /* _mesa_function_pool[10462]: Color3ub (offset 19) */
+   /* _mesa_function_pool[10536]: Color3ub (offset 19) */
    "iii\0"
    "glColor3ub\0"
    "\0"
-   /* _mesa_function_pool[10478]: GetProgramParameterfvNV (will be remapped) */
+   /* _mesa_function_pool[10552]: GetProgramParameterfvNV (will be remapped) */
    "iiip\0"
    "glGetProgramParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[10510]: TangentPointerEXT (dynamic) */
+   /* _mesa_function_pool[10584]: TangentPointerEXT (dynamic) */
    "iip\0"
    "glTangentPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[10535]: Color4fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[10609]: Color4fNormal3fVertex3fvSUN (dynamic) */
    "ppp\0"
    "glColor4fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[10570]: GetInstrumentsSGIX (dynamic) */
+   /* _mesa_function_pool[10644]: GetInstrumentsSGIX (dynamic) */
    "\0"
    "glGetInstrumentsSGIX\0"
    "\0"
-   /* _mesa_function_pool[10593]: GetUniformuivEXT (will be remapped) */
+   /* _mesa_function_pool[10667]: GetUniformuivEXT (will be remapped) */
    "iip\0"
    "glGetUniformuivEXT\0"
    "glGetUniformuiv\0"
    "\0"
-   /* _mesa_function_pool[10633]: Color3ui (offset 21) */
+   /* _mesa_function_pool[10707]: Color3ui (offset 21) */
    "iii\0"
    "glColor3ui\0"
    "\0"
-   /* _mesa_function_pool[10649]: EvalMapsNV (dynamic) */
+   /* _mesa_function_pool[10723]: EvalMapsNV (dynamic) */
    "ii\0"
    "glEvalMapsNV\0"
    "\0"
-   /* _mesa_function_pool[10666]: TexSubImage2D (offset 333) */
+   /* _mesa_function_pool[10740]: TexSubImage2D (offset 333) */
    "iiiiiiiip\0"
    "glTexSubImage2D\0"
    "glTexSubImage2DEXT\0"
    "\0"
-   /* _mesa_function_pool[10712]: FragmentLightivSGIX (dynamic) */
+   /* _mesa_function_pool[10786]: FragmentLightivSGIX (dynamic) */
    "iip\0"
    "glFragmentLightivSGIX\0"
    "\0"
-   /* _mesa_function_pool[10739]: GetTexParameterPointervAPPLE (will be remapped) */
+   /* _mesa_function_pool[10813]: GetTexParameterPointervAPPLE (will be remapped) */
    "iip\0"
    "glGetTexParameterPointervAPPLE\0"
    "\0"
-   /* _mesa_function_pool[10775]: TexGenfv (offset 191) */
+   /* _mesa_function_pool[10849]: TexGenfv (offset 191) */
    "iip\0"
    "glTexGenfv\0"
    "\0"
-   /* _mesa_function_pool[10791]: GetTransformFeedbackVaryingEXT (will be remapped) */
+   /* _mesa_function_pool[10865]: GetTransformFeedbackVaryingEXT (will be remapped) */
    "iiipppp\0"
    "glGetTransformFeedbackVaryingEXT\0"
    "glGetTransformFeedbackVarying\0"
    "\0"
-   /* _mesa_function_pool[10863]: VertexAttrib4bvARB (will be remapped) */
+   /* _mesa_function_pool[10937]: VertexAttrib4bvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4bv\0"
    "glVertexAttrib4bvARB\0"
    "\0"
-   /* _mesa_function_pool[10906]: ShaderBinary (will be remapped) */
+   /* _mesa_function_pool[10980]: ShaderBinary (will be remapped) */
    "ipipi\0"
    "glShaderBinary\0"
    "\0"
-   /* _mesa_function_pool[10928]: GetIntegerIndexedvEXT (will be remapped) */
+   /* _mesa_function_pool[11002]: GetIntegerIndexedvEXT (will be remapped) */
    "iip\0"
    "glGetIntegerIndexedvEXT\0"
    "glGetIntegeri_v\0"
    "\0"
-   /* _mesa_function_pool[10973]: MultiTexCoord4sARB (offset 406) */
+   /* _mesa_function_pool[11047]: MultiTexCoord4sARB (offset 406) */
    "iiiii\0"
    "glMultiTexCoord4s\0"
    "glMultiTexCoord4sARB\0"
    "\0"
-   /* _mesa_function_pool[11019]: GetFragmentMaterialivSGIX (dynamic) */
+   /* _mesa_function_pool[11093]: GetFragmentMaterialivSGIX (dynamic) */
    "iip\0"
    "glGetFragmentMaterialivSGIX\0"
    "\0"
-   /* _mesa_function_pool[11052]: WindowPos4dMESA (will be remapped) */
+   /* _mesa_function_pool[11126]: WindowPos4dMESA (will be remapped) */
    "dddd\0"
    "glWindowPos4dMESA\0"
    "\0"
-   /* _mesa_function_pool[11076]: WeightPointerARB (dynamic) */
+   /* _mesa_function_pool[11150]: WeightPointerARB (dynamic) */
    "iiip\0"
    "glWeightPointerARB\0"
    "\0"
-   /* _mesa_function_pool[11101]: WindowPos2dMESA (will be remapped) */
+   /* _mesa_function_pool[11175]: WindowPos2dMESA (will be remapped) */
    "dd\0"
    "glWindowPos2d\0"
    "glWindowPos2dARB\0"
    "glWindowPos2dMESA\0"
    "\0"
-   /* _mesa_function_pool[11154]: FramebufferTexture3DEXT (will be remapped) */
+   /* _mesa_function_pool[11228]: FramebufferTexture3DEXT (will be remapped) */
    "iiiiii\0"
    "glFramebufferTexture3D\0"
    "glFramebufferTexture3DEXT\0"
    "\0"
-   /* _mesa_function_pool[11211]: BlendEquation (offset 337) */
+   /* _mesa_function_pool[11285]: BlendEquation (offset 337) */
    "i\0"
    "glBlendEquation\0"
    "glBlendEquationEXT\0"
    "\0"
-   /* _mesa_function_pool[11249]: VertexAttrib3dNV (will be remapped) */
+   /* _mesa_function_pool[11323]: VertexAttrib3dNV (will be remapped) */
    "iddd\0"
    "glVertexAttrib3dNV\0"
    "\0"
-   /* _mesa_function_pool[11274]: VertexAttrib3dARB (will be remapped) */
+   /* _mesa_function_pool[11348]: VertexAttrib3dARB (will be remapped) */
    "iddd\0"
    "glVertexAttrib3d\0"
    "glVertexAttrib3dARB\0"
    "\0"
-   /* _mesa_function_pool[11317]: VertexAttribI4usvEXT (will be remapped) */
+   /* _mesa_function_pool[11391]: VertexAttribI4usvEXT (will be remapped) */
    "ip\0"
    "glVertexAttribI4usvEXT\0"
    "glVertexAttribI4usv\0"
    "\0"
-   /* _mesa_function_pool[11364]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[11438]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */
    "ppppp\0"
    "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[11428]: VertexAttrib4fARB (will be remapped) */
+   /* _mesa_function_pool[11502]: VertexAttrib4fARB (will be remapped) */
    "iffff\0"
    "glVertexAttrib4f\0"
    "glVertexAttrib4fARB\0"
    "\0"
-   /* _mesa_function_pool[11472]: GetError (offset 261) */
+   /* _mesa_function_pool[11546]: GetError (offset 261) */
    "\0"
    "glGetError\0"
    "\0"
-   /* _mesa_function_pool[11485]: IndexFuncEXT (dynamic) */
+   /* _mesa_function_pool[11559]: IndexFuncEXT (dynamic) */
    "if\0"
    "glIndexFuncEXT\0"
    "\0"
-   /* _mesa_function_pool[11504]: TexCoord3dv (offset 111) */
+   /* _mesa_function_pool[11578]: TexCoord3dv (offset 111) */
    "p\0"
    "glTexCoord3dv\0"
    "\0"
-   /* _mesa_function_pool[11521]: Indexdv (offset 45) */
+   /* _mesa_function_pool[11595]: Indexdv (offset 45) */
    "p\0"
    "glIndexdv\0"
    "\0"
-   /* _mesa_function_pool[11534]: FramebufferTexture2DEXT (will be remapped) */
+   /* _mesa_function_pool[11608]: FramebufferTexture2DEXT (will be remapped) */
    "iiiii\0"
    "glFramebufferTexture2D\0"
    "glFramebufferTexture2DEXT\0"
    "\0"
-   /* _mesa_function_pool[11590]: Normal3s (offset 60) */
+   /* _mesa_function_pool[11664]: Normal3s (offset 60) */
    "iii\0"
    "glNormal3s\0"
    "\0"
-   /* _mesa_function_pool[11606]: GetObjectParameterivAPPLE (will be remapped) */
+   /* _mesa_function_pool[11680]: GetObjectParameterivAPPLE (will be remapped) */
    "iiip\0"
    "glGetObjectParameterivAPPLE\0"
    "\0"
-   /* _mesa_function_pool[11640]: PushName (offset 201) */
+   /* _mesa_function_pool[11714]: PushName (offset 201) */
    "i\0"
    "glPushName\0"
    "\0"
-   /* _mesa_function_pool[11654]: MultiTexCoord2dvARB (offset 385) */
+   /* _mesa_function_pool[11728]: MultiTexCoord2dvARB (offset 385) */
    "ip\0"
    "glMultiTexCoord2dv\0"
    "glMultiTexCoord2dvARB\0"
    "\0"
-   /* _mesa_function_pool[11699]: CullParameterfvEXT (dynamic) */
+   /* _mesa_function_pool[11773]: CullParameterfvEXT (dynamic) */
    "ip\0"
    "glCullParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[11724]: Normal3i (offset 58) */
+   /* _mesa_function_pool[11798]: Normal3i (offset 58) */
    "iii\0"
    "glNormal3i\0"
    "\0"
-   /* _mesa_function_pool[11740]: ProgramNamedParameter4fvNV (will be remapped) */
+   /* _mesa_function_pool[11814]: ProgramNamedParameter4fvNV (will be remapped) */
    "iipp\0"
    "glProgramNamedParameter4fvNV\0"
    "\0"
-   /* _mesa_function_pool[11775]: SecondaryColorPointerEXT (will be remapped) */
+   /* _mesa_function_pool[11849]: SecondaryColorPointerEXT (will be remapped) */
    "iiip\0"
    "glSecondaryColorPointer\0"
    "glSecondaryColorPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[11832]: VertexAttrib4fvARB (will be remapped) */
+   /* _mesa_function_pool[11906]: VertexAttrib4fvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4fv\0"
    "glVertexAttrib4fvARB\0"
    "\0"
-   /* _mesa_function_pool[11875]: ColorPointerListIBM (dynamic) */
-   "iiipi\0"
-   "glColorPointerListIBM\0"
+   /* _mesa_function_pool[11949]: PixelTexGenSGIX (will be remapped) */
+   "i\0"
+   "glPixelTexGenSGIX\0"
    "\0"
-   /* _mesa_function_pool[11904]: GetActiveUniformARB (will be remapped) */
+   /* _mesa_function_pool[11970]: GetActiveUniformARB (will be remapped) */
    "iiipppp\0"
    "glGetActiveUniform\0"
    "glGetActiveUniformARB\0"
    "\0"
-   /* _mesa_function_pool[11954]: ImageTransformParameteriHP (dynamic) */
+   /* _mesa_function_pool[12020]: ImageTransformParameteriHP (dynamic) */
    "iii\0"
    "glImageTransformParameteriHP\0"
    "\0"
-   /* _mesa_function_pool[11988]: Normal3b (offset 52) */
+   /* _mesa_function_pool[12054]: Normal3b (offset 52) */
    "iii\0"
    "glNormal3b\0"
    "\0"
-   /* _mesa_function_pool[12004]: Normal3d (offset 54) */
+   /* _mesa_function_pool[12070]: Normal3d (offset 54) */
    "ddd\0"
    "glNormal3d\0"
    "\0"
-   /* _mesa_function_pool[12020]: Uniform1uiEXT (will be remapped) */
+   /* _mesa_function_pool[12086]: Uniform1uiEXT (will be remapped) */
    "ii\0"
    "glUniform1uiEXT\0"
    "glUniform1ui\0"
    "\0"
-   /* _mesa_function_pool[12053]: Normal3f (offset 56) */
+   /* _mesa_function_pool[12119]: Normal3f (offset 56) */
    "fff\0"
    "glNormal3f\0"
    "\0"
-   /* _mesa_function_pool[12069]: MultiTexCoord1svARB (offset 383) */
+   /* _mesa_function_pool[12135]: MultiTexCoord1svARB (offset 383) */
    "ip\0"
    "glMultiTexCoord1sv\0"
    "glMultiTexCoord1svARB\0"
    "\0"
-   /* _mesa_function_pool[12114]: Indexi (offset 48) */
+   /* _mesa_function_pool[12180]: Indexi (offset 48) */
    "i\0"
    "glIndexi\0"
    "\0"
-   /* _mesa_function_pool[12126]: EGLImageTargetTexture2DOES (will be remapped) */
+   /* _mesa_function_pool[12192]: EGLImageTargetTexture2DOES (will be remapped) */
    "ip\0"
    "glEGLImageTargetTexture2DOES\0"
    "\0"
-   /* _mesa_function_pool[12159]: EndQueryARB (will be remapped) */
+   /* _mesa_function_pool[12225]: EndQueryARB (will be remapped) */
    "i\0"
    "glEndQuery\0"
    "glEndQueryARB\0"
    "\0"
-   /* _mesa_function_pool[12187]: DeleteFencesNV (will be remapped) */
+   /* _mesa_function_pool[12253]: DeleteFencesNV (will be remapped) */
    "ip\0"
    "glDeleteFencesNV\0"
    "\0"
-   /* _mesa_function_pool[12208]: DeformationMap3dSGIX (dynamic) */
-   "iddiiddiiddiip\0"
-   "glDeformationMap3dSGIX\0"
+   /* _mesa_function_pool[12274]: ColorPointerListIBM (dynamic) */
+   "iiipi\0"
+   "glColorPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[12247]: BindBufferRangeEXT (will be remapped) */
+   /* _mesa_function_pool[12303]: BindBufferRangeEXT (will be remapped) */
    "iiiii\0"
    "glBindBufferRangeEXT\0"
    "glBindBufferRange\0"
    "\0"
-   /* _mesa_function_pool[12293]: DepthMask (offset 211) */
+   /* _mesa_function_pool[12349]: DepthMask (offset 211) */
    "i\0"
    "glDepthMask\0"
    "\0"
-   /* _mesa_function_pool[12308]: IsShader (will be remapped) */
+   /* _mesa_function_pool[12364]: IsShader (will be remapped) */
    "i\0"
    "glIsShader\0"
    "\0"
-   /* _mesa_function_pool[12322]: Indexf (offset 46) */
+   /* _mesa_function_pool[12378]: Indexf (offset 46) */
    "f\0"
    "glIndexf\0"
    "\0"
-   /* _mesa_function_pool[12334]: GetImageTransformParameterivHP (dynamic) */
+   /* _mesa_function_pool[12390]: GetImageTransformParameterivHP (dynamic) */
    "iip\0"
    "glGetImageTransformParameterivHP\0"
    "\0"
-   /* _mesa_function_pool[12372]: Indexd (offset 44) */
+   /* _mesa_function_pool[12428]: Indexd (offset 44) */
    "d\0"
    "glIndexd\0"
    "\0"
-   /* _mesa_function_pool[12384]: GetMaterialiv (offset 270) */
+   /* _mesa_function_pool[12440]: GetMaterialiv (offset 270) */
    "iip\0"
    "glGetMaterialiv\0"
    "\0"
-   /* _mesa_function_pool[12405]: StencilOp (offset 244) */
+   /* _mesa_function_pool[12461]: StencilOp (offset 244) */
    "iii\0"
    "glStencilOp\0"
    "\0"
-   /* _mesa_function_pool[12422]: WindowPos4ivMESA (will be remapped) */
+   /* _mesa_function_pool[12478]: WindowPos4ivMESA (will be remapped) */
    "p\0"
    "glWindowPos4ivMESA\0"
    "\0"
-   /* _mesa_function_pool[12444]: FramebufferTextureLayer (dynamic) */
+   /* _mesa_function_pool[12500]: FramebufferTextureLayer (dynamic) */
    "iiiii\0"
    "glFramebufferTextureLayerARB\0"
    "\0"
-   /* _mesa_function_pool[12480]: MultiTexCoord3svARB (offset 399) */
+   /* _mesa_function_pool[12536]: MultiTexCoord3svARB (offset 399) */
    "ip\0"
    "glMultiTexCoord3sv\0"
    "glMultiTexCoord3svARB\0"
    "\0"
-   /* _mesa_function_pool[12525]: TexEnvfv (offset 185) */
+   /* _mesa_function_pool[12581]: TexEnvfv (offset 185) */
    "iip\0"
    "glTexEnvfv\0"
    "\0"
-   /* _mesa_function_pool[12541]: MultiTexCoord4iARB (offset 404) */
+   /* _mesa_function_pool[12597]: MultiTexCoord4iARB (offset 404) */
    "iiiii\0"
    "glMultiTexCoord4i\0"
    "glMultiTexCoord4iARB\0"
    "\0"
-   /* _mesa_function_pool[12587]: Indexs (offset 50) */
+   /* _mesa_function_pool[12643]: Indexs (offset 50) */
    "i\0"
    "glIndexs\0"
    "\0"
-   /* _mesa_function_pool[12599]: Binormal3ivEXT (dynamic) */
+   /* _mesa_function_pool[12655]: Binormal3ivEXT (dynamic) */
    "p\0"
    "glBinormal3ivEXT\0"
    "\0"
-   /* _mesa_function_pool[12619]: ResizeBuffersMESA (will be remapped) */
+   /* _mesa_function_pool[12675]: ResizeBuffersMESA (will be remapped) */
    "\0"
    "glResizeBuffersMESA\0"
    "\0"
-   /* _mesa_function_pool[12641]: BlendFuncSeparateiARB (will be remapped) */
+   /* _mesa_function_pool[12697]: BlendFuncSeparateiARB (will be remapped) */
    "iiiii\0"
    "glBlendFuncSeparateiARB\0"
    "\0"
-   /* _mesa_function_pool[12672]: GetUniformivARB (will be remapped) */
+   /* _mesa_function_pool[12728]: GetUniformivARB (will be remapped) */
    "iip\0"
    "glGetUniformiv\0"
    "glGetUniformivARB\0"
    "\0"
-   /* _mesa_function_pool[12710]: PixelTexGenParameteriSGIS (will be remapped) */
+   /* _mesa_function_pool[12766]: PixelTexGenParameteriSGIS (will be remapped) */
    "ii\0"
    "glPixelTexGenParameteriSGIS\0"
    "\0"
-   /* _mesa_function_pool[12742]: VertexPointervINTEL (dynamic) */
+   /* _mesa_function_pool[12798]: VertexPointervINTEL (dynamic) */
    "iip\0"
    "glVertexPointervINTEL\0"
    "\0"
-   /* _mesa_function_pool[12769]: Vertex2i (offset 130) */
+   /* _mesa_function_pool[12825]: Vertex2i (offset 130) */
    "ii\0"
    "glVertex2i\0"
    "\0"
-   /* _mesa_function_pool[12784]: LoadMatrixf (offset 291) */
+   /* _mesa_function_pool[12840]: LoadMatrixf (offset 291) */
    "p\0"
    "glLoadMatrixf\0"
    "\0"
-   /* _mesa_function_pool[12801]: VertexAttribI1uivEXT (will be remapped) */
+   /* _mesa_function_pool[12857]: VertexAttribI1uivEXT (will be remapped) */
    "ip\0"
    "glVertexAttribI1uivEXT\0"
    "glVertexAttribI1uiv\0"
    "\0"
-   /* _mesa_function_pool[12848]: Vertex2f (offset 128) */
+   /* _mesa_function_pool[12904]: Vertex2f (offset 128) */
    "ff\0"
    "glVertex2f\0"
    "\0"
-   /* _mesa_function_pool[12863]: ReplacementCodeuiColor4fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[12919]: ReplacementCodeuiColor4fNormal3fVertex3fvSUN (dynamic) */
    "pppp\0"
    "glReplacementCodeuiColor4fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[12916]: Color4bv (offset 26) */
+   /* _mesa_function_pool[12972]: Color4bv (offset 26) */
    "p\0"
    "glColor4bv\0"
    "\0"
-   /* _mesa_function_pool[12930]: VertexPointer (offset 321) */
+   /* _mesa_function_pool[12986]: VertexPointer (offset 321) */
    "iiip\0"
    "glVertexPointer\0"
    "\0"
-   /* _mesa_function_pool[12952]: SecondaryColor3uiEXT (will be remapped) */
+   /* _mesa_function_pool[13008]: SecondaryColor3uiEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3ui\0"
    "glSecondaryColor3uiEXT\0"
    "\0"
-   /* _mesa_function_pool[13000]: StartInstrumentsSGIX (dynamic) */
+   /* _mesa_function_pool[13056]: StartInstrumentsSGIX (dynamic) */
    "\0"
    "glStartInstrumentsSGIX\0"
    "\0"
-   /* _mesa_function_pool[13025]: SecondaryColor3usvEXT (will be remapped) */
+   /* _mesa_function_pool[13081]: SecondaryColor3usvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3usv\0"
    "glSecondaryColor3usvEXT\0"
    "\0"
-   /* _mesa_function_pool[13073]: VertexAttrib2fvNV (will be remapped) */
+   /* _mesa_function_pool[13129]: VertexAttrib2fvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib2fvNV\0"
    "\0"
-   /* _mesa_function_pool[13097]: ProgramLocalParameter4dvARB (will be remapped) */
+   /* _mesa_function_pool[13153]: ProgramLocalParameter4dvARB (will be remapped) */
    "iip\0"
    "glProgramLocalParameter4dvARB\0"
    "\0"
-   /* _mesa_function_pool[13132]: DeleteLists (offset 4) */
+   /* _mesa_function_pool[13188]: DeleteLists (offset 4) */
    "ii\0"
    "glDeleteLists\0"
    "\0"
-   /* _mesa_function_pool[13150]: LogicOp (offset 242) */
+   /* _mesa_function_pool[13206]: LogicOp (offset 242) */
    "i\0"
    "glLogicOp\0"
    "\0"
-   /* _mesa_function_pool[13163]: MatrixIndexuivARB (dynamic) */
+   /* _mesa_function_pool[13219]: MatrixIndexuivARB (dynamic) */
    "ip\0"
    "glMatrixIndexuivARB\0"
    "\0"
-   /* _mesa_function_pool[13187]: Vertex2s (offset 132) */
+   /* _mesa_function_pool[13243]: Vertex2s (offset 132) */
    "ii\0"
    "glVertex2s\0"
    "\0"
-   /* _mesa_function_pool[13202]: RenderbufferStorageMultisample (will be remapped) */
+   /* _mesa_function_pool[13258]: RenderbufferStorageMultisample (will be remapped) */
    "iiiii\0"
    "glRenderbufferStorageMultisample\0"
    "glRenderbufferStorageMultisampleEXT\0"
    "\0"
-   /* _mesa_function_pool[13278]: TexCoord4fv (offset 121) */
+   /* _mesa_function_pool[13334]: TexCoord4fv (offset 121) */
    "p\0"
    "glTexCoord4fv\0"
    "\0"
-   /* _mesa_function_pool[13295]: Tangent3sEXT (dynamic) */
+   /* _mesa_function_pool[13351]: Tangent3sEXT (dynamic) */
    "iii\0"
    "glTangent3sEXT\0"
    "\0"
-   /* _mesa_function_pool[13315]: GlobalAlphaFactorfSUN (dynamic) */
+   /* _mesa_function_pool[13371]: GlobalAlphaFactorfSUN (dynamic) */
    "f\0"
    "glGlobalAlphaFactorfSUN\0"
    "\0"
-   /* _mesa_function_pool[13342]: MultiTexCoord3iARB (offset 396) */
+   /* _mesa_function_pool[13398]: MultiTexCoord3iARB (offset 396) */
    "iiii\0"
    "glMultiTexCoord3i\0"
    "glMultiTexCoord3iARB\0"
    "\0"
-   /* _mesa_function_pool[13387]: IsProgram (will be remapped) */
+   /* _mesa_function_pool[13443]: IsProgram (will be remapped) */
    "i\0"
    "glIsProgram\0"
    "\0"
-   /* _mesa_function_pool[13402]: TexCoordPointerListIBM (dynamic) */
+   /* _mesa_function_pool[13458]: TexCoordPointerListIBM (dynamic) */
    "iiipi\0"
    "glTexCoordPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[13434]: VertexAttribI4svEXT (will be remapped) */
+   /* _mesa_function_pool[13490]: VertexAttribI4svEXT (will be remapped) */
    "ip\0"
    "glVertexAttribI4svEXT\0"
    "glVertexAttribI4sv\0"
    "\0"
-   /* _mesa_function_pool[13479]: GlobalAlphaFactorusSUN (dynamic) */
+   /* _mesa_function_pool[13535]: GlobalAlphaFactorusSUN (dynamic) */
    "i\0"
    "glGlobalAlphaFactorusSUN\0"
    "\0"
-   /* _mesa_function_pool[13507]: VertexAttrib2dvNV (will be remapped) */
+   /* _mesa_function_pool[13563]: VertexAttrib2dvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib2dvNV\0"
    "\0"
-   /* _mesa_function_pool[13531]: FramebufferRenderbufferEXT (will be remapped) */
+   /* _mesa_function_pool[13587]: FramebufferRenderbufferEXT (will be remapped) */
    "iiii\0"
    "glFramebufferRenderbuffer\0"
    "glFramebufferRenderbufferEXT\0"
    "\0"
-   /* _mesa_function_pool[13592]: ClearBufferuiv (will be remapped) */
+   /* _mesa_function_pool[13648]: ClearBufferuiv (will be remapped) */
    "iip\0"
    "glClearBufferuiv\0"
    "\0"
-   /* _mesa_function_pool[13614]: VertexAttrib1dvNV (will be remapped) */
+   /* _mesa_function_pool[13670]: VertexAttrib1dvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib1dvNV\0"
    "\0"
-   /* _mesa_function_pool[13638]: GenTextures (offset 328) */
+   /* _mesa_function_pool[13694]: GenTextures (offset 328) */
    "ip\0"
    "glGenTextures\0"
    "glGenTexturesEXT\0"
    "\0"
-   /* _mesa_function_pool[13673]: FramebufferTextureARB (will be remapped) */
+   /* _mesa_function_pool[13729]: FramebufferTextureARB (will be remapped) */
    "iiii\0"
    "glFramebufferTextureARB\0"
    "\0"
-   /* _mesa_function_pool[13703]: SetFenceNV (will be remapped) */
+   /* _mesa_function_pool[13759]: SetFenceNV (will be remapped) */
    "ii\0"
    "glSetFenceNV\0"
    "\0"
-   /* _mesa_function_pool[13720]: FramebufferTexture1DEXT (will be remapped) */
+   /* _mesa_function_pool[13776]: FramebufferTexture1DEXT (will be remapped) */
    "iiiii\0"
    "glFramebufferTexture1D\0"
    "glFramebufferTexture1DEXT\0"
    "\0"
-   /* _mesa_function_pool[13776]: GetCombinerOutputParameterivNV (will be remapped) */
+   /* _mesa_function_pool[13832]: GetCombinerOutputParameterivNV (will be remapped) */
    "iiip\0"
    "glGetCombinerOutputParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[13815]: PixelTexGenParameterivSGIS (will be remapped) */
+   /* _mesa_function_pool[13871]: MultiModeDrawArraysIBM (will be remapped) */
+   "pppii\0"
+   "glMultiModeDrawArraysIBM\0"
+   "\0"
+   /* _mesa_function_pool[13903]: PixelTexGenParameterivSGIS (will be remapped) */
    "ip\0"
    "glPixelTexGenParameterivSGIS\0"
    "\0"
-   /* _mesa_function_pool[13848]: TextureNormalEXT (dynamic) */
+   /* _mesa_function_pool[13936]: TextureNormalEXT (dynamic) */
    "i\0"
    "glTextureNormalEXT\0"
    "\0"
-   /* _mesa_function_pool[13870]: IndexPointerListIBM (dynamic) */
+   /* _mesa_function_pool[13958]: IndexPointerListIBM (dynamic) */
    "iipi\0"
    "glIndexPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[13898]: WeightfvARB (dynamic) */
+   /* _mesa_function_pool[13986]: WeightfvARB (dynamic) */
    "ip\0"
    "glWeightfvARB\0"
    "\0"
-   /* _mesa_function_pool[13916]: RasterPos2sv (offset 69) */
+   /* _mesa_function_pool[14004]: GetCombinerOutputParameterfvNV (will be remapped) */
+   "iiip\0"
+   "glGetCombinerOutputParameterfvNV\0"
+   "\0"
+   /* _mesa_function_pool[14043]: RasterPos2sv (offset 69) */
    "p\0"
    "glRasterPos2sv\0"
    "\0"
-   /* _mesa_function_pool[13934]: Color4ubv (offset 36) */
+   /* _mesa_function_pool[14061]: Color4ubv (offset 36) */
    "p\0"
    "glColor4ubv\0"
    "\0"
-   /* _mesa_function_pool[13949]: DrawBuffer (offset 202) */
+   /* _mesa_function_pool[14076]: DrawBuffer (offset 202) */
    "i\0"
    "glDrawBuffer\0"
    "\0"
-   /* _mesa_function_pool[13965]: TexCoord2fv (offset 105) */
+   /* _mesa_function_pool[14092]: TexCoord2fv (offset 105) */
    "p\0"
    "glTexCoord2fv\0"
    "\0"
-   /* _mesa_function_pool[13982]: WindowPos4fMESA (will be remapped) */
+   /* _mesa_function_pool[14109]: WindowPos4fMESA (will be remapped) */
    "ffff\0"
    "glWindowPos4fMESA\0"
    "\0"
-   /* _mesa_function_pool[14006]: TexCoord1sv (offset 101) */
+   /* _mesa_function_pool[14133]: TexCoord1sv (offset 101) */
    "p\0"
    "glTexCoord1sv\0"
    "\0"
-   /* _mesa_function_pool[14023]: WindowPos3dvMESA (will be remapped) */
+   /* _mesa_function_pool[14150]: WindowPos3dvMESA (will be remapped) */
    "p\0"
    "glWindowPos3dv\0"
    "glWindowPos3dvARB\0"
    "glWindowPos3dvMESA\0"
    "\0"
-   /* _mesa_function_pool[14078]: DepthFunc (offset 245) */
+   /* _mesa_function_pool[14205]: DepthFunc (offset 245) */
    "i\0"
    "glDepthFunc\0"
    "\0"
-   /* _mesa_function_pool[14093]: PixelMapusv (offset 253) */
+   /* _mesa_function_pool[14220]: PixelMapusv (offset 253) */
    "iip\0"
    "glPixelMapusv\0"
    "\0"
-   /* _mesa_function_pool[14112]: GetQueryObjecti64vEXT (will be remapped) */
+   /* _mesa_function_pool[14239]: GetQueryObjecti64vEXT (will be remapped) */
    "iip\0"
    "glGetQueryObjecti64vEXT\0"
    "\0"
-   /* _mesa_function_pool[14141]: MultiTexCoord1dARB (offset 376) */
+   /* _mesa_function_pool[14268]: MultiTexCoord1dARB (offset 376) */
    "id\0"
    "glMultiTexCoord1d\0"
    "glMultiTexCoord1dARB\0"
    "\0"
-   /* _mesa_function_pool[14184]: PointParameterivNV (will be remapped) */
+   /* _mesa_function_pool[14311]: PointParameterivNV (will be remapped) */
    "ip\0"
    "glPointParameteriv\0"
    "glPointParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[14228]: BlendFunc (offset 241) */
+   /* _mesa_function_pool[14355]: IsSampler (will be remapped) */
+   "i\0"
+   "glIsSampler\0"
+   "\0"
+   /* _mesa_function_pool[14370]: BlendFunc (offset 241) */
    "ii\0"
    "glBlendFunc\0"
    "\0"
-   /* _mesa_function_pool[14244]: EndTransformFeedbackEXT (will be remapped) */
+   /* _mesa_function_pool[14386]: EndTransformFeedbackEXT (will be remapped) */
    "\0"
    "glEndTransformFeedbackEXT\0"
    "glEndTransformFeedback\0"
    "\0"
-   /* _mesa_function_pool[14295]: Uniform2fvARB (will be remapped) */
+   /* _mesa_function_pool[14437]: Uniform2fvARB (will be remapped) */
    "iip\0"
    "glUniform2fv\0"
    "glUniform2fvARB\0"
    "\0"
-   /* _mesa_function_pool[14329]: BufferParameteriAPPLE (will be remapped) */
+   /* _mesa_function_pool[14471]: BufferParameteriAPPLE (will be remapped) */
    "iii\0"
    "glBufferParameteriAPPLE\0"
    "\0"
-   /* _mesa_function_pool[14358]: MultiTexCoord3dvARB (offset 393) */
+   /* _mesa_function_pool[14500]: MultiTexCoord3dvARB (offset 393) */
    "ip\0"
    "glMultiTexCoord3dv\0"
    "glMultiTexCoord3dvARB\0"
    "\0"
-   /* _mesa_function_pool[14403]: ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[14545]: ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (dynamic) */
    "pppp\0"
    "glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[14459]: DeleteObjectARB (will be remapped) */
+   /* _mesa_function_pool[14601]: DeleteObjectARB (will be remapped) */
    "i\0"
    "glDeleteObjectARB\0"
    "\0"
-   /* _mesa_function_pool[14480]: GetShaderPrecisionFormat (will be remapped) */
+   /* _mesa_function_pool[14622]: GetShaderPrecisionFormat (will be remapped) */
    "iipp\0"
    "glGetShaderPrecisionFormat\0"
    "\0"
-   /* _mesa_function_pool[14513]: MatrixIndexPointerARB (dynamic) */
+   /* _mesa_function_pool[14655]: MatrixIndexPointerARB (dynamic) */
    "iiip\0"
    "glMatrixIndexPointerARB\0"
    "\0"
-   /* _mesa_function_pool[14543]: ProgramNamedParameter4dvNV (will be remapped) */
+   /* _mesa_function_pool[14685]: ProgramNamedParameter4dvNV (will be remapped) */
    "iipp\0"
    "glProgramNamedParameter4dvNV\0"
    "\0"
-   /* _mesa_function_pool[14578]: Tangent3fvEXT (dynamic) */
+   /* _mesa_function_pool[14720]: Tangent3fvEXT (dynamic) */
    "p\0"
    "glTangent3fvEXT\0"
    "\0"
-   /* _mesa_function_pool[14597]: Flush (offset 217) */
+   /* _mesa_function_pool[14739]: Flush (offset 217) */
    "\0"
    "glFlush\0"
    "\0"
-   /* _mesa_function_pool[14607]: Color4uiv (offset 38) */
+   /* _mesa_function_pool[14749]: Color4uiv (offset 38) */
    "p\0"
    "glColor4uiv\0"
    "\0"
-   /* _mesa_function_pool[14622]: VertexAttribI4iEXT (will be remapped) */
+   /* _mesa_function_pool[14764]: VertexAttribI4iEXT (will be remapped) */
    "iiiii\0"
    "glVertexAttribI4iEXT\0"
    "glVertexAttribI4i\0"
    "\0"
-   /* _mesa_function_pool[14668]: GenVertexArrays (will be remapped) */
+   /* _mesa_function_pool[14810]: GenVertexArrays (will be remapped) */
    "ip\0"
    "glGenVertexArrays\0"
    "\0"
-   /* _mesa_function_pool[14690]: Uniform3uivEXT (will be remapped) */
+   /* _mesa_function_pool[14832]: Uniform3uivEXT (will be remapped) */
    "iip\0"
    "glUniform3uivEXT\0"
    "glUniform3uiv\0"
    "\0"
-   /* _mesa_function_pool[14726]: RasterPos3sv (offset 77) */
+   /* _mesa_function_pool[14868]: RasterPos3sv (offset 77) */
    "p\0"
    "glRasterPos3sv\0"
    "\0"
-   /* _mesa_function_pool[14744]: BindFramebufferEXT (will be remapped) */
+   /* _mesa_function_pool[14886]: BindFramebufferEXT (will be remapped) */
    "ii\0"
    "glBindFramebuffer\0"
    "glBindFramebufferEXT\0"
    "\0"
-   /* _mesa_function_pool[14787]: ReferencePlaneSGIX (dynamic) */
+   /* _mesa_function_pool[14929]: ReferencePlaneSGIX (dynamic) */
    "p\0"
    "glReferencePlaneSGIX\0"
    "\0"
-   /* _mesa_function_pool[14811]: PushAttrib (offset 219) */
+   /* _mesa_function_pool[14953]: PushAttrib (offset 219) */
    "i\0"
    "glPushAttrib\0"
    "\0"
-   /* _mesa_function_pool[14827]: RasterPos2i (offset 66) */
+   /* _mesa_function_pool[14969]: RasterPos2i (offset 66) */
    "ii\0"
    "glRasterPos2i\0"
    "\0"
-   /* _mesa_function_pool[14845]: ValidateProgramARB (will be remapped) */
+   /* _mesa_function_pool[14987]: ValidateProgramARB (will be remapped) */
    "i\0"
    "glValidateProgram\0"
    "glValidateProgramARB\0"
    "\0"
-   /* _mesa_function_pool[14887]: TexParameteriv (offset 181) */
+   /* _mesa_function_pool[15029]: TexParameteriv (offset 181) */
    "iip\0"
    "glTexParameteriv\0"
    "\0"
-   /* _mesa_function_pool[14909]: UnlockArraysEXT (will be remapped) */
+   /* _mesa_function_pool[15051]: UnlockArraysEXT (will be remapped) */
    "\0"
    "glUnlockArraysEXT\0"
    "\0"
-   /* _mesa_function_pool[14929]: TexCoord2fColor3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[15071]: TexCoord2fColor3fVertex3fSUN (dynamic) */
    "ffffffff\0"
    "glTexCoord2fColor3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[14970]: WindowPos3fvMESA (will be remapped) */
+   /* _mesa_function_pool[15112]: WindowPos3fvMESA (will be remapped) */
    "p\0"
    "glWindowPos3fv\0"
    "glWindowPos3fvARB\0"
    "glWindowPos3fvMESA\0"
    "\0"
-   /* _mesa_function_pool[15025]: RasterPos2f (offset 64) */
+   /* _mesa_function_pool[15167]: RasterPos2f (offset 64) */
    "ff\0"
    "glRasterPos2f\0"
    "\0"
-   /* _mesa_function_pool[15043]: VertexAttrib1svNV (will be remapped) */
+   /* _mesa_function_pool[15185]: VertexAttrib1svNV (will be remapped) */
    "ip\0"
    "glVertexAttrib1svNV\0"
    "\0"
-   /* _mesa_function_pool[15067]: RasterPos2d (offset 62) */
+   /* _mesa_function_pool[15209]: RasterPos2d (offset 62) */
    "dd\0"
    "glRasterPos2d\0"
    "\0"
-   /* _mesa_function_pool[15085]: RasterPos3fv (offset 73) */
+   /* _mesa_function_pool[15227]: RasterPos3fv (offset 73) */
    "p\0"
    "glRasterPos3fv\0"
    "\0"
-   /* _mesa_function_pool[15103]: CopyTexSubImage3D (offset 373) */
+   /* _mesa_function_pool[15245]: CopyTexSubImage3D (offset 373) */
    "iiiiiiiii\0"
    "glCopyTexSubImage3D\0"
    "glCopyTexSubImage3DEXT\0"
    "\0"
-   /* _mesa_function_pool[15157]: VertexAttrib2dARB (will be remapped) */
+   /* _mesa_function_pool[15299]: VertexAttrib2dARB (will be remapped) */
    "idd\0"
    "glVertexAttrib2d\0"
    "glVertexAttrib2dARB\0"
    "\0"
-   /* _mesa_function_pool[15199]: Color4ub (offset 35) */
+   /* _mesa_function_pool[15341]: Color4ub (offset 35) */
    "iiii\0"
    "glColor4ub\0"
    "\0"
-   /* _mesa_function_pool[15216]: GetInteger64v (will be remapped) */
+   /* _mesa_function_pool[15358]: GetInteger64v (will be remapped) */
    "ip\0"
    "glGetInteger64v\0"
    "\0"
-   /* _mesa_function_pool[15236]: TextureColorMaskSGIS (dynamic) */
+   /* _mesa_function_pool[15378]: TextureColorMaskSGIS (dynamic) */
    "iiii\0"
    "glTextureColorMaskSGIS\0"
    "\0"
-   /* _mesa_function_pool[15265]: RasterPos2s (offset 68) */
+   /* _mesa_function_pool[15407]: RasterPos2s (offset 68) */
    "ii\0"
    "glRasterPos2s\0"
    "\0"
-   /* _mesa_function_pool[15283]: GetColorTable (offset 343) */
+   /* _mesa_function_pool[15425]: GetColorTable (offset 343) */
    "iiip\0"
    "glGetColorTable\0"
    "glGetColorTableSGI\0"
    "glGetColorTableEXT\0"
    "\0"
-   /* _mesa_function_pool[15343]: SelectBuffer (offset 195) */
+   /* _mesa_function_pool[15485]: SelectBuffer (offset 195) */
    "ip\0"
    "glSelectBuffer\0"
    "\0"
-   /* _mesa_function_pool[15362]: Indexiv (offset 49) */
+   /* _mesa_function_pool[15504]: Indexiv (offset 49) */
    "p\0"
    "glIndexiv\0"
    "\0"
-   /* _mesa_function_pool[15375]: TexCoord3i (offset 114) */
+   /* _mesa_function_pool[15517]: TexCoord3i (offset 114) */
    "iii\0"
    "glTexCoord3i\0"
    "\0"
-   /* _mesa_function_pool[15393]: CopyColorTable (offset 342) */
+   /* _mesa_function_pool[15535]: CopyColorTable (offset 342) */
    "iiiii\0"
    "glCopyColorTable\0"
    "glCopyColorTableSGI\0"
    "\0"
-   /* _mesa_function_pool[15437]: GetHistogramParameterfv (offset 362) */
+   /* _mesa_function_pool[15579]: GetHistogramParameterfv (offset 362) */
    "iip\0"
    "glGetHistogramParameterfv\0"
    "glGetHistogramParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[15497]: Frustum (offset 289) */
+   /* _mesa_function_pool[15639]: Frustum (offset 289) */
    "dddddd\0"
    "glFrustum\0"
    "\0"
-   /* _mesa_function_pool[15515]: GetString (offset 275) */
+   /* _mesa_function_pool[15657]: GetString (offset 275) */
    "i\0"
    "glGetString\0"
    "\0"
-   /* _mesa_function_pool[15530]: ColorPointervINTEL (dynamic) */
+   /* _mesa_function_pool[15672]: ColorPointervINTEL (dynamic) */
    "iip\0"
    "glColorPointervINTEL\0"
    "\0"
-   /* _mesa_function_pool[15556]: TexEnvf (offset 184) */
+   /* _mesa_function_pool[15698]: TexEnvf (offset 184) */
    "iif\0"
    "glTexEnvf\0"
    "\0"
-   /* _mesa_function_pool[15571]: TexCoord3d (offset 110) */
+   /* _mesa_function_pool[15713]: TexCoord3d (offset 110) */
    "ddd\0"
    "glTexCoord3d\0"
    "\0"
-   /* _mesa_function_pool[15589]: AlphaFragmentOp1ATI (will be remapped) */
+   /* _mesa_function_pool[15731]: AlphaFragmentOp1ATI (will be remapped) */
    "iiiiii\0"
    "glAlphaFragmentOp1ATI\0"
    "\0"
-   /* _mesa_function_pool[15619]: TexCoord3f (offset 112) */
+   /* _mesa_function_pool[15761]: TexCoord3f (offset 112) */
    "fff\0"
    "glTexCoord3f\0"
    "\0"
-   /* _mesa_function_pool[15637]: MultiTexCoord3ivARB (offset 397) */
+   /* _mesa_function_pool[15779]: MultiTexCoord3ivARB (offset 397) */
    "ip\0"
    "glMultiTexCoord3iv\0"
    "glMultiTexCoord3ivARB\0"
    "\0"
-   /* _mesa_function_pool[15682]: MultiTexCoord2sARB (offset 390) */
+   /* _mesa_function_pool[15824]: MultiTexCoord2sARB (offset 390) */
    "iii\0"
    "glMultiTexCoord2s\0"
    "glMultiTexCoord2sARB\0"
    "\0"
-   /* _mesa_function_pool[15726]: VertexAttrib1dvARB (will be remapped) */
+   /* _mesa_function_pool[15868]: VertexAttrib1dvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib1dv\0"
    "glVertexAttrib1dvARB\0"
    "\0"
-   /* _mesa_function_pool[15769]: DeleteTextures (offset 327) */
+   /* _mesa_function_pool[15911]: DeleteTextures (offset 327) */
    "ip\0"
    "glDeleteTextures\0"
    "glDeleteTexturesEXT\0"
    "\0"
-   /* _mesa_function_pool[15810]: TexCoordPointerEXT (will be remapped) */
+   /* _mesa_function_pool[15952]: TexCoordPointerEXT (will be remapped) */
    "iiiip\0"
    "glTexCoordPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[15838]: TexSubImage4DSGIS (dynamic) */
+   /* _mesa_function_pool[15980]: TexSubImage4DSGIS (dynamic) */
    "iiiiiiiiiiiip\0"
    "glTexSubImage4DSGIS\0"
    "\0"
-   /* _mesa_function_pool[15873]: TexCoord3s (offset 116) */
+   /* _mesa_function_pool[16015]: TexCoord3s (offset 116) */
    "iii\0"
    "glTexCoord3s\0"
    "\0"
-   /* _mesa_function_pool[15891]: GetTexLevelParameteriv (offset 285) */
+   /* _mesa_function_pool[16033]: GetTexLevelParameteriv (offset 285) */
    "iiip\0"
    "glGetTexLevelParameteriv\0"
    "\0"
-   /* _mesa_function_pool[15922]: CombinerStageParameterfvNV (dynamic) */
+   /* _mesa_function_pool[16064]: CombinerStageParameterfvNV (dynamic) */
    "iip\0"
    "glCombinerStageParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[15956]: StopInstrumentsSGIX (dynamic) */
+   /* _mesa_function_pool[16098]: StopInstrumentsSGIX (dynamic) */
    "i\0"
    "glStopInstrumentsSGIX\0"
    "\0"
-   /* _mesa_function_pool[15981]: TexCoord4fColor4fNormal3fVertex4fSUN (dynamic) */
+   /* _mesa_function_pool[16123]: TexCoord4fColor4fNormal3fVertex4fSUN (dynamic) */
    "fffffffffffffff\0"
    "glTexCoord4fColor4fNormal3fVertex4fSUN\0"
    "\0"
-   /* _mesa_function_pool[16037]: ClearAccum (offset 204) */
+   /* _mesa_function_pool[16179]: ClearAccum (offset 204) */
    "ffff\0"
    "glClearAccum\0"
    "\0"
-   /* _mesa_function_pool[16056]: DeformSGIX (dynamic) */
+   /* _mesa_function_pool[16198]: DeformSGIX (dynamic) */
    "i\0"
    "glDeformSGIX\0"
    "\0"
-   /* _mesa_function_pool[16072]: GetVertexAttribfvARB (will be remapped) */
+   /* _mesa_function_pool[16214]: GetVertexAttribfvARB (will be remapped) */
    "iip\0"
    "glGetVertexAttribfv\0"
    "glGetVertexAttribfvARB\0"
    "\0"
-   /* _mesa_function_pool[16120]: SecondaryColor3ivEXT (will be remapped) */
+   /* _mesa_function_pool[16262]: SecondaryColor3ivEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3iv\0"
    "glSecondaryColor3ivEXT\0"
    "\0"
-   /* _mesa_function_pool[16166]: TexCoord4iv (offset 123) */
+   /* _mesa_function_pool[16308]: TexCoord4iv (offset 123) */
    "p\0"
    "glTexCoord4iv\0"
    "\0"
-   /* _mesa_function_pool[16183]: VertexAttribI4uiEXT (will be remapped) */
+   /* _mesa_function_pool[16325]: VertexAttribI4uiEXT (will be remapped) */
    "iiiii\0"
    "glVertexAttribI4uiEXT\0"
    "glVertexAttribI4ui\0"
    "\0"
-   /* _mesa_function_pool[16231]: GetFragmentMaterialfvSGIX (dynamic) */
+   /* _mesa_function_pool[16373]: GetFragmentMaterialfvSGIX (dynamic) */
    "iip\0"
    "glGetFragmentMaterialfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[16264]: UniformMatrix4x2fv (will be remapped) */
+   /* _mesa_function_pool[16406]: UniformMatrix4x2fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix4x2fv\0"
    "\0"
-   /* _mesa_function_pool[16291]: GetDetailTexFuncSGIS (dynamic) */
+   /* _mesa_function_pool[16433]: GetDetailTexFuncSGIS (dynamic) */
    "ip\0"
    "glGetDetailTexFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[16318]: GetCombinerStageParameterfvNV (dynamic) */
+   /* _mesa_function_pool[16460]: GetCombinerStageParameterfvNV (dynamic) */
    "iip\0"
    "glGetCombinerStageParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[16355]: PolygonOffset (offset 319) */
+   /* _mesa_function_pool[16497]: SamplerParameterIiv (will be remapped) */
+   "iip\0"
+   "glSamplerParameterIiv\0"
+   "\0"
+   /* _mesa_function_pool[16524]: PolygonOffset (offset 319) */
    "ff\0"
    "glPolygonOffset\0"
    "\0"
-   /* _mesa_function_pool[16375]: BindVertexArray (will be remapped) */
+   /* _mesa_function_pool[16544]: BindVertexArray (will be remapped) */
    "i\0"
    "glBindVertexArray\0"
    "\0"
-   /* _mesa_function_pool[16396]: Color4ubVertex2fvSUN (dynamic) */
+   /* _mesa_function_pool[16565]: Color4ubVertex2fvSUN (dynamic) */
    "pp\0"
    "glColor4ubVertex2fvSUN\0"
    "\0"
-   /* _mesa_function_pool[16423]: Rectd (offset 86) */
+   /* _mesa_function_pool[16592]: Rectd (offset 86) */
    "dddd\0"
    "glRectd\0"
    "\0"
-   /* _mesa_function_pool[16437]: TexFilterFuncSGIS (dynamic) */
+   /* _mesa_function_pool[16606]: TexFilterFuncSGIS (dynamic) */
    "iiip\0"
    "glTexFilterFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[16463]: TextureBarrierNV (will be remapped) */
+   /* _mesa_function_pool[16632]: TextureBarrierNV (will be remapped) */
    "\0"
    "glTextureBarrierNV\0"
    "\0"
-   /* _mesa_function_pool[16484]: VertexAttribI4ubvEXT (will be remapped) */
+   /* _mesa_function_pool[16653]: SamplerParameterfv (will be remapped) */
+   "iip\0"
+   "glSamplerParameterfv\0"
+   "\0"
+   /* _mesa_function_pool[16679]: VertexAttribI4ubvEXT (will be remapped) */
    "ip\0"
    "glVertexAttribI4ubvEXT\0"
    "glVertexAttribI4ubv\0"
    "\0"
-   /* _mesa_function_pool[16531]: GetAttribLocationARB (will be remapped) */
+   /* _mesa_function_pool[16726]: GetAttribLocationARB (will be remapped) */
    "ip\0"
    "glGetAttribLocation\0"
    "glGetAttribLocationARB\0"
    "\0"
-   /* _mesa_function_pool[16578]: RasterPos3i (offset 74) */
+   /* _mesa_function_pool[16773]: RasterPos3i (offset 74) */
    "iii\0"
    "glRasterPos3i\0"
    "\0"
-   /* _mesa_function_pool[16597]: VertexAttrib4ubvARB (will be remapped) */
+   /* _mesa_function_pool[16792]: BlendEquationSeparateiARB (will be remapped) */
+   "iii\0"
+   "glBlendEquationSeparateiARB\0"
+   "\0"
+   /* _mesa_function_pool[16825]: VertexAttrib4ubvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4ubv\0"
    "glVertexAttrib4ubvARB\0"
    "\0"
-   /* _mesa_function_pool[16642]: DetailTexFuncSGIS (dynamic) */
+   /* _mesa_function_pool[16870]: DetailTexFuncSGIS (dynamic) */
    "iip\0"
    "glDetailTexFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[16667]: Normal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[16895]: Normal3fVertex3fSUN (dynamic) */
    "ffffff\0"
    "glNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[16697]: CopyTexImage2D (offset 324) */
+   /* _mesa_function_pool[16925]: CopyTexImage2D (offset 324) */
    "iiiiiiii\0"
    "glCopyTexImage2D\0"
    "glCopyTexImage2DEXT\0"
    "\0"
-   /* _mesa_function_pool[16744]: GetBufferPointervARB (will be remapped) */
+   /* _mesa_function_pool[16972]: GetBufferPointervARB (will be remapped) */
    "iip\0"
    "glGetBufferPointerv\0"
    "glGetBufferPointervARB\0"
    "\0"
-   /* _mesa_function_pool[16792]: ProgramEnvParameter4fARB (will be remapped) */
+   /* _mesa_function_pool[17020]: ProgramEnvParameter4fARB (will be remapped) */
    "iiffff\0"
    "glProgramEnvParameter4fARB\0"
    "glProgramParameter4fNV\0"
    "\0"
-   /* _mesa_function_pool[16850]: Uniform3ivARB (will be remapped) */
+   /* _mesa_function_pool[17078]: Uniform3ivARB (will be remapped) */
    "iip\0"
    "glUniform3iv\0"
    "glUniform3ivARB\0"
    "\0"
-   /* _mesa_function_pool[16884]: Lightfv (offset 160) */
+   /* _mesa_function_pool[17112]: Lightfv (offset 160) */
    "iip\0"
    "glLightfv\0"
    "\0"
-   /* _mesa_function_pool[16899]: PrimitiveRestartIndexNV (will be remapped) */
+   /* _mesa_function_pool[17127]: PrimitiveRestartIndexNV (will be remapped) */
    "i\0"
    "glPrimitiveRestartIndexNV\0"
    "glPrimitiveRestartIndex\0"
    "\0"
-   /* _mesa_function_pool[16952]: ClearDepth (offset 208) */
+   /* _mesa_function_pool[17180]: ClearDepth (offset 208) */
    "d\0"
    "glClearDepth\0"
    "\0"
-   /* _mesa_function_pool[16968]: GetFenceivNV (will be remapped) */
+   /* _mesa_function_pool[17196]: GetFenceivNV (will be remapped) */
    "iip\0"
    "glGetFenceivNV\0"
    "\0"
-   /* _mesa_function_pool[16988]: WindowPos4dvMESA (will be remapped) */
+   /* _mesa_function_pool[17216]: WindowPos4dvMESA (will be remapped) */
    "p\0"
    "glWindowPos4dvMESA\0"
    "\0"
-   /* _mesa_function_pool[17010]: ColorSubTable (offset 346) */
+   /* _mesa_function_pool[17238]: ColorSubTable (offset 346) */
    "iiiiip\0"
    "glColorSubTable\0"
    "glColorSubTableEXT\0"
    "\0"
-   /* _mesa_function_pool[17053]: Color4fv (offset 30) */
+   /* _mesa_function_pool[17281]: Color4fv (offset 30) */
    "p\0"
    "glColor4fv\0"
    "\0"
-   /* _mesa_function_pool[17067]: MultiTexCoord4ivARB (offset 405) */
+   /* _mesa_function_pool[17295]: MultiTexCoord4ivARB (offset 405) */
    "ip\0"
    "glMultiTexCoord4iv\0"
    "glMultiTexCoord4ivARB\0"
    "\0"
-   /* _mesa_function_pool[17112]: ProgramLocalParameters4fvEXT (will be remapped) */
+   /* _mesa_function_pool[17340]: ProgramLocalParameters4fvEXT (will be remapped) */
    "iiip\0"
    "glProgramLocalParameters4fvEXT\0"
    "\0"
-   /* _mesa_function_pool[17149]: ColorPointer (offset 308) */
+   /* _mesa_function_pool[17377]: ColorPointer (offset 308) */
    "iiip\0"
    "glColorPointer\0"
    "\0"
-   /* _mesa_function_pool[17170]: Rects (offset 92) */
+   /* _mesa_function_pool[17398]: Rects (offset 92) */
    "iiii\0"
    "glRects\0"
    "\0"
-   /* _mesa_function_pool[17184]: GetMapAttribParameterfvNV (dynamic) */
+   /* _mesa_function_pool[17412]: GetMapAttribParameterfvNV (dynamic) */
    "iiip\0"
    "glGetMapAttribParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[17218]: CreateShaderProgramEXT (will be remapped) */
+   /* _mesa_function_pool[17446]: CreateShaderProgramEXT (will be remapped) */
    "ip\0"
    "glCreateShaderProgramEXT\0"
    "\0"
-   /* _mesa_function_pool[17247]: ActiveProgramEXT (will be remapped) */
+   /* _mesa_function_pool[17475]: ActiveProgramEXT (will be remapped) */
    "i\0"
    "glActiveProgramEXT\0"
    "\0"
-   /* _mesa_function_pool[17269]: Lightiv (offset 162) */
+   /* _mesa_function_pool[17497]: Lightiv (offset 162) */
    "iip\0"
    "glLightiv\0"
    "\0"
-   /* _mesa_function_pool[17284]: VertexAttrib4sARB (will be remapped) */
+   /* _mesa_function_pool[17512]: VertexAttrib4sARB (will be remapped) */
    "iiiii\0"
    "glVertexAttrib4s\0"
    "glVertexAttrib4sARB\0"
    "\0"
-   /* _mesa_function_pool[17328]: GetQueryObjectuivARB (will be remapped) */
+   /* _mesa_function_pool[17556]: GetQueryObjectuivARB (will be remapped) */
    "iip\0"
    "glGetQueryObjectuiv\0"
    "glGetQueryObjectuivARB\0"
    "\0"
-   /* _mesa_function_pool[17376]: GetTexParameteriv (offset 283) */
+   /* _mesa_function_pool[17604]: GetTexParameteriv (offset 283) */
    "iip\0"
    "glGetTexParameteriv\0"
    "\0"
-   /* _mesa_function_pool[17401]: MapParameterivNV (dynamic) */
+   /* _mesa_function_pool[17629]: MapParameterivNV (dynamic) */
    "iip\0"
    "glMapParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[17425]: GenRenderbuffersEXT (will be remapped) */
+   /* _mesa_function_pool[17653]: GenRenderbuffersEXT (will be remapped) */
    "ip\0"
    "glGenRenderbuffers\0"
    "glGenRenderbuffersEXT\0"
    "\0"
-   /* _mesa_function_pool[17470]: ClearBufferfv (will be remapped) */
+   /* _mesa_function_pool[17698]: ClearBufferfv (will be remapped) */
    "iip\0"
    "glClearBufferfv\0"
    "\0"
-   /* _mesa_function_pool[17491]: VertexAttrib2dvARB (will be remapped) */
+   /* _mesa_function_pool[17719]: VertexAttrib2dvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib2dv\0"
    "glVertexAttrib2dvARB\0"
    "\0"
-   /* _mesa_function_pool[17534]: EdgeFlagPointerEXT (will be remapped) */
+   /* _mesa_function_pool[17762]: EdgeFlagPointerEXT (will be remapped) */
    "iip\0"
    "glEdgeFlagPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[17560]: VertexAttribs2svNV (will be remapped) */
+   /* _mesa_function_pool[17788]: VertexAttribs2svNV (will be remapped) */
    "iip\0"
    "glVertexAttribs2svNV\0"
    "\0"
-   /* _mesa_function_pool[17586]: WeightbvARB (dynamic) */
+   /* _mesa_function_pool[17814]: WeightbvARB (dynamic) */
    "ip\0"
    "glWeightbvARB\0"
    "\0"
-   /* _mesa_function_pool[17604]: VertexAttrib2fvARB (will be remapped) */
+   /* _mesa_function_pool[17832]: VertexAttrib2fvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib2fv\0"
    "glVertexAttrib2fvARB\0"
    "\0"
-   /* _mesa_function_pool[17647]: GetBufferParameterivARB (will be remapped) */
+   /* _mesa_function_pool[17875]: GetBufferParameterivARB (will be remapped) */
    "iip\0"
    "glGetBufferParameteriv\0"
    "glGetBufferParameterivARB\0"
    "\0"
-   /* _mesa_function_pool[17701]: Rectdv (offset 87) */
+   /* _mesa_function_pool[17929]: Rectdv (offset 87) */
    "pp\0"
    "glRectdv\0"
    "\0"
-   /* _mesa_function_pool[17714]: ListParameteriSGIX (dynamic) */
+   /* _mesa_function_pool[17942]: ListParameteriSGIX (dynamic) */
    "iii\0"
    "glListParameteriSGIX\0"
    "\0"
-   /* _mesa_function_pool[17740]: BlendEquationiARB (will be remapped) */
+   /* _mesa_function_pool[17968]: BlendEquationiARB (will be remapped) */
    "ii\0"
    "glBlendEquationiARB\0"
    "\0"
-   /* _mesa_function_pool[17764]: ReplacementCodeuiColor4fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[17992]: ReplacementCodeuiColor4fNormal3fVertex3fSUN (dynamic) */
    "iffffffffff\0"
    "glReplacementCodeuiColor4fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[17823]: InstrumentsBufferSGIX (dynamic) */
+   /* _mesa_function_pool[18051]: InstrumentsBufferSGIX (dynamic) */
    "ip\0"
    "glInstrumentsBufferSGIX\0"
    "\0"
-   /* _mesa_function_pool[17851]: VertexAttrib4NivARB (will be remapped) */
+   /* _mesa_function_pool[18079]: VertexAttrib4NivARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Niv\0"
    "glVertexAttrib4NivARB\0"
    "\0"
-   /* _mesa_function_pool[17896]: DrawArraysInstancedARB (will be remapped) */
+   /* _mesa_function_pool[18124]: DrawArraysInstancedARB (will be remapped) */
    "iiii\0"
    "glDrawArraysInstancedARB\0"
    "glDrawArraysInstancedEXT\0"
    "glDrawArraysInstanced\0"
    "\0"
-   /* _mesa_function_pool[17974]: GetAttachedShaders (will be remapped) */
+   /* _mesa_function_pool[18202]: GetAttachedShaders (will be remapped) */
    "iipp\0"
    "glGetAttachedShaders\0"
    "\0"
-   /* _mesa_function_pool[18001]: GenVertexArraysAPPLE (will be remapped) */
+   /* _mesa_function_pool[18229]: GenVertexArraysAPPLE (will be remapped) */
    "ip\0"
    "glGenVertexArraysAPPLE\0"
    "\0"
-   /* _mesa_function_pool[18028]: ClearBufferfi (will be remapped) */
+   /* _mesa_function_pool[18256]: ClearBufferfi (will be remapped) */
    "iifi\0"
    "glClearBufferfi\0"
    "\0"
-   /* _mesa_function_pool[18050]: Materialiv (offset 172) */
+   /* _mesa_function_pool[18278]: Materialiv (offset 172) */
    "iip\0"
    "glMaterialiv\0"
    "\0"
-   /* _mesa_function_pool[18068]: PushClientAttrib (offset 335) */
+   /* _mesa_function_pool[18296]: PushClientAttrib (offset 335) */
    "i\0"
    "glPushClientAttrib\0"
    "\0"
-   /* _mesa_function_pool[18090]: ProgramEnvParameters4fvEXT (will be remapped) */
-   "iiip\0"
-   "glProgramEnvParameters4fvEXT\0"
+   /* _mesa_function_pool[18318]: SamplerParameteriv (will be remapped) */
+   "iip\0"
+   "glSamplerParameteriv\0"
    "\0"
-   /* _mesa_function_pool[18125]: TexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[18344]: TexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */
    "pppp\0"
    "glTexCoord2fColor4fNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[18171]: WindowPos2iMESA (will be remapped) */
+   /* _mesa_function_pool[18390]: WindowPos2iMESA (will be remapped) */
    "ii\0"
    "glWindowPos2i\0"
    "glWindowPos2iARB\0"
    "glWindowPos2iMESA\0"
    "\0"
-   /* _mesa_function_pool[18224]: SampleMaskSGIS (will be remapped) */
+   /* _mesa_function_pool[18443]: SampleMaskSGIS (will be remapped) */
    "fi\0"
    "glSampleMaskSGIS\0"
    "glSampleMaskEXT\0"
    "\0"
-   /* _mesa_function_pool[18261]: SecondaryColor3fvEXT (will be remapped) */
+   /* _mesa_function_pool[18480]: SecondaryColor3fvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3fv\0"
    "glSecondaryColor3fvEXT\0"
    "\0"
-   /* _mesa_function_pool[18307]: PolygonMode (offset 174) */
+   /* _mesa_function_pool[18526]: PolygonMode (offset 174) */
    "ii\0"
    "glPolygonMode\0"
    "\0"
-   /* _mesa_function_pool[18325]: CompressedTexSubImage1DARB (will be remapped) */
+   /* _mesa_function_pool[18544]: CompressedTexSubImage1DARB (will be remapped) */
    "iiiiiip\0"
    "glCompressedTexSubImage1D\0"
    "glCompressedTexSubImage1DARB\0"
    "\0"
-   /* _mesa_function_pool[18389]: VertexAttribI1iEXT (will be remapped) */
+   /* _mesa_function_pool[18608]: VertexAttribI1iEXT (will be remapped) */
    "ii\0"
    "glVertexAttribI1iEXT\0"
    "glVertexAttribI1i\0"
    "\0"
-   /* _mesa_function_pool[18432]: GetVertexAttribivNV (will be remapped) */
+   /* _mesa_function_pool[18651]: TexCoord2fNormal3fVertex3fSUN (dynamic) */
+   "ffffffff\0"
+   "glTexCoord2fNormal3fVertex3fSUN\0"
+   "\0"
+   /* _mesa_function_pool[18693]: GetVertexAttribivNV (will be remapped) */
    "iip\0"
    "glGetVertexAttribivNV\0"
    "\0"
-   /* _mesa_function_pool[18459]: GetProgramStringARB (will be remapped) */
+   /* _mesa_function_pool[18720]: GetProgramStringARB (will be remapped) */
    "iip\0"
    "glGetProgramStringARB\0"
    "\0"
-   /* _mesa_function_pool[18486]: VertexAttribIPointerEXT (will be remapped) */
+   /* _mesa_function_pool[18747]: VertexAttribIPointerEXT (will be remapped) */
    "iiiip\0"
    "glVertexAttribIPointerEXT\0"
    "glVertexAttribIPointer\0"
    "\0"
-   /* _mesa_function_pool[18542]: TexBumpParameterfvATI (will be remapped) */
+   /* _mesa_function_pool[18803]: TexBumpParameterfvATI (will be remapped) */
    "ip\0"
    "glTexBumpParameterfvATI\0"
    "\0"
-   /* _mesa_function_pool[18570]: CompileShaderARB (will be remapped) */
+   /* _mesa_function_pool[18831]: Tangent3ivEXT (dynamic) */
+   "p\0"
+   "glTangent3ivEXT\0"
+   "\0"
+   /* _mesa_function_pool[18850]: CompileShaderARB (will be remapped) */
    "i\0"
    "glCompileShader\0"
    "glCompileShaderARB\0"
    "\0"
-   /* _mesa_function_pool[18608]: DeleteShader (will be remapped) */
+   /* _mesa_function_pool[18888]: DeleteShader (will be remapped) */
    "i\0"
    "glDeleteShader\0"
    "\0"
-   /* _mesa_function_pool[18626]: DisableClientState (offset 309) */
+   /* _mesa_function_pool[18906]: DisableClientState (offset 309) */
    "i\0"
    "glDisableClientState\0"
    "\0"
-   /* _mesa_function_pool[18650]: TexGeni (offset 192) */
+   /* _mesa_function_pool[18930]: TexGeni (offset 192) */
    "iii\0"
    "glTexGeni\0"
    "\0"
-   /* _mesa_function_pool[18665]: TexGenf (offset 190) */
+   /* _mesa_function_pool[18945]: TexGenf (offset 190) */
    "iif\0"
    "glTexGenf\0"
    "\0"
-   /* _mesa_function_pool[18680]: Uniform3fARB (will be remapped) */
+   /* _mesa_function_pool[18960]: Uniform3fARB (will be remapped) */
    "ifff\0"
    "glUniform3f\0"
    "glUniform3fARB\0"
    "\0"
-   /* _mesa_function_pool[18713]: TexGend (offset 188) */
+   /* _mesa_function_pool[18993]: TexGend (offset 188) */
    "iid\0"
    "glTexGend\0"
    "\0"
-   /* _mesa_function_pool[18728]: ListParameterfvSGIX (dynamic) */
+   /* _mesa_function_pool[19008]: ListParameterfvSGIX (dynamic) */
    "iip\0"
    "glListParameterfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[18755]: GetPolygonStipple (offset 274) */
+   /* _mesa_function_pool[19035]: GetPolygonStipple (offset 274) */
    "p\0"
    "glGetPolygonStipple\0"
    "\0"
-   /* _mesa_function_pool[18778]: Tangent3dvEXT (dynamic) */
+   /* _mesa_function_pool[19058]: Tangent3dvEXT (dynamic) */
    "p\0"
    "glTangent3dvEXT\0"
    "\0"
-   /* _mesa_function_pool[18797]: BindBufferOffsetEXT (will be remapped) */
+   /* _mesa_function_pool[19077]: BindBufferOffsetEXT (will be remapped) */
    "iiii\0"
    "glBindBufferOffsetEXT\0"
    "\0"
-   /* _mesa_function_pool[18825]: WindowPos3sMESA (will be remapped) */
+   /* _mesa_function_pool[19105]: WindowPos3sMESA (will be remapped) */
    "iii\0"
    "glWindowPos3s\0"
    "glWindowPos3sARB\0"
    "glWindowPos3sMESA\0"
    "\0"
-   /* _mesa_function_pool[18879]: VertexAttrib2svNV (will be remapped) */
+   /* _mesa_function_pool[19159]: VertexAttrib2svNV (will be remapped) */
    "ip\0"
    "glVertexAttrib2svNV\0"
    "\0"
-   /* _mesa_function_pool[18903]: DisableIndexedEXT (will be remapped) */
+   /* _mesa_function_pool[19183]: DisableIndexedEXT (will be remapped) */
    "ii\0"
    "glDisableIndexedEXT\0"
    "glDisablei\0"
    "\0"
-   /* _mesa_function_pool[18938]: BindBufferBaseEXT (will be remapped) */
+   /* _mesa_function_pool[19218]: BindBufferBaseEXT (will be remapped) */
    "iii\0"
    "glBindBufferBaseEXT\0"
    "glBindBufferBase\0"
    "\0"
-   /* _mesa_function_pool[18980]: TexCoord2fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[19260]: TexCoord2fVertex3fvSUN (dynamic) */
    "pp\0"
    "glTexCoord2fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[19009]: WindowPos4sMESA (will be remapped) */
+   /* _mesa_function_pool[19289]: WindowPos4sMESA (will be remapped) */
    "iiii\0"
    "glWindowPos4sMESA\0"
    "\0"
-   /* _mesa_function_pool[19033]: VertexAttrib4NuivARB (will be remapped) */
+   /* _mesa_function_pool[19313]: VertexAttrib4NuivARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Nuiv\0"
    "glVertexAttrib4NuivARB\0"
    "\0"
-   /* _mesa_function_pool[19080]: ClientActiveTextureARB (offset 375) */
+   /* _mesa_function_pool[19360]: ClientActiveTextureARB (offset 375) */
    "i\0"
    "glClientActiveTexture\0"
    "glClientActiveTextureARB\0"
    "\0"
-   /* _mesa_function_pool[19130]: PixelTexGenSGIX (will be remapped) */
-   "i\0"
-   "glPixelTexGenSGIX\0"
+   /* _mesa_function_pool[19410]: GetSamplerParameterIuiv (will be remapped) */
+   "iip\0"
+   "glGetSamplerParameterIuiv\0"
    "\0"
-   /* _mesa_function_pool[19151]: ReplacementCodeusvSUN (dynamic) */
+   /* _mesa_function_pool[19441]: ReplacementCodeusvSUN (dynamic) */
    "p\0"
    "glReplacementCodeusvSUN\0"
    "\0"
-   /* _mesa_function_pool[19178]: Uniform4fARB (will be remapped) */
+   /* _mesa_function_pool[19468]: Uniform4fARB (will be remapped) */
    "iffff\0"
    "glUniform4f\0"
    "glUniform4fARB\0"
    "\0"
-   /* _mesa_function_pool[19212]: Color4sv (offset 34) */
+   /* _mesa_function_pool[19502]: Color4sv (offset 34) */
    "p\0"
    "glColor4sv\0"
    "\0"
-   /* _mesa_function_pool[19226]: FlushMappedBufferRange (will be remapped) */
+   /* _mesa_function_pool[19516]: FlushMappedBufferRange (will be remapped) */
    "iii\0"
    "glFlushMappedBufferRange\0"
    "\0"
-   /* _mesa_function_pool[19256]: IsProgramNV (will be remapped) */
+   /* _mesa_function_pool[19546]: IsProgramNV (will be remapped) */
    "i\0"
    "glIsProgramARB\0"
    "glIsProgramNV\0"
    "\0"
-   /* _mesa_function_pool[19288]: FlushMappedBufferRangeAPPLE (will be remapped) */
+   /* _mesa_function_pool[19578]: FlushMappedBufferRangeAPPLE (will be remapped) */
    "iii\0"
    "glFlushMappedBufferRangeAPPLE\0"
    "\0"
-   /* _mesa_function_pool[19323]: PixelZoom (offset 246) */
+   /* _mesa_function_pool[19613]: PixelZoom (offset 246) */
    "ff\0"
    "glPixelZoom\0"
    "\0"
-   /* _mesa_function_pool[19339]: ReplacementCodePointerSUN (dynamic) */
+   /* _mesa_function_pool[19629]: ReplacementCodePointerSUN (dynamic) */
    "iip\0"
    "glReplacementCodePointerSUN\0"
    "\0"
-   /* _mesa_function_pool[19372]: ProgramEnvParameter4dARB (will be remapped) */
+   /* _mesa_function_pool[19662]: ProgramEnvParameter4dARB (will be remapped) */
    "iidddd\0"
    "glProgramEnvParameter4dARB\0"
    "glProgramParameter4dNV\0"
    "\0"
-   /* _mesa_function_pool[19430]: ColorTableParameterfv (offset 340) */
+   /* _mesa_function_pool[19720]: ColorTableParameterfv (offset 340) */
    "iip\0"
    "glColorTableParameterfv\0"
    "glColorTableParameterfvSGI\0"
    "\0"
-   /* _mesa_function_pool[19486]: FragmentLightModelfSGIX (dynamic) */
+   /* _mesa_function_pool[19776]: FragmentLightModelfSGIX (dynamic) */
    "if\0"
    "glFragmentLightModelfSGIX\0"
    "\0"
-   /* _mesa_function_pool[19516]: Binormal3bvEXT (dynamic) */
+   /* _mesa_function_pool[19806]: Binormal3bvEXT (dynamic) */
    "p\0"
    "glBinormal3bvEXT\0"
    "\0"
-   /* _mesa_function_pool[19536]: PixelMapuiv (offset 252) */
+   /* _mesa_function_pool[19826]: PixelMapuiv (offset 252) */
    "iip\0"
    "glPixelMapuiv\0"
    "\0"
-   /* _mesa_function_pool[19555]: Color3dv (offset 12) */
+   /* _mesa_function_pool[19845]: Color3dv (offset 12) */
    "p\0"
    "glColor3dv\0"
    "\0"
-   /* _mesa_function_pool[19569]: IsTexture (offset 330) */
+   /* _mesa_function_pool[19859]: IsTexture (offset 330) */
    "i\0"
    "glIsTexture\0"
    "glIsTextureEXT\0"
    "\0"
-   /* _mesa_function_pool[19599]: VertexWeightfvEXT (dynamic) */
+   /* _mesa_function_pool[19889]: GenSamplers (will be remapped) */
+   "ip\0"
+   "glGenSamplers\0"
+   "\0"
+   /* _mesa_function_pool[19907]: VertexWeightfvEXT (dynamic) */
    "p\0"
    "glVertexWeightfvEXT\0"
    "\0"
-   /* _mesa_function_pool[19622]: VertexAttrib1dARB (will be remapped) */
+   /* _mesa_function_pool[19930]: VertexAttrib1dARB (will be remapped) */
    "id\0"
    "glVertexAttrib1d\0"
    "glVertexAttrib1dARB\0"
    "\0"
-   /* _mesa_function_pool[19663]: ImageTransformParameterivHP (dynamic) */
+   /* _mesa_function_pool[19971]: ImageTransformParameterivHP (dynamic) */
    "iip\0"
    "glImageTransformParameterivHP\0"
    "\0"
-   /* _mesa_function_pool[19698]: TexCoord4i (offset 122) */
+   /* _mesa_function_pool[20006]: TexCoord4i (offset 122) */
    "iiii\0"
    "glTexCoord4i\0"
    "\0"
-   /* _mesa_function_pool[19717]: DeleteQueriesARB (will be remapped) */
+   /* _mesa_function_pool[20025]: DeleteQueriesARB (will be remapped) */
    "ip\0"
    "glDeleteQueries\0"
    "glDeleteQueriesARB\0"
    "\0"
-   /* _mesa_function_pool[19756]: Color4ubVertex2fSUN (dynamic) */
+   /* _mesa_function_pool[20064]: Color4ubVertex2fSUN (dynamic) */
    "iiiiff\0"
    "glColor4ubVertex2fSUN\0"
    "\0"
-   /* _mesa_function_pool[19786]: FragmentColorMaterialSGIX (dynamic) */
+   /* _mesa_function_pool[20094]: FragmentColorMaterialSGIX (dynamic) */
    "ii\0"
    "glFragmentColorMaterialSGIX\0"
    "\0"
-   /* _mesa_function_pool[19818]: CurrentPaletteMatrixARB (dynamic) */
+   /* _mesa_function_pool[20126]: CurrentPaletteMatrixARB (dynamic) */
    "i\0"
    "glCurrentPaletteMatrixARB\0"
    "\0"
-   /* _mesa_function_pool[19847]: GetMapdv (offset 266) */
+   /* _mesa_function_pool[20155]: GetMapdv (offset 266) */
    "iip\0"
    "glGetMapdv\0"
    "\0"
-   /* _mesa_function_pool[19863]: ObjectPurgeableAPPLE (will be remapped) */
+   /* _mesa_function_pool[20171]: ObjectPurgeableAPPLE (will be remapped) */
    "iii\0"
    "glObjectPurgeableAPPLE\0"
    "\0"
-   /* _mesa_function_pool[19891]: GetStringi (will be remapped) */
+   /* _mesa_function_pool[20199]: GetStringi (will be remapped) */
    "ii\0"
    "glGetStringi\0"
    "\0"
-   /* _mesa_function_pool[19908]: SamplePatternSGIS (will be remapped) */
+   /* _mesa_function_pool[20216]: SamplePatternSGIS (will be remapped) */
    "i\0"
    "glSamplePatternSGIS\0"
    "glSamplePatternEXT\0"
    "\0"
-   /* _mesa_function_pool[19950]: PixelStoref (offset 249) */
+   /* _mesa_function_pool[20258]: PixelStoref (offset 249) */
    "if\0"
    "glPixelStoref\0"
    "\0"
-   /* _mesa_function_pool[19968]: IsQueryARB (will be remapped) */
+   /* _mesa_function_pool[20276]: IsQueryARB (will be remapped) */
    "i\0"
    "glIsQuery\0"
    "glIsQueryARB\0"
    "\0"
-   /* _mesa_function_pool[19994]: ReplacementCodeuiColor4ubVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[20302]: ReplacementCodeuiColor4ubVertex3fSUN (dynamic) */
    "iiiiifff\0"
    "glReplacementCodeuiColor4ubVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[20043]: PixelStorei (offset 250) */
+   /* _mesa_function_pool[20351]: PixelStorei (offset 250) */
    "ii\0"
    "glPixelStorei\0"
    "\0"
-   /* _mesa_function_pool[20061]: VertexAttrib4usvARB (will be remapped) */
+   /* _mesa_function_pool[20369]: VertexAttrib4usvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4usv\0"
    "glVertexAttrib4usvARB\0"
    "\0"
-   /* _mesa_function_pool[20106]: LinkProgramARB (will be remapped) */
+   /* _mesa_function_pool[20414]: LinkProgramARB (will be remapped) */
    "i\0"
    "glLinkProgram\0"
    "glLinkProgramARB\0"
    "\0"
-   /* _mesa_function_pool[20140]: VertexAttrib2fNV (will be remapped) */
+   /* _mesa_function_pool[20448]: VertexAttrib2fNV (will be remapped) */
    "iff\0"
    "glVertexAttrib2fNV\0"
    "\0"
-   /* _mesa_function_pool[20164]: ShaderSourceARB (will be remapped) */
+   /* _mesa_function_pool[20472]: ShaderSourceARB (will be remapped) */
    "iipp\0"
    "glShaderSource\0"
    "glShaderSourceARB\0"
    "\0"
-   /* _mesa_function_pool[20203]: FragmentMaterialiSGIX (dynamic) */
+   /* _mesa_function_pool[20511]: FragmentMaterialiSGIX (dynamic) */
    "iii\0"
    "glFragmentMaterialiSGIX\0"
    "\0"
-   /* _mesa_function_pool[20232]: EvalCoord2dv (offset 233) */
+   /* _mesa_function_pool[20540]: EvalCoord2dv (offset 233) */
    "p\0"
    "glEvalCoord2dv\0"
    "\0"
-   /* _mesa_function_pool[20250]: VertexAttrib3svARB (will be remapped) */
+   /* _mesa_function_pool[20558]: VertexAttrib3svARB (will be remapped) */
    "ip\0"
    "glVertexAttrib3sv\0"
    "glVertexAttrib3svARB\0"
    "\0"
-   /* _mesa_function_pool[20293]: ColorMaterial (offset 151) */
+   /* _mesa_function_pool[20601]: ColorMaterial (offset 151) */
    "ii\0"
    "glColorMaterial\0"
    "\0"
-   /* _mesa_function_pool[20313]: CompressedTexSubImage3DARB (will be remapped) */
+   /* _mesa_function_pool[20621]: CompressedTexSubImage3DARB (will be remapped) */
    "iiiiiiiiiip\0"
    "glCompressedTexSubImage3D\0"
    "glCompressedTexSubImage3DARB\0"
    "\0"
-   /* _mesa_function_pool[20381]: WindowPos2ivMESA (will be remapped) */
+   /* _mesa_function_pool[20689]: WindowPos2ivMESA (will be remapped) */
    "p\0"
    "glWindowPos2iv\0"
    "glWindowPos2ivARB\0"
    "glWindowPos2ivMESA\0"
    "\0"
-   /* _mesa_function_pool[20436]: IsFramebufferEXT (will be remapped) */
+   /* _mesa_function_pool[20744]: IsFramebufferEXT (will be remapped) */
    "i\0"
    "glIsFramebuffer\0"
    "glIsFramebufferEXT\0"
    "\0"
-   /* _mesa_function_pool[20474]: Uniform4ivARB (will be remapped) */
+   /* _mesa_function_pool[20782]: Uniform4ivARB (will be remapped) */
    "iip\0"
    "glUniform4iv\0"
    "glUniform4ivARB\0"
    "\0"
-   /* _mesa_function_pool[20508]: GetVertexAttribdvARB (will be remapped) */
+   /* _mesa_function_pool[20816]: GetVertexAttribdvARB (will be remapped) */
    "iip\0"
    "glGetVertexAttribdv\0"
    "glGetVertexAttribdvARB\0"
    "\0"
-   /* _mesa_function_pool[20556]: TexBumpParameterivATI (will be remapped) */
+   /* _mesa_function_pool[20864]: TexBumpParameterivATI (will be remapped) */
    "ip\0"
    "glTexBumpParameterivATI\0"
    "\0"
-   /* _mesa_function_pool[20584]: GetSeparableFilter (offset 359) */
+   /* _mesa_function_pool[20892]: GetSeparableFilter (offset 359) */
    "iiippp\0"
    "glGetSeparableFilter\0"
    "glGetSeparableFilterEXT\0"
    "\0"
-   /* _mesa_function_pool[20637]: Binormal3dEXT (dynamic) */
+   /* _mesa_function_pool[20945]: Binormal3dEXT (dynamic) */
    "ddd\0"
    "glBinormal3dEXT\0"
    "\0"
-   /* _mesa_function_pool[20658]: SpriteParameteriSGIX (dynamic) */
+   /* _mesa_function_pool[20966]: SpriteParameteriSGIX (dynamic) */
    "ii\0"
    "glSpriteParameteriSGIX\0"
    "\0"
-   /* _mesa_function_pool[20685]: RequestResidentProgramsNV (will be remapped) */
+   /* _mesa_function_pool[20993]: RequestResidentProgramsNV (will be remapped) */
    "ip\0"
    "glRequestResidentProgramsNV\0"
    "\0"
-   /* _mesa_function_pool[20717]: TagSampleBufferSGIX (dynamic) */
+   /* _mesa_function_pool[21025]: TagSampleBufferSGIX (dynamic) */
    "\0"
    "glTagSampleBufferSGIX\0"
    "\0"
-   /* _mesa_function_pool[20741]: TransformFeedbackVaryingsEXT (will be remapped) */
+   /* _mesa_function_pool[21049]: TransformFeedbackVaryingsEXT (will be remapped) */
    "iipi\0"
    "glTransformFeedbackVaryingsEXT\0"
    "glTransformFeedbackVaryings\0"
    "\0"
-   /* _mesa_function_pool[20806]: FeedbackBuffer (offset 194) */
+   /* _mesa_function_pool[21114]: FeedbackBuffer (offset 194) */
    "iip\0"
    "glFeedbackBuffer\0"
    "\0"
-   /* _mesa_function_pool[20828]: RasterPos2iv (offset 67) */
+   /* _mesa_function_pool[21136]: RasterPos2iv (offset 67) */
    "p\0"
    "glRasterPos2iv\0"
    "\0"
-   /* _mesa_function_pool[20846]: TexImage1D (offset 182) */
+   /* _mesa_function_pool[21154]: TexImage1D (offset 182) */
    "iiiiiiip\0"
    "glTexImage1D\0"
    "\0"
-   /* _mesa_function_pool[20869]: ListParameterivSGIX (dynamic) */
+   /* _mesa_function_pool[21177]: ListParameterivSGIX (dynamic) */
    "iip\0"
    "glListParameterivSGIX\0"
    "\0"
-   /* _mesa_function_pool[20896]: MultiDrawElementsEXT (will be remapped) */
+   /* _mesa_function_pool[21204]: MultiDrawElementsEXT (will be remapped) */
    "ipipi\0"
    "glMultiDrawElements\0"
    "glMultiDrawElementsEXT\0"
    "\0"
-   /* _mesa_function_pool[20946]: Color3s (offset 17) */
+   /* _mesa_function_pool[21254]: Color3s (offset 17) */
    "iii\0"
    "glColor3s\0"
    "\0"
-   /* _mesa_function_pool[20961]: Uniform1ivARB (will be remapped) */
+   /* _mesa_function_pool[21269]: Uniform1ivARB (will be remapped) */
    "iip\0"
    "glUniform1iv\0"
    "glUniform1ivARB\0"
    "\0"
-   /* _mesa_function_pool[20995]: WindowPos2sMESA (will be remapped) */
+   /* _mesa_function_pool[21303]: WindowPos2sMESA (will be remapped) */
    "ii\0"
    "glWindowPos2s\0"
    "glWindowPos2sARB\0"
    "glWindowPos2sMESA\0"
    "\0"
-   /* _mesa_function_pool[21048]: WeightusvARB (dynamic) */
+   /* _mesa_function_pool[21356]: WeightusvARB (dynamic) */
    "ip\0"
    "glWeightusvARB\0"
    "\0"
-   /* _mesa_function_pool[21067]: TexCoordPointer (offset 320) */
+   /* _mesa_function_pool[21375]: TexCoordPointer (offset 320) */
    "iiip\0"
    "glTexCoordPointer\0"
    "\0"
-   /* _mesa_function_pool[21091]: FogCoordPointerEXT (will be remapped) */
+   /* _mesa_function_pool[21399]: FogCoordPointerEXT (will be remapped) */
    "iip\0"
    "glFogCoordPointer\0"
    "glFogCoordPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[21135]: IndexMaterialEXT (dynamic) */
+   /* _mesa_function_pool[21443]: IndexMaterialEXT (dynamic) */
    "ii\0"
    "glIndexMaterialEXT\0"
    "\0"
-   /* _mesa_function_pool[21158]: Color3i (offset 15) */
+   /* _mesa_function_pool[21466]: Color3i (offset 15) */
    "iii\0"
    "glColor3i\0"
    "\0"
-   /* _mesa_function_pool[21173]: FrontFace (offset 157) */
+   /* _mesa_function_pool[21481]: FrontFace (offset 157) */
    "i\0"
    "glFrontFace\0"
    "\0"
-   /* _mesa_function_pool[21188]: EvalCoord2d (offset 232) */
+   /* _mesa_function_pool[21496]: EvalCoord2d (offset 232) */
    "dd\0"
    "glEvalCoord2d\0"
    "\0"
-   /* _mesa_function_pool[21206]: SecondaryColor3ubvEXT (will be remapped) */
+   /* _mesa_function_pool[21514]: SecondaryColor3ubvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3ubv\0"
    "glSecondaryColor3ubvEXT\0"
    "\0"
-   /* _mesa_function_pool[21254]: EvalCoord2f (offset 234) */
+   /* _mesa_function_pool[21562]: EvalCoord2f (offset 234) */
    "ff\0"
    "glEvalCoord2f\0"
    "\0"
-   /* _mesa_function_pool[21272]: VertexAttrib4dvARB (will be remapped) */
+   /* _mesa_function_pool[21580]: VertexAttrib4dvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4dv\0"
    "glVertexAttrib4dvARB\0"
    "\0"
-   /* _mesa_function_pool[21315]: BindAttribLocationARB (will be remapped) */
+   /* _mesa_function_pool[21623]: BindAttribLocationARB (will be remapped) */
    "iip\0"
    "glBindAttribLocation\0"
    "glBindAttribLocationARB\0"
    "\0"
-   /* _mesa_function_pool[21365]: Color3b (offset 9) */
+   /* _mesa_function_pool[21673]: Color3b (offset 9) */
    "iii\0"
    "glColor3b\0"
    "\0"
-   /* _mesa_function_pool[21380]: MultiTexCoord2dARB (offset 384) */
+   /* _mesa_function_pool[21688]: MultiTexCoord2dARB (offset 384) */
    "idd\0"
    "glMultiTexCoord2d\0"
    "glMultiTexCoord2dARB\0"
    "\0"
-   /* _mesa_function_pool[21424]: ExecuteProgramNV (will be remapped) */
+   /* _mesa_function_pool[21732]: ExecuteProgramNV (will be remapped) */
    "iip\0"
    "glExecuteProgramNV\0"
    "\0"
-   /* _mesa_function_pool[21448]: Color3f (offset 13) */
+   /* _mesa_function_pool[21756]: Color3f (offset 13) */
    "fff\0"
    "glColor3f\0"
    "\0"
-   /* _mesa_function_pool[21463]: LightEnviSGIX (dynamic) */
+   /* _mesa_function_pool[21771]: LightEnviSGIX (dynamic) */
    "ii\0"
    "glLightEnviSGIX\0"
    "\0"
-   /* _mesa_function_pool[21483]: Color3d (offset 11) */
+   /* _mesa_function_pool[21791]: Color3d (offset 11) */
    "ddd\0"
    "glColor3d\0"
    "\0"
-   /* _mesa_function_pool[21498]: Normal3dv (offset 55) */
+   /* _mesa_function_pool[21806]: Normal3dv (offset 55) */
    "p\0"
    "glNormal3dv\0"
    "\0"
-   /* _mesa_function_pool[21513]: Lightf (offset 159) */
+   /* _mesa_function_pool[21821]: Lightf (offset 159) */
    "iif\0"
    "glLightf\0"
    "\0"
-   /* _mesa_function_pool[21527]: ReplacementCodeuiSUN (dynamic) */
+   /* _mesa_function_pool[21835]: ReplacementCodeuiSUN (dynamic) */
    "i\0"
    "glReplacementCodeuiSUN\0"
    "\0"
-   /* _mesa_function_pool[21553]: MatrixMode (offset 293) */
+   /* _mesa_function_pool[21861]: MatrixMode (offset 293) */
    "i\0"
    "glMatrixMode\0"
    "\0"
-   /* _mesa_function_pool[21569]: GetPixelMapusv (offset 273) */
+   /* _mesa_function_pool[21877]: GetPixelMapusv (offset 273) */
    "ip\0"
    "glGetPixelMapusv\0"
    "\0"
-   /* _mesa_function_pool[21590]: Lighti (offset 161) */
+   /* _mesa_function_pool[21898]: Lighti (offset 161) */
    "iii\0"
    "glLighti\0"
    "\0"
-   /* _mesa_function_pool[21604]: VertexAttribPointerNV (will be remapped) */
+   /* _mesa_function_pool[21912]: VertexAttribPointerNV (will be remapped) */
    "iiiip\0"
    "glVertexAttribPointerNV\0"
    "\0"
-   /* _mesa_function_pool[21635]: ClearDepthf (will be remapped) */
+   /* _mesa_function_pool[21943]: ClearDepthf (will be remapped) */
    "f\0"
    "glClearDepthf\0"
    "\0"
-   /* _mesa_function_pool[21652]: GetBooleanIndexedvEXT (will be remapped) */
+   /* _mesa_function_pool[21960]: GetBooleanIndexedvEXT (will be remapped) */
    "iip\0"
    "glGetBooleanIndexedvEXT\0"
    "glGetBooleani_v\0"
    "\0"
-   /* _mesa_function_pool[21697]: GetFramebufferAttachmentParameterivEXT (will be remapped) */
+   /* _mesa_function_pool[22005]: GetFramebufferAttachmentParameterivEXT (will be remapped) */
    "iiip\0"
    "glGetFramebufferAttachmentParameteriv\0"
    "glGetFramebufferAttachmentParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[21782]: PixelTransformParameterfEXT (dynamic) */
+   /* _mesa_function_pool[22090]: PixelTransformParameterfEXT (dynamic) */
    "iif\0"
    "glPixelTransformParameterfEXT\0"
    "\0"
-   /* _mesa_function_pool[21817]: MultiTexCoord4dvARB (offset 401) */
+   /* _mesa_function_pool[22125]: MultiTexCoord4dvARB (offset 401) */
    "ip\0"
    "glMultiTexCoord4dv\0"
    "glMultiTexCoord4dvARB\0"
    "\0"
-   /* _mesa_function_pool[21862]: PixelTransformParameteriEXT (dynamic) */
+   /* _mesa_function_pool[22170]: PixelTransformParameteriEXT (dynamic) */
    "iii\0"
    "glPixelTransformParameteriEXT\0"
    "\0"
-   /* _mesa_function_pool[21897]: GetDoublev (offset 260) */
+   /* _mesa_function_pool[22205]: GetDoublev (offset 260) */
    "ip\0"
    "glGetDoublev\0"
    "\0"
-   /* _mesa_function_pool[21914]: MultMatrixd (offset 295) */
+   /* _mesa_function_pool[22222]: MultMatrixd (offset 295) */
    "p\0"
    "glMultMatrixd\0"
    "\0"
-   /* _mesa_function_pool[21931]: MultMatrixf (offset 294) */
+   /* _mesa_function_pool[22239]: MultMatrixf (offset 294) */
    "p\0"
    "glMultMatrixf\0"
    "\0"
-   /* _mesa_function_pool[21948]: VertexAttribI4bvEXT (will be remapped) */
+   /* _mesa_function_pool[22256]: VertexAttribI4bvEXT (will be remapped) */
    "ip\0"
    "glVertexAttribI4bvEXT\0"
    "glVertexAttribI4bv\0"
    "\0"
-   /* _mesa_function_pool[21993]: TexCoord2fColor4ubVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[22301]: TexCoord2fColor4ubVertex3fSUN (dynamic) */
    "ffiiiifff\0"
    "glTexCoord2fColor4ubVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[22036]: Uniform1iARB (will be remapped) */
+   /* _mesa_function_pool[22344]: Uniform1iARB (will be remapped) */
    "ii\0"
    "glUniform1i\0"
    "glUniform1iARB\0"
    "\0"
-   /* _mesa_function_pool[22067]: VertexAttribPointerARB (will be remapped) */
+   /* _mesa_function_pool[22375]: VertexAttribPointerARB (will be remapped) */
    "iiiiip\0"
    "glVertexAttribPointer\0"
    "glVertexAttribPointerARB\0"
    "\0"
-   /* _mesa_function_pool[22122]: VertexAttrib3sNV (will be remapped) */
+   /* _mesa_function_pool[22430]: VertexAttrib3sNV (will be remapped) */
    "iiii\0"
    "glVertexAttrib3sNV\0"
    "\0"
-   /* _mesa_function_pool[22147]: SharpenTexFuncSGIS (dynamic) */
+   /* _mesa_function_pool[22455]: SharpenTexFuncSGIS (dynamic) */
    "iip\0"
    "glSharpenTexFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[22173]: MultiTexCoord4fvARB (offset 403) */
+   /* _mesa_function_pool[22481]: MultiTexCoord4fvARB (offset 403) */
    "ip\0"
    "glMultiTexCoord4fv\0"
    "glMultiTexCoord4fvARB\0"
    "\0"
-   /* _mesa_function_pool[22218]: Uniform2uiEXT (will be remapped) */
+   /* _mesa_function_pool[22526]: Uniform2uiEXT (will be remapped) */
    "iii\0"
    "glUniform2uiEXT\0"
    "glUniform2ui\0"
    "\0"
-   /* _mesa_function_pool[22252]: UniformMatrix2x3fv (will be remapped) */
+   /* _mesa_function_pool[22560]: UniformMatrix2x3fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix2x3fv\0"
    "\0"
-   /* _mesa_function_pool[22279]: TrackMatrixNV (will be remapped) */
-   "iiii\0"
-   "glTrackMatrixNV\0"
+   /* _mesa_function_pool[22587]: SamplerParameteri (will be remapped) */
+   "iii\0"
+   "glSamplerParameteri\0"
    "\0"
-   /* _mesa_function_pool[22301]: CombinerParameteriNV (will be remapped) */
+   /* _mesa_function_pool[22612]: SamplerParameterf (will be remapped) */
+   "iif\0"
+   "glSamplerParameterf\0"
+   "\0"
+   /* _mesa_function_pool[22637]: CombinerParameteriNV (will be remapped) */
    "ii\0"
    "glCombinerParameteriNV\0"
    "\0"
-   /* _mesa_function_pool[22328]: DeleteAsyncMarkersSGIX (dynamic) */
+   /* _mesa_function_pool[22664]: DeleteAsyncMarkersSGIX (dynamic) */
    "ii\0"
    "glDeleteAsyncMarkersSGIX\0"
    "\0"
-   /* _mesa_function_pool[22357]: ReplacementCodeusSUN (dynamic) */
+   /* _mesa_function_pool[22693]: ReplacementCodeusSUN (dynamic) */
    "i\0"
    "glReplacementCodeusSUN\0"
    "\0"
-   /* _mesa_function_pool[22383]: IsAsyncMarkerSGIX (dynamic) */
+   /* _mesa_function_pool[22719]: IsAsyncMarkerSGIX (dynamic) */
    "i\0"
    "glIsAsyncMarkerSGIX\0"
    "\0"
-   /* _mesa_function_pool[22406]: FrameZoomSGIX (dynamic) */
+   /* _mesa_function_pool[22742]: FrameZoomSGIX (dynamic) */
    "i\0"
    "glFrameZoomSGIX\0"
    "\0"
-   /* _mesa_function_pool[22425]: Normal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[22761]: Normal3fVertex3fvSUN (dynamic) */
    "pp\0"
    "glNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[22452]: RasterPos4sv (offset 85) */
+   /* _mesa_function_pool[22788]: RasterPos4sv (offset 85) */
    "p\0"
    "glRasterPos4sv\0"
    "\0"
-   /* _mesa_function_pool[22470]: VertexAttrib4NsvARB (will be remapped) */
+   /* _mesa_function_pool[22806]: VertexAttrib4NsvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Nsv\0"
    "glVertexAttrib4NsvARB\0"
    "\0"
-   /* _mesa_function_pool[22515]: VertexAttrib3fvARB (will be remapped) */
+   /* _mesa_function_pool[22851]: VertexAttrib3fvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib3fv\0"
    "glVertexAttrib3fvARB\0"
    "\0"
-   /* _mesa_function_pool[22558]: ClearColor (offset 206) */
+   /* _mesa_function_pool[22894]: ClearColor (offset 206) */
    "ffff\0"
    "glClearColor\0"
    "\0"
-   /* _mesa_function_pool[22577]: GetSynciv (will be remapped) */
+   /* _mesa_function_pool[22913]: GetSynciv (will be remapped) */
    "iiipp\0"
    "glGetSynciv\0"
    "\0"
-   /* _mesa_function_pool[22596]: ClearColorIiEXT (will be remapped) */
+   /* _mesa_function_pool[22932]: ClearColorIiEXT (will be remapped) */
    "iiii\0"
    "glClearColorIiEXT\0"
    "\0"
-   /* _mesa_function_pool[22620]: DeleteFramebuffersEXT (will be remapped) */
+   /* _mesa_function_pool[22956]: DeleteFramebuffersEXT (will be remapped) */
    "ip\0"
    "glDeleteFramebuffers\0"
    "glDeleteFramebuffersEXT\0"
    "\0"
-   /* _mesa_function_pool[22669]: GlobalAlphaFactorsSUN (dynamic) */
+   /* _mesa_function_pool[23005]: GlobalAlphaFactorsSUN (dynamic) */
    "i\0"
    "glGlobalAlphaFactorsSUN\0"
    "\0"
-   /* _mesa_function_pool[22696]: IsEnabledIndexedEXT (will be remapped) */
+   /* _mesa_function_pool[23032]: IsEnabledIndexedEXT (will be remapped) */
    "ii\0"
    "glIsEnabledIndexedEXT\0"
    "glIsEnabledi\0"
    "\0"
-   /* _mesa_function_pool[22735]: TexEnviv (offset 187) */
+   /* _mesa_function_pool[23071]: TexEnviv (offset 187) */
    "iip\0"
    "glTexEnviv\0"
    "\0"
-   /* _mesa_function_pool[22751]: TexSubImage3D (offset 372) */
+   /* _mesa_function_pool[23087]: TexSubImage3D (offset 372) */
    "iiiiiiiiiip\0"
    "glTexSubImage3D\0"
    "glTexSubImage3DEXT\0"
    "\0"
-   /* _mesa_function_pool[22799]: Tangent3fEXT (dynamic) */
+   /* _mesa_function_pool[23135]: Tangent3fEXT (dynamic) */
    "fff\0"
    "glTangent3fEXT\0"
    "\0"
-   /* _mesa_function_pool[22819]: SecondaryColor3uivEXT (will be remapped) */
+   /* _mesa_function_pool[23155]: SecondaryColor3uivEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3uiv\0"
    "glSecondaryColor3uivEXT\0"
    "\0"
-   /* _mesa_function_pool[22867]: MatrixIndexubvARB (dynamic) */
+   /* _mesa_function_pool[23203]: MatrixIndexubvARB (dynamic) */
    "ip\0"
    "glMatrixIndexubvARB\0"
    "\0"
-   /* _mesa_function_pool[22891]: Color4fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[23227]: Color4fNormal3fVertex3fSUN (dynamic) */
    "ffffffffff\0"
    "glColor4fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[22932]: PixelTexGenParameterfSGIS (will be remapped) */
+   /* _mesa_function_pool[23268]: PixelTexGenParameterfSGIS (will be remapped) */
    "if\0"
    "glPixelTexGenParameterfSGIS\0"
    "\0"
-   /* _mesa_function_pool[22964]: CreateShader (will be remapped) */
+   /* _mesa_function_pool[23300]: CreateShader (will be remapped) */
    "i\0"
    "glCreateShader\0"
    "\0"
-   /* _mesa_function_pool[22982]: GetColorTableParameterfv (offset 344) */
+   /* _mesa_function_pool[23318]: GetColorTableParameterfv (offset 344) */
    "iip\0"
    "glGetColorTableParameterfv\0"
    "glGetColorTableParameterfvSGI\0"
    "glGetColorTableParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[23074]: FragmentLightModelfvSGIX (dynamic) */
+   /* _mesa_function_pool[23410]: FragmentLightModelfvSGIX (dynamic) */
    "ip\0"
    "glFragmentLightModelfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[23105]: Bitmap (offset 8) */
+   /* _mesa_function_pool[23441]: Bitmap (offset 8) */
    "iiffffp\0"
    "glBitmap\0"
    "\0"
-   /* _mesa_function_pool[23123]: MultiTexCoord3fARB (offset 394) */
+   /* _mesa_function_pool[23459]: MultiTexCoord3fARB (offset 394) */
    "ifff\0"
    "glMultiTexCoord3f\0"
    "glMultiTexCoord3fARB\0"
    "\0"
-   /* _mesa_function_pool[23168]: GetTexLevelParameterfv (offset 284) */
+   /* _mesa_function_pool[23504]: GetTexLevelParameterfv (offset 284) */
    "iiip\0"
    "glGetTexLevelParameterfv\0"
    "\0"
-   /* _mesa_function_pool[23199]: GetPixelTexGenParameterfvSGIS (will be remapped) */
+   /* _mesa_function_pool[23535]: GetPixelTexGenParameterfvSGIS (will be remapped) */
    "ip\0"
    "glGetPixelTexGenParameterfvSGIS\0"
    "\0"
-   /* _mesa_function_pool[23235]: GenFramebuffersEXT (will be remapped) */
+   /* _mesa_function_pool[23571]: GenFramebuffersEXT (will be remapped) */
    "ip\0"
    "glGenFramebuffers\0"
    "glGenFramebuffersEXT\0"
    "\0"
-   /* _mesa_function_pool[23278]: VertexAttribDivisor (will be remapped) */
+   /* _mesa_function_pool[23614]: VertexAttribDivisor (will be remapped) */
    "ii\0"
    "glVertexAttribDivisor\0"
    "\0"
-   /* _mesa_function_pool[23304]: GetProgramParameterdvNV (will be remapped) */
+   /* _mesa_function_pool[23640]: GetProgramParameterdvNV (will be remapped) */
    "iiip\0"
    "glGetProgramParameterdvNV\0"
    "\0"
-   /* _mesa_function_pool[23336]: Vertex2sv (offset 133) */
+   /* _mesa_function_pool[23672]: Vertex2sv (offset 133) */
    "p\0"
    "glVertex2sv\0"
    "\0"
-   /* _mesa_function_pool[23351]: GetIntegerv (offset 263) */
+   /* _mesa_function_pool[23687]: GetIntegerv (offset 263) */
    "ip\0"
    "glGetIntegerv\0"
    "\0"
-   /* _mesa_function_pool[23369]: IsVertexArrayAPPLE (will be remapped) */
+   /* _mesa_function_pool[23705]: IsVertexArrayAPPLE (will be remapped) */
    "i\0"
    "glIsVertexArray\0"
    "glIsVertexArrayAPPLE\0"
    "\0"
-   /* _mesa_function_pool[23409]: FragmentLightfvSGIX (dynamic) */
+   /* _mesa_function_pool[23745]: FragmentLightfvSGIX (dynamic) */
    "iip\0"
    "glFragmentLightfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[23436]: VertexAttribDivisorARB (will be remapped) */
+   /* _mesa_function_pool[23772]: VertexAttribDivisorARB (will be remapped) */
    "ii\0"
    "glVertexAttribDivisorARB\0"
    "\0"
-   /* _mesa_function_pool[23465]: DetachShader (will be remapped) */
+   /* _mesa_function_pool[23801]: DetachShader (will be remapped) */
    "ii\0"
    "glDetachShader\0"
    "\0"
-   /* _mesa_function_pool[23484]: VertexAttrib4NubARB (will be remapped) */
+   /* _mesa_function_pool[23820]: VertexAttrib4NubARB (will be remapped) */
    "iiiii\0"
    "glVertexAttrib4Nub\0"
    "glVertexAttrib4NubARB\0"
    "\0"
-   /* _mesa_function_pool[23532]: GetProgramEnvParameterfvARB (will be remapped) */
+   /* _mesa_function_pool[23868]: GetProgramEnvParameterfvARB (will be remapped) */
    "iip\0"
    "glGetProgramEnvParameterfvARB\0"
    "\0"
-   /* _mesa_function_pool[23567]: GetTrackMatrixivNV (will be remapped) */
+   /* _mesa_function_pool[23903]: GetTrackMatrixivNV (will be remapped) */
    "iiip\0"
    "glGetTrackMatrixivNV\0"
    "\0"
-   /* _mesa_function_pool[23594]: VertexAttrib3svNV (will be remapped) */
+   /* _mesa_function_pool[23930]: VertexAttrib3svNV (will be remapped) */
    "ip\0"
    "glVertexAttrib3svNV\0"
    "\0"
-   /* _mesa_function_pool[23618]: Uniform4fvARB (will be remapped) */
+   /* _mesa_function_pool[23954]: Uniform4fvARB (will be remapped) */
    "iip\0"
    "glUniform4fv\0"
    "glUniform4fvARB\0"
    "\0"
-   /* _mesa_function_pool[23652]: MultTransposeMatrixfARB (will be remapped) */
+   /* _mesa_function_pool[23988]: MultTransposeMatrixfARB (will be remapped) */
    "p\0"
    "glMultTransposeMatrixf\0"
    "glMultTransposeMatrixfARB\0"
    "\0"
-   /* _mesa_function_pool[23704]: GetTexEnviv (offset 277) */
+   /* _mesa_function_pool[24040]: GetTexEnviv (offset 277) */
    "iip\0"
    "glGetTexEnviv\0"
    "\0"
-   /* _mesa_function_pool[23723]: ColorFragmentOp1ATI (will be remapped) */
+   /* _mesa_function_pool[24059]: ColorFragmentOp1ATI (will be remapped) */
    "iiiiiii\0"
    "glColorFragmentOp1ATI\0"
    "\0"
-   /* _mesa_function_pool[23754]: GetUniformfvARB (will be remapped) */
+   /* _mesa_function_pool[24090]: GetUniformfvARB (will be remapped) */
    "iip\0"
    "glGetUniformfv\0"
    "glGetUniformfvARB\0"
    "\0"
-   /* _mesa_function_pool[23792]: EGLImageTargetRenderbufferStorageOES (will be remapped) */
+   /* _mesa_function_pool[24128]: EGLImageTargetRenderbufferStorageOES (will be remapped) */
    "ip\0"
    "glEGLImageTargetRenderbufferStorageOES\0"
    "\0"
-   /* _mesa_function_pool[23835]: VertexAttribI2ivEXT (will be remapped) */
+   /* _mesa_function_pool[24171]: VertexAttribI2ivEXT (will be remapped) */
    "ip\0"
    "glVertexAttribI2ivEXT\0"
    "glVertexAttribI2iv\0"
    "\0"
-   /* _mesa_function_pool[23880]: PopClientAttrib (offset 334) */
+   /* _mesa_function_pool[24216]: PopClientAttrib (offset 334) */
    "\0"
    "glPopClientAttrib\0"
    "\0"
-   /* _mesa_function_pool[23900]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[24236]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */
    "iffffffffffff\0"
    "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[23971]: DetachObjectARB (will be remapped) */
+   /* _mesa_function_pool[24307]: DetachObjectARB (will be remapped) */
    "ii\0"
    "glDetachObjectARB\0"
    "\0"
-   /* _mesa_function_pool[23993]: VertexBlendARB (dynamic) */
+   /* _mesa_function_pool[24329]: VertexBlendARB (dynamic) */
    "i\0"
    "glVertexBlendARB\0"
    "\0"
-   /* _mesa_function_pool[24013]: WindowPos3iMESA (will be remapped) */
+   /* _mesa_function_pool[24349]: WindowPos3iMESA (will be remapped) */
    "iii\0"
    "glWindowPos3i\0"
    "glWindowPos3iARB\0"
    "glWindowPos3iMESA\0"
    "\0"
-   /* _mesa_function_pool[24067]: SeparableFilter2D (offset 360) */
+   /* _mesa_function_pool[24403]: SeparableFilter2D (offset 360) */
    "iiiiiipp\0"
    "glSeparableFilter2D\0"
    "glSeparableFilter2DEXT\0"
    "\0"
-   /* _mesa_function_pool[24120]: ProgramParameteriARB (will be remapped) */
+   /* _mesa_function_pool[24456]: ProgramParameteriARB (will be remapped) */
    "iii\0"
    "glProgramParameteriARB\0"
    "\0"
-   /* _mesa_function_pool[24148]: Map1d (offset 220) */
+   /* _mesa_function_pool[24484]: Map1d (offset 220) */
    "iddiip\0"
    "glMap1d\0"
    "\0"
-   /* _mesa_function_pool[24164]: Map1f (offset 221) */
+   /* _mesa_function_pool[24500]: Map1f (offset 221) */
    "iffiip\0"
    "glMap1f\0"
    "\0"
-   /* _mesa_function_pool[24180]: CompressedTexImage2DARB (will be remapped) */
+   /* _mesa_function_pool[24516]: CompressedTexImage2DARB (will be remapped) */
    "iiiiiiip\0"
    "glCompressedTexImage2D\0"
    "glCompressedTexImage2DARB\0"
    "\0"
-   /* _mesa_function_pool[24239]: ArrayElement (offset 306) */
+   /* _mesa_function_pool[24575]: ArrayElement (offset 306) */
    "i\0"
    "glArrayElement\0"
    "glArrayElementEXT\0"
    "\0"
-   /* _mesa_function_pool[24275]: TexImage2D (offset 183) */
+   /* _mesa_function_pool[24611]: TexImage2D (offset 183) */
    "iiiiiiiip\0"
    "glTexImage2D\0"
    "\0"
-   /* _mesa_function_pool[24299]: DepthBoundsEXT (will be remapped) */
+   /* _mesa_function_pool[24635]: DepthBoundsEXT (will be remapped) */
    "dd\0"
    "glDepthBoundsEXT\0"
    "\0"
-   /* _mesa_function_pool[24320]: ProgramParameters4fvNV (will be remapped) */
+   /* _mesa_function_pool[24656]: ProgramParameters4fvNV (will be remapped) */
    "iiip\0"
    "glProgramParameters4fvNV\0"
    "\0"
-   /* _mesa_function_pool[24351]: DeformationMap3fSGIX (dynamic) */
+   /* _mesa_function_pool[24687]: DeformationMap3fSGIX (dynamic) */
    "iffiiffiiffiip\0"
    "glDeformationMap3fSGIX\0"
    "\0"
-   /* _mesa_function_pool[24390]: GetProgramivNV (will be remapped) */
+   /* _mesa_function_pool[24726]: GetProgramivNV (will be remapped) */
    "iip\0"
    "glGetProgramivNV\0"
    "\0"
-   /* _mesa_function_pool[24412]: GetFragDataLocationEXT (will be remapped) */
+   /* _mesa_function_pool[24748]: GetFragDataLocationEXT (will be remapped) */
    "ip\0"
    "glGetFragDataLocationEXT\0"
    "glGetFragDataLocation\0"
    "\0"
-   /* _mesa_function_pool[24463]: GetMinmaxParameteriv (offset 366) */
+   /* _mesa_function_pool[24799]: GetMinmaxParameteriv (offset 366) */
    "iip\0"
    "glGetMinmaxParameteriv\0"
    "glGetMinmaxParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[24517]: PixelTransferf (offset 247) */
+   /* _mesa_function_pool[24853]: PixelTransferf (offset 247) */
    "if\0"
    "glPixelTransferf\0"
    "\0"
-   /* _mesa_function_pool[24538]: CopyTexImage1D (offset 323) */
+   /* _mesa_function_pool[24874]: CopyTexImage1D (offset 323) */
    "iiiiiii\0"
    "glCopyTexImage1D\0"
    "glCopyTexImage1DEXT\0"
    "\0"
-   /* _mesa_function_pool[24584]: PushMatrix (offset 298) */
+   /* _mesa_function_pool[24920]: PushMatrix (offset 298) */
    "\0"
    "glPushMatrix\0"
    "\0"
-   /* _mesa_function_pool[24599]: Fogiv (offset 156) */
+   /* _mesa_function_pool[24935]: Fogiv (offset 156) */
    "ip\0"
    "glFogiv\0"
    "\0"
-   /* _mesa_function_pool[24611]: TexCoord1dv (offset 95) */
+   /* _mesa_function_pool[24947]: TexCoord1dv (offset 95) */
    "p\0"
    "glTexCoord1dv\0"
    "\0"
-   /* _mesa_function_pool[24628]: AlphaFragmentOp3ATI (will be remapped) */
+   /* _mesa_function_pool[24964]: AlphaFragmentOp3ATI (will be remapped) */
    "iiiiiiiiiiii\0"
    "glAlphaFragmentOp3ATI\0"
    "\0"
-   /* _mesa_function_pool[24664]: PixelTransferi (offset 248) */
+   /* _mesa_function_pool[25000]: PixelTransferi (offset 248) */
    "ii\0"
    "glPixelTransferi\0"
    "\0"
-   /* _mesa_function_pool[24685]: GetVertexAttribdvNV (will be remapped) */
+   /* _mesa_function_pool[25021]: GetVertexAttribdvNV (will be remapped) */
    "iip\0"
    "glGetVertexAttribdvNV\0"
    "\0"
-   /* _mesa_function_pool[24712]: VertexAttrib3fvNV (will be remapped) */
+   /* _mesa_function_pool[25048]: VertexAttrib3fvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib3fvNV\0"
    "\0"
-   /* _mesa_function_pool[24736]: Rotatef (offset 300) */
+   /* _mesa_function_pool[25072]: Rotatef (offset 300) */
    "ffff\0"
    "glRotatef\0"
    "\0"
-   /* _mesa_function_pool[24752]: GetFinalCombinerInputParameterivNV (will be remapped) */
+   /* _mesa_function_pool[25088]: GetFinalCombinerInputParameterivNV (will be remapped) */
    "iip\0"
    "glGetFinalCombinerInputParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[24794]: Vertex3i (offset 138) */
+   /* _mesa_function_pool[25130]: Vertex3i (offset 138) */
    "iii\0"
    "glVertex3i\0"
    "\0"
-   /* _mesa_function_pool[24810]: Vertex3f (offset 136) */
+   /* _mesa_function_pool[25146]: Vertex3f (offset 136) */
    "fff\0"
    "glVertex3f\0"
    "\0"
-   /* _mesa_function_pool[24826]: Clear (offset 203) */
+   /* _mesa_function_pool[25162]: Clear (offset 203) */
    "i\0"
    "glClear\0"
    "\0"
-   /* _mesa_function_pool[24837]: Vertex3d (offset 134) */
+   /* _mesa_function_pool[25173]: Vertex3d (offset 134) */
    "ddd\0"
    "glVertex3d\0"
    "\0"
-   /* _mesa_function_pool[24853]: GetMapParameterivNV (dynamic) */
+   /* _mesa_function_pool[25189]: GetMapParameterivNV (dynamic) */
    "iip\0"
    "glGetMapParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[24880]: Uniform4iARB (will be remapped) */
+   /* _mesa_function_pool[25216]: Uniform4iARB (will be remapped) */
    "iiiii\0"
    "glUniform4i\0"
    "glUniform4iARB\0"
    "\0"
-   /* _mesa_function_pool[24914]: ReadBuffer (offset 254) */
+   /* _mesa_function_pool[25250]: ReadBuffer (offset 254) */
    "i\0"
    "glReadBuffer\0"
    "\0"
-   /* _mesa_function_pool[24930]: ConvolutionParameteri (offset 352) */
+   /* _mesa_function_pool[25266]: ConvolutionParameteri (offset 352) */
    "iii\0"
    "glConvolutionParameteri\0"
    "glConvolutionParameteriEXT\0"
    "\0"
-   /* _mesa_function_pool[24986]: Ortho (offset 296) */
+   /* _mesa_function_pool[25322]: Ortho (offset 296) */
    "dddddd\0"
    "glOrtho\0"
    "\0"
-   /* _mesa_function_pool[25002]: Binormal3sEXT (dynamic) */
+   /* _mesa_function_pool[25338]: Binormal3sEXT (dynamic) */
    "iii\0"
    "glBinormal3sEXT\0"
    "\0"
-   /* _mesa_function_pool[25023]: ListBase (offset 6) */
+   /* _mesa_function_pool[25359]: ListBase (offset 6) */
    "i\0"
    "glListBase\0"
    "\0"
-   /* _mesa_function_pool[25037]: Vertex3s (offset 140) */
+   /* _mesa_function_pool[25373]: VertexAttribI3ivEXT (will be remapped) */
+   "ip\0"
+   "glVertexAttribI3ivEXT\0"
+   "glVertexAttribI3iv\0"
+   "\0"
+   /* _mesa_function_pool[25418]: Vertex3s (offset 140) */
    "iii\0"
    "glVertex3s\0"
    "\0"
-   /* _mesa_function_pool[25053]: ConvolutionParameterf (offset 350) */
+   /* _mesa_function_pool[25434]: ConvolutionParameterf (offset 350) */
    "iif\0"
    "glConvolutionParameterf\0"
    "glConvolutionParameterfEXT\0"
    "\0"
-   /* _mesa_function_pool[25109]: GetColorTableParameteriv (offset 345) */
+   /* _mesa_function_pool[25490]: GetColorTableParameteriv (offset 345) */
    "iip\0"
    "glGetColorTableParameteriv\0"
    "glGetColorTableParameterivSGI\0"
    "glGetColorTableParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[25201]: ProgramEnvParameter4dvARB (will be remapped) */
+   /* _mesa_function_pool[25582]: ProgramEnvParameter4dvARB (will be remapped) */
    "iip\0"
    "glProgramEnvParameter4dvARB\0"
    "glProgramParameter4dvNV\0"
    "\0"
-   /* _mesa_function_pool[25258]: ShadeModel (offset 177) */
+   /* _mesa_function_pool[25639]: ShadeModel (offset 177) */
    "i\0"
    "glShadeModel\0"
    "\0"
-   /* _mesa_function_pool[25274]: VertexAttribs2fvNV (will be remapped) */
+   /* _mesa_function_pool[25655]: VertexAttribs2fvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs2fvNV\0"
    "\0"
-   /* _mesa_function_pool[25300]: Rectiv (offset 91) */
+   /* _mesa_function_pool[25681]: Rectiv (offset 91) */
    "pp\0"
    "glRectiv\0"
    "\0"
-   /* _mesa_function_pool[25313]: UseProgramObjectARB (will be remapped) */
+   /* _mesa_function_pool[25694]: UseProgramObjectARB (will be remapped) */
    "i\0"
    "glUseProgram\0"
    "glUseProgramObjectARB\0"
    "\0"
-   /* _mesa_function_pool[25351]: GetMapParameterfvNV (dynamic) */
+   /* _mesa_function_pool[25732]: GetMapParameterfvNV (dynamic) */
    "iip\0"
    "glGetMapParameterfvNV\0"
    "\0"
-   /* _mesa_function_pool[25378]: EndConditionalRenderNV (will be remapped) */
+   /* _mesa_function_pool[25759]: EndConditionalRenderNV (will be remapped) */
    "\0"
    "glEndConditionalRenderNV\0"
    "glEndConditionalRender\0"
    "\0"
-   /* _mesa_function_pool[25428]: PassTexCoordATI (will be remapped) */
+   /* _mesa_function_pool[25809]: PassTexCoordATI (will be remapped) */
    "iii\0"
    "glPassTexCoordATI\0"
    "\0"
-   /* _mesa_function_pool[25451]: DeleteProgram (will be remapped) */
+   /* _mesa_function_pool[25832]: DeleteProgram (will be remapped) */
    "i\0"
    "glDeleteProgram\0"
    "\0"
-   /* _mesa_function_pool[25470]: Tangent3ivEXT (dynamic) */
-   "p\0"
-   "glTangent3ivEXT\0"
+   /* _mesa_function_pool[25851]: GetSamplerParameteriv (will be remapped) */
+   "iip\0"
+   "glGetSamplerParameteriv\0"
    "\0"
-   /* _mesa_function_pool[25489]: Tangent3dEXT (dynamic) */
+   /* _mesa_function_pool[25880]: Tangent3dEXT (dynamic) */
    "ddd\0"
    "glTangent3dEXT\0"
    "\0"
-   /* _mesa_function_pool[25509]: SecondaryColor3dvEXT (will be remapped) */
+   /* _mesa_function_pool[25900]: SecondaryColor3dvEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3dv\0"
    "glSecondaryColor3dvEXT\0"
    "\0"
-   /* _mesa_function_pool[25555]: AlphaFragmentOp2ATI (will be remapped) */
+   /* _mesa_function_pool[25946]: AlphaFragmentOp2ATI (will be remapped) */
    "iiiiiiiii\0"
    "glAlphaFragmentOp2ATI\0"
    "\0"
-   /* _mesa_function_pool[25588]: Vertex2fv (offset 129) */
+   /* _mesa_function_pool[25979]: Vertex2fv (offset 129) */
    "p\0"
    "glVertex2fv\0"
    "\0"
-   /* _mesa_function_pool[25603]: MultiDrawArraysEXT (will be remapped) */
+   /* _mesa_function_pool[25994]: MultiDrawArraysEXT (will be remapped) */
    "ippi\0"
    "glMultiDrawArrays\0"
    "glMultiDrawArraysEXT\0"
    "\0"
-   /* _mesa_function_pool[25648]: BindRenderbufferEXT (will be remapped) */
+   /* _mesa_function_pool[26039]: BindRenderbufferEXT (will be remapped) */
    "ii\0"
    "glBindRenderbuffer\0"
    "glBindRenderbufferEXT\0"
    "\0"
-   /* _mesa_function_pool[25693]: MultiTexCoord4dARB (offset 400) */
+   /* _mesa_function_pool[26084]: MultiTexCoord4dARB (offset 400) */
    "idddd\0"
    "glMultiTexCoord4d\0"
    "glMultiTexCoord4dARB\0"
    "\0"
-   /* _mesa_function_pool[25739]: FramebufferTextureFaceARB (will be remapped) */
+   /* _mesa_function_pool[26130]: FramebufferTextureFaceARB (will be remapped) */
    "iiiii\0"
    "glFramebufferTextureFaceARB\0"
    "\0"
-   /* _mesa_function_pool[25774]: Vertex3sv (offset 141) */
+   /* _mesa_function_pool[26165]: Vertex3sv (offset 141) */
    "p\0"
    "glVertex3sv\0"
    "\0"
-   /* _mesa_function_pool[25789]: SecondaryColor3usEXT (will be remapped) */
+   /* _mesa_function_pool[26180]: SecondaryColor3usEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3us\0"
    "glSecondaryColor3usEXT\0"
    "\0"
-   /* _mesa_function_pool[25837]: ProgramLocalParameter4fvARB (will be remapped) */
+   /* _mesa_function_pool[26228]: ProgramLocalParameter4fvARB (will be remapped) */
    "iip\0"
    "glProgramLocalParameter4fvARB\0"
    "\0"
-   /* _mesa_function_pool[25872]: DeleteProgramsNV (will be remapped) */
+   /* _mesa_function_pool[26263]: DeleteProgramsNV (will be remapped) */
    "ip\0"
    "glDeleteProgramsARB\0"
    "glDeleteProgramsNV\0"
    "\0"
-   /* _mesa_function_pool[25915]: EvalMesh1 (offset 236) */
+   /* _mesa_function_pool[26306]: EvalMesh1 (offset 236) */
    "iii\0"
    "glEvalMesh1\0"
    "\0"
-   /* _mesa_function_pool[25932]: PauseTransformFeedback (will be remapped) */
+   /* _mesa_function_pool[26323]: PauseTransformFeedback (will be remapped) */
    "\0"
    "glPauseTransformFeedback\0"
    "\0"
-   /* _mesa_function_pool[25959]: MultiTexCoord1sARB (offset 382) */
+   /* _mesa_function_pool[26350]: MultiTexCoord1sARB (offset 382) */
    "ii\0"
    "glMultiTexCoord1s\0"
    "glMultiTexCoord1sARB\0"
    "\0"
-   /* _mesa_function_pool[26002]: ReplacementCodeuiColor3fVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[26393]: ReplacementCodeuiColor3fVertex3fSUN (dynamic) */
    "iffffff\0"
    "glReplacementCodeuiColor3fVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[26049]: GetVertexAttribPointervNV (will be remapped) */
+   /* _mesa_function_pool[26440]: GetVertexAttribPointervNV (will be remapped) */
    "iip\0"
    "glGetVertexAttribPointerv\0"
    "glGetVertexAttribPointervARB\0"
    "glGetVertexAttribPointervNV\0"
    "\0"
-   /* _mesa_function_pool[26137]: VertexAttribs1fvNV (will be remapped) */
+   /* _mesa_function_pool[26528]: VertexAttribs1fvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs1fvNV\0"
    "\0"
-   /* _mesa_function_pool[26163]: MultiTexCoord1dvARB (offset 377) */
+   /* _mesa_function_pool[26554]: MultiTexCoord1dvARB (offset 377) */
    "ip\0"
    "glMultiTexCoord1dv\0"
    "glMultiTexCoord1dvARB\0"
    "\0"
-   /* _mesa_function_pool[26208]: Uniform2iARB (will be remapped) */
+   /* _mesa_function_pool[26599]: Uniform2iARB (will be remapped) */
    "iii\0"
    "glUniform2i\0"
    "glUniform2iARB\0"
    "\0"
-   /* _mesa_function_pool[26240]: Vertex2iv (offset 131) */
+   /* _mesa_function_pool[26631]: Vertex2iv (offset 131) */
    "p\0"
    "glVertex2iv\0"
    "\0"
-   /* _mesa_function_pool[26255]: GetProgramStringNV (will be remapped) */
+   /* _mesa_function_pool[26646]: GetProgramStringNV (will be remapped) */
    "iip\0"
    "glGetProgramStringNV\0"
    "\0"
-   /* _mesa_function_pool[26281]: ColorPointerEXT (will be remapped) */
+   /* _mesa_function_pool[26672]: ColorPointerEXT (will be remapped) */
    "iiiip\0"
    "glColorPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[26306]: LineWidth (offset 168) */
+   /* _mesa_function_pool[26697]: LineWidth (offset 168) */
    "f\0"
    "glLineWidth\0"
    "\0"
-   /* _mesa_function_pool[26321]: MapBufferARB (will be remapped) */
+   /* _mesa_function_pool[26712]: MapBufferARB (will be remapped) */
    "ii\0"
    "glMapBuffer\0"
    "glMapBufferARB\0"
    "\0"
-   /* _mesa_function_pool[26352]: MultiDrawElementsBaseVertex (will be remapped) */
+   /* _mesa_function_pool[26743]: MultiDrawElementsBaseVertex (will be remapped) */
    "ipipip\0"
    "glMultiDrawElementsBaseVertex\0"
    "\0"
-   /* _mesa_function_pool[26390]: TexParameterIuivEXT (will be remapped) */
+   /* _mesa_function_pool[26781]: TexParameterIuivEXT (will be remapped) */
    "iip\0"
    "glTexParameterIuivEXT\0"
    "glTexParameterIuiv\0"
    "\0"
-   /* _mesa_function_pool[26436]: Binormal3svEXT (dynamic) */
+   /* _mesa_function_pool[26827]: Binormal3svEXT (dynamic) */
    "p\0"
    "glBinormal3svEXT\0"
    "\0"
-   /* _mesa_function_pool[26456]: ApplyTextureEXT (dynamic) */
+   /* _mesa_function_pool[26847]: ApplyTextureEXT (dynamic) */
    "i\0"
    "glApplyTextureEXT\0"
    "\0"
-   /* _mesa_function_pool[26477]: GetBufferParameteri64v (will be remapped) */
+   /* _mesa_function_pool[26868]: GetBufferParameteri64v (will be remapped) */
    "iip\0"
    "glGetBufferParameteri64v\0"
    "\0"
-   /* _mesa_function_pool[26507]: TexGendv (offset 189) */
+   /* _mesa_function_pool[26898]: TexGendv (offset 189) */
    "iip\0"
    "glTexGendv\0"
    "\0"
-   /* _mesa_function_pool[26523]: VertexAttribI3iEXT (will be remapped) */
+   /* _mesa_function_pool[26914]: VertexAttribI3iEXT (will be remapped) */
    "iiii\0"
    "glVertexAttribI3iEXT\0"
    "glVertexAttribI3i\0"
    "\0"
-   /* _mesa_function_pool[26568]: EnableIndexedEXT (will be remapped) */
+   /* _mesa_function_pool[26959]: EnableIndexedEXT (will be remapped) */
    "ii\0"
    "glEnableIndexedEXT\0"
    "glEnablei\0"
    "\0"
-   /* _mesa_function_pool[26601]: TextureMaterialEXT (dynamic) */
+   /* _mesa_function_pool[26992]: TextureMaterialEXT (dynamic) */
    "ii\0"
    "glTextureMaterialEXT\0"
    "\0"
-   /* _mesa_function_pool[26626]: TextureLightEXT (dynamic) */
+   /* _mesa_function_pool[27017]: TextureLightEXT (dynamic) */
    "i\0"
    "glTextureLightEXT\0"
    "\0"
-   /* _mesa_function_pool[26647]: ResetMinmax (offset 370) */
+   /* _mesa_function_pool[27038]: ResetMinmax (offset 370) */
    "i\0"
    "glResetMinmax\0"
    "glResetMinmaxEXT\0"
    "\0"
-   /* _mesa_function_pool[26681]: SpriteParameterfSGIX (dynamic) */
+   /* _mesa_function_pool[27072]: SpriteParameterfSGIX (dynamic) */
    "if\0"
    "glSpriteParameterfSGIX\0"
    "\0"
-   /* _mesa_function_pool[26708]: EnableClientState (offset 313) */
+   /* _mesa_function_pool[27099]: EnableClientState (offset 313) */
    "i\0"
    "glEnableClientState\0"
    "\0"
-   /* _mesa_function_pool[26731]: VertexAttrib4sNV (will be remapped) */
+   /* _mesa_function_pool[27122]: VertexAttrib4sNV (will be remapped) */
    "iiiii\0"
    "glVertexAttrib4sNV\0"
    "\0"
-   /* _mesa_function_pool[26757]: GetConvolutionParameterfv (offset 357) */
+   /* _mesa_function_pool[27148]: GetConvolutionParameterfv (offset 357) */
    "iip\0"
    "glGetConvolutionParameterfv\0"
    "glGetConvolutionParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[26821]: VertexAttribs4dvNV (will be remapped) */
+   /* _mesa_function_pool[27212]: VertexAttribs4dvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs4dvNV\0"
    "\0"
-   /* _mesa_function_pool[26847]: MultiModeDrawArraysIBM (will be remapped) */
-   "pppii\0"
-   "glMultiModeDrawArraysIBM\0"
-   "\0"
-   /* _mesa_function_pool[26879]: VertexAttrib4dARB (will be remapped) */
+   /* _mesa_function_pool[27238]: VertexAttrib4dARB (will be remapped) */
    "idddd\0"
    "glVertexAttrib4d\0"
    "glVertexAttrib4dARB\0"
    "\0"
-   /* _mesa_function_pool[26923]: GetTexBumpParameterfvATI (will be remapped) */
+   /* _mesa_function_pool[27282]: GetTexBumpParameterfvATI (will be remapped) */
    "ip\0"
    "glGetTexBumpParameterfvATI\0"
    "\0"
-   /* _mesa_function_pool[26954]: ProgramNamedParameter4dNV (will be remapped) */
+   /* _mesa_function_pool[27313]: ProgramNamedParameter4dNV (will be remapped) */
    "iipdddd\0"
    "glProgramNamedParameter4dNV\0"
    "\0"
-   /* _mesa_function_pool[26991]: GetMaterialfv (offset 269) */
+   /* _mesa_function_pool[27350]: GetMaterialfv (offset 269) */
    "iip\0"
    "glGetMaterialfv\0"
    "\0"
-   /* _mesa_function_pool[27012]: VertexWeightfEXT (dynamic) */
+   /* _mesa_function_pool[27371]: VertexWeightfEXT (dynamic) */
    "f\0"
    "glVertexWeightfEXT\0"
    "\0"
-   /* _mesa_function_pool[27034]: SetFragmentShaderConstantATI (will be remapped) */
+   /* _mesa_function_pool[27393]: SetFragmentShaderConstantATI (will be remapped) */
    "ip\0"
    "glSetFragmentShaderConstantATI\0"
    "\0"
-   /* _mesa_function_pool[27069]: Binormal3fEXT (dynamic) */
+   /* _mesa_function_pool[27428]: Binormal3fEXT (dynamic) */
    "fff\0"
    "glBinormal3fEXT\0"
    "\0"
-   /* _mesa_function_pool[27090]: CallList (offset 2) */
+   /* _mesa_function_pool[27449]: CallList (offset 2) */
    "i\0"
    "glCallList\0"
    "\0"
-   /* _mesa_function_pool[27104]: Materialfv (offset 170) */
+   /* _mesa_function_pool[27463]: Materialfv (offset 170) */
    "iip\0"
    "glMaterialfv\0"
    "\0"
-   /* _mesa_function_pool[27122]: TexCoord3fv (offset 113) */
+   /* _mesa_function_pool[27481]: TexCoord3fv (offset 113) */
    "p\0"
    "glTexCoord3fv\0"
    "\0"
-   /* _mesa_function_pool[27139]: FogCoordfvEXT (will be remapped) */
+   /* _mesa_function_pool[27498]: FogCoordfvEXT (will be remapped) */
    "p\0"
    "glFogCoordfv\0"
    "glFogCoordfvEXT\0"
    "\0"
-   /* _mesa_function_pool[27171]: MultiTexCoord1ivARB (offset 381) */
+   /* _mesa_function_pool[27530]: MultiTexCoord1ivARB (offset 381) */
    "ip\0"
    "glMultiTexCoord1iv\0"
    "glMultiTexCoord1ivARB\0"
    "\0"
-   /* _mesa_function_pool[27216]: SecondaryColor3ubEXT (will be remapped) */
+   /* _mesa_function_pool[27575]: SecondaryColor3ubEXT (will be remapped) */
    "iii\0"
    "glSecondaryColor3ub\0"
    "glSecondaryColor3ubEXT\0"
    "\0"
-   /* _mesa_function_pool[27264]: MultiTexCoord2ivARB (offset 389) */
+   /* _mesa_function_pool[27623]: MultiTexCoord2ivARB (offset 389) */
    "ip\0"
    "glMultiTexCoord2iv\0"
    "glMultiTexCoord2ivARB\0"
    "\0"
-   /* _mesa_function_pool[27309]: FogFuncSGIS (dynamic) */
+   /* _mesa_function_pool[27668]: FogFuncSGIS (dynamic) */
    "ip\0"
    "glFogFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[27327]: CopyTexSubImage2D (offset 326) */
+   /* _mesa_function_pool[27686]: CopyTexSubImage2D (offset 326) */
    "iiiiiiii\0"
    "glCopyTexSubImage2D\0"
    "glCopyTexSubImage2DEXT\0"
    "\0"
-   /* _mesa_function_pool[27380]: GetObjectParameterivARB (will be remapped) */
+   /* _mesa_function_pool[27739]: GetObjectParameterivARB (will be remapped) */
    "iip\0"
    "glGetObjectParameterivARB\0"
    "\0"
-   /* _mesa_function_pool[27411]: Color3iv (offset 16) */
+   /* _mesa_function_pool[27770]: Color3iv (offset 16) */
    "p\0"
    "glColor3iv\0"
    "\0"
-   /* _mesa_function_pool[27425]: TexCoord4fVertex4fSUN (dynamic) */
+   /* _mesa_function_pool[27784]: TexCoord4fVertex4fSUN (dynamic) */
    "ffffffff\0"
    "glTexCoord4fVertex4fSUN\0"
    "\0"
-   /* _mesa_function_pool[27459]: DrawElements (offset 311) */
+   /* _mesa_function_pool[27818]: DrawElements (offset 311) */
    "iiip\0"
    "glDrawElements\0"
    "\0"
-   /* _mesa_function_pool[27480]: BindVertexArrayAPPLE (will be remapped) */
+   /* _mesa_function_pool[27839]: BindVertexArrayAPPLE (will be remapped) */
    "i\0"
    "glBindVertexArrayAPPLE\0"
    "\0"
-   /* _mesa_function_pool[27506]: GetProgramLocalParameterdvARB (will be remapped) */
+   /* _mesa_function_pool[27865]: GetProgramLocalParameterdvARB (will be remapped) */
    "iip\0"
    "glGetProgramLocalParameterdvARB\0"
    "\0"
-   /* _mesa_function_pool[27543]: GetHistogramParameteriv (offset 363) */
+   /* _mesa_function_pool[27902]: GetHistogramParameteriv (offset 363) */
    "iip\0"
    "glGetHistogramParameteriv\0"
    "glGetHistogramParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[27603]: MultiTexCoord1iARB (offset 380) */
+   /* _mesa_function_pool[27962]: MultiTexCoord1iARB (offset 380) */
    "ii\0"
    "glMultiTexCoord1i\0"
    "glMultiTexCoord1iARB\0"
    "\0"
-   /* _mesa_function_pool[27646]: GetConvolutionFilter (offset 356) */
+   /* _mesa_function_pool[28005]: GetConvolutionFilter (offset 356) */
    "iiip\0"
    "glGetConvolutionFilter\0"
    "glGetConvolutionFilterEXT\0"
    "\0"
-   /* _mesa_function_pool[27701]: GetProgramivARB (will be remapped) */
+   /* _mesa_function_pool[28060]: GetProgramivARB (will be remapped) */
    "iip\0"
    "glGetProgramivARB\0"
    "\0"
-   /* _mesa_function_pool[27724]: BlendFuncSeparateEXT (will be remapped) */
+   /* _mesa_function_pool[28083]: TexBufferARB (will be remapped) */
+   "iii\0"
+   "glTexBufferARB\0"
+   "\0"
+   /* _mesa_function_pool[28103]: BlendFuncSeparateEXT (will be remapped) */
    "iiii\0"
    "glBlendFuncSeparate\0"
    "glBlendFuncSeparateEXT\0"
    "glBlendFuncSeparateINGR\0"
    "\0"
-   /* _mesa_function_pool[27797]: MapBufferRange (will be remapped) */
+   /* _mesa_function_pool[28176]: MapBufferRange (will be remapped) */
    "iiii\0"
    "glMapBufferRange\0"
    "\0"
-   /* _mesa_function_pool[27820]: ProgramParameters4dvNV (will be remapped) */
+   /* _mesa_function_pool[28199]: ProgramParameters4dvNV (will be remapped) */
    "iiip\0"
    "glProgramParameters4dvNV\0"
    "\0"
-   /* _mesa_function_pool[27851]: TexCoord2fColor3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[28230]: TexCoord2fColor3fVertex3fvSUN (dynamic) */
    "ppp\0"
    "glTexCoord2fColor3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[27888]: EvalPoint2 (offset 239) */
+   /* _mesa_function_pool[28267]: EvalPoint2 (offset 239) */
    "ii\0"
    "glEvalPoint2\0"
    "\0"
-   /* _mesa_function_pool[27905]: Uniform1uivEXT (will be remapped) */
+   /* _mesa_function_pool[28284]: Uniform1uivEXT (will be remapped) */
    "iip\0"
    "glUniform1uivEXT\0"
    "glUniform1uiv\0"
    "\0"
-   /* _mesa_function_pool[27941]: EvalPoint1 (offset 237) */
+   /* _mesa_function_pool[28320]: EvalPoint1 (offset 237) */
    "i\0"
    "glEvalPoint1\0"
    "\0"
-   /* _mesa_function_pool[27957]: Binormal3dvEXT (dynamic) */
+   /* _mesa_function_pool[28336]: Binormal3dvEXT (dynamic) */
    "p\0"
    "glBinormal3dvEXT\0"
    "\0"
-   /* _mesa_function_pool[27977]: PopMatrix (offset 297) */
+   /* _mesa_function_pool[28356]: PopMatrix (offset 297) */
    "\0"
    "glPopMatrix\0"
    "\0"
-   /* _mesa_function_pool[27991]: GetVertexAttribIuivEXT (will be remapped) */
-   "iip\0"
-   "glGetVertexAttribIuivEXT\0"
-   "glGetVertexAttribIuiv\0"
-   "\0"
-   /* _mesa_function_pool[28043]: FinishFenceNV (will be remapped) */
+   /* _mesa_function_pool[28370]: FinishFenceNV (will be remapped) */
    "i\0"
    "glFinishFenceNV\0"
    "\0"
-   /* _mesa_function_pool[28062]: GetFogFuncSGIS (dynamic) */
+   /* _mesa_function_pool[28389]: GetFogFuncSGIS (dynamic) */
    "p\0"
    "glGetFogFuncSGIS\0"
    "\0"
-   /* _mesa_function_pool[28082]: GetUniformLocationARB (will be remapped) */
+   /* _mesa_function_pool[28409]: GetUniformLocationARB (will be remapped) */
    "ip\0"
    "glGetUniformLocation\0"
    "glGetUniformLocationARB\0"
    "\0"
-   /* _mesa_function_pool[28131]: SecondaryColor3fEXT (will be remapped) */
+   /* _mesa_function_pool[28458]: SecondaryColor3fEXT (will be remapped) */
    "fff\0"
    "glSecondaryColor3f\0"
    "glSecondaryColor3fEXT\0"
    "\0"
-   /* _mesa_function_pool[28177]: GetTexGeniv (offset 280) */
+   /* _mesa_function_pool[28504]: GetTexGeniv (offset 280) */
    "iip\0"
    "glGetTexGeniv\0"
    "\0"
-   /* _mesa_function_pool[28196]: CombinerInputNV (will be remapped) */
+   /* _mesa_function_pool[28523]: CombinerInputNV (will be remapped) */
    "iiiiii\0"
    "glCombinerInputNV\0"
    "\0"
-   /* _mesa_function_pool[28222]: VertexAttrib3sARB (will be remapped) */
+   /* _mesa_function_pool[28549]: VertexAttrib3sARB (will be remapped) */
    "iiii\0"
    "glVertexAttrib3s\0"
    "glVertexAttrib3sARB\0"
    "\0"
-   /* _mesa_function_pool[28265]: IsTransformFeedback (will be remapped) */
+   /* _mesa_function_pool[28592]: IsTransformFeedback (will be remapped) */
    "i\0"
    "glIsTransformFeedback\0"
    "\0"
-   /* _mesa_function_pool[28290]: ReplacementCodeuiNormal3fVertex3fvSUN (dynamic) */
+   /* _mesa_function_pool[28617]: ReplacementCodeuiNormal3fVertex3fvSUN (dynamic) */
    "ppp\0"
    "glReplacementCodeuiNormal3fVertex3fvSUN\0"
    "\0"
-   /* _mesa_function_pool[28335]: Map2d (offset 222) */
+   /* _mesa_function_pool[28662]: Map2d (offset 222) */
    "iddiiddiip\0"
    "glMap2d\0"
    "\0"
-   /* _mesa_function_pool[28355]: Map2f (offset 223) */
+   /* _mesa_function_pool[28682]: Map2f (offset 223) */
    "iffiiffiip\0"
    "glMap2f\0"
    "\0"
-   /* _mesa_function_pool[28375]: ProgramStringARB (will be remapped) */
+   /* _mesa_function_pool[28702]: ProgramStringARB (will be remapped) */
    "iiip\0"
    "glProgramStringARB\0"
    "\0"
-   /* _mesa_function_pool[28400]: Vertex4s (offset 148) */
+   /* _mesa_function_pool[28727]: Vertex4s (offset 148) */
    "iiii\0"
    "glVertex4s\0"
    "\0"
-   /* _mesa_function_pool[28417]: TexCoord4fVertex4fvSUN (dynamic) */
+   /* _mesa_function_pool[28744]: TexCoord4fVertex4fvSUN (dynamic) */
    "pp\0"
    "glTexCoord4fVertex4fvSUN\0"
    "\0"
-   /* _mesa_function_pool[28446]: FragmentLightModelivSGIX (dynamic) */
+   /* _mesa_function_pool[28773]: FragmentLightModelivSGIX (dynamic) */
    "ip\0"
    "glFragmentLightModelivSGIX\0"
    "\0"
-   /* _mesa_function_pool[28477]: VertexAttrib1fNV (will be remapped) */
+   /* _mesa_function_pool[28804]: VertexAttrib1fNV (will be remapped) */
    "if\0"
    "glVertexAttrib1fNV\0"
    "\0"
-   /* _mesa_function_pool[28500]: Vertex4f (offset 144) */
+   /* _mesa_function_pool[28827]: Vertex4f (offset 144) */
    "ffff\0"
    "glVertex4f\0"
    "\0"
-   /* _mesa_function_pool[28517]: EvalCoord1d (offset 228) */
+   /* _mesa_function_pool[28844]: EvalCoord1d (offset 228) */
    "d\0"
    "glEvalCoord1d\0"
    "\0"
-   /* _mesa_function_pool[28534]: Vertex4d (offset 142) */
+   /* _mesa_function_pool[28861]: Vertex4d (offset 142) */
    "dddd\0"
    "glVertex4d\0"
    "\0"
-   /* _mesa_function_pool[28551]: RasterPos4dv (offset 79) */
+   /* _mesa_function_pool[28878]: RasterPos4dv (offset 79) */
    "p\0"
    "glRasterPos4dv\0"
    "\0"
-   /* _mesa_function_pool[28569]: UseShaderProgramEXT (will be remapped) */
+   /* _mesa_function_pool[28896]: UseShaderProgramEXT (will be remapped) */
    "ii\0"
    "glUseShaderProgramEXT\0"
    "\0"
-   /* _mesa_function_pool[28595]: FragmentLightfSGIX (dynamic) */
+   /* _mesa_function_pool[28922]: FragmentLightfSGIX (dynamic) */
    "iif\0"
    "glFragmentLightfSGIX\0"
    "\0"
-   /* _mesa_function_pool[28621]: GetCompressedTexImageARB (will be remapped) */
+   /* _mesa_function_pool[28948]: GetCompressedTexImageARB (will be remapped) */
    "iip\0"
    "glGetCompressedTexImage\0"
    "glGetCompressedTexImageARB\0"
    "\0"
-   /* _mesa_function_pool[28677]: GetTexGenfv (offset 279) */
+   /* _mesa_function_pool[29004]: GetTexGenfv (offset 279) */
    "iip\0"
    "glGetTexGenfv\0"
    "\0"
-   /* _mesa_function_pool[28696]: Vertex4i (offset 146) */
+   /* _mesa_function_pool[29023]: Vertex4i (offset 146) */
    "iiii\0"
    "glVertex4i\0"
    "\0"
-   /* _mesa_function_pool[28713]: VertexWeightPointerEXT (dynamic) */
+   /* _mesa_function_pool[29040]: VertexWeightPointerEXT (dynamic) */
    "iiip\0"
    "glVertexWeightPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[28744]: GetHistogram (offset 361) */
+   /* _mesa_function_pool[29071]: GetHistogram (offset 361) */
    "iiiip\0"
    "glGetHistogram\0"
    "glGetHistogramEXT\0"
    "\0"
-   /* _mesa_function_pool[28784]: ActiveStencilFaceEXT (will be remapped) */
+   /* _mesa_function_pool[29111]: ActiveStencilFaceEXT (will be remapped) */
    "i\0"
    "glActiveStencilFaceEXT\0"
    "\0"
-   /* _mesa_function_pool[28810]: StencilFuncSeparateATI (will be remapped) */
+   /* _mesa_function_pool[29137]: StencilFuncSeparateATI (will be remapped) */
    "iiii\0"
    "glStencilFuncSeparateATI\0"
    "\0"
-   /* _mesa_function_pool[28841]: Materialf (offset 169) */
+   /* _mesa_function_pool[29168]: Materialf (offset 169) */
    "iif\0"
    "glMaterialf\0"
    "\0"
-   /* _mesa_function_pool[28858]: GetShaderSourceARB (will be remapped) */
+   /* _mesa_function_pool[29185]: GetShaderSourceARB (will be remapped) */
    "iipp\0"
    "glGetShaderSource\0"
    "glGetShaderSourceARB\0"
    "\0"
-   /* _mesa_function_pool[28903]: IglooInterfaceSGIX (dynamic) */
+   /* _mesa_function_pool[29230]: IglooInterfaceSGIX (dynamic) */
    "ip\0"
    "glIglooInterfaceSGIX\0"
    "\0"
-   /* _mesa_function_pool[28928]: Materiali (offset 171) */
+   /* _mesa_function_pool[29255]: Materiali (offset 171) */
    "iii\0"
    "glMateriali\0"
    "\0"
-   /* _mesa_function_pool[28945]: VertexAttrib4dNV (will be remapped) */
+   /* _mesa_function_pool[29272]: VertexAttrib4dNV (will be remapped) */
    "idddd\0"
    "glVertexAttrib4dNV\0"
    "\0"
-   /* _mesa_function_pool[28971]: MultiModeDrawElementsIBM (will be remapped) */
+   /* _mesa_function_pool[29298]: MultiModeDrawElementsIBM (will be remapped) */
    "ppipii\0"
    "glMultiModeDrawElementsIBM\0"
    "\0"
-   /* _mesa_function_pool[29006]: Indexsv (offset 51) */
+   /* _mesa_function_pool[29333]: Indexsv (offset 51) */
    "p\0"
    "glIndexsv\0"
    "\0"
-   /* _mesa_function_pool[29019]: MultiTexCoord4svARB (offset 407) */
+   /* _mesa_function_pool[29346]: MultiTexCoord4svARB (offset 407) */
    "ip\0"
    "glMultiTexCoord4sv\0"
    "glMultiTexCoord4svARB\0"
    "\0"
-   /* _mesa_function_pool[29064]: LightModelfv (offset 164) */
+   /* _mesa_function_pool[29391]: LightModelfv (offset 164) */
    "ip\0"
    "glLightModelfv\0"
    "\0"
-   /* _mesa_function_pool[29083]: TexCoord2dv (offset 103) */
+   /* _mesa_function_pool[29410]: TexCoord2dv (offset 103) */
    "p\0"
    "glTexCoord2dv\0"
    "\0"
-   /* _mesa_function_pool[29100]: GenQueriesARB (will be remapped) */
+   /* _mesa_function_pool[29427]: GenQueriesARB (will be remapped) */
    "ip\0"
    "glGenQueries\0"
    "glGenQueriesARB\0"
    "\0"
-   /* _mesa_function_pool[29133]: EvalCoord1dv (offset 229) */
+   /* _mesa_function_pool[29460]: EvalCoord1dv (offset 229) */
    "p\0"
    "glEvalCoord1dv\0"
    "\0"
-   /* _mesa_function_pool[29151]: ReplacementCodeuiVertex3fSUN (dynamic) */
+   /* _mesa_function_pool[29478]: ReplacementCodeuiVertex3fSUN (dynamic) */
    "ifff\0"
    "glReplacementCodeuiVertex3fSUN\0"
    "\0"
-   /* _mesa_function_pool[29188]: Translated (offset 303) */
+   /* _mesa_function_pool[29515]: Translated (offset 303) */
    "ddd\0"
    "glTranslated\0"
    "\0"
-   /* _mesa_function_pool[29206]: Translatef (offset 304) */
+   /* _mesa_function_pool[29533]: Translatef (offset 304) */
    "fff\0"
    "glTranslatef\0"
    "\0"
-   /* _mesa_function_pool[29224]: Uniform3uiEXT (will be remapped) */
+   /* _mesa_function_pool[29551]: Uniform3uiEXT (will be remapped) */
    "iiii\0"
    "glUniform3uiEXT\0"
    "glUniform3ui\0"
    "\0"
-   /* _mesa_function_pool[29259]: StencilMask (offset 209) */
+   /* _mesa_function_pool[29586]: StencilMask (offset 209) */
    "i\0"
    "glStencilMask\0"
    "\0"
-   /* _mesa_function_pool[29276]: Tangent3iEXT (dynamic) */
+   /* _mesa_function_pool[29603]: Tangent3iEXT (dynamic) */
    "iii\0"
    "glTangent3iEXT\0"
    "\0"
-   /* _mesa_function_pool[29296]: GetLightiv (offset 265) */
+   /* _mesa_function_pool[29623]: ClampColorARB (will be remapped) */
+   "ii\0"
+   "glClampColorARB\0"
+   "\0"
+   /* _mesa_function_pool[29643]: GetLightiv (offset 265) */
    "iip\0"
    "glGetLightiv\0"
    "\0"
-   /* _mesa_function_pool[29314]: DrawMeshArraysSUN (dynamic) */
+   /* _mesa_function_pool[29661]: GetSamplerParameterIiv (will be remapped) */
+   "iip\0"
+   "glGetSamplerParameterIiv\0"
+   "\0"
+   /* _mesa_function_pool[29691]: DrawMeshArraysSUN (dynamic) */
    "iiii\0"
    "glDrawMeshArraysSUN\0"
    "\0"
-   /* _mesa_function_pool[29340]: IsList (offset 287) */
+   /* _mesa_function_pool[29717]: IsList (offset 287) */
    "i\0"
    "glIsList\0"
    "\0"
-   /* _mesa_function_pool[29352]: IsSync (will be remapped) */
+   /* _mesa_function_pool[29729]: IsSync (will be remapped) */
    "i\0"
    "glIsSync\0"
    "\0"
-   /* _mesa_function_pool[29364]: RenderMode (offset 196) */
+   /* _mesa_function_pool[29741]: RenderMode (offset 196) */
    "i\0"
    "glRenderMode\0"
    "\0"
-   /* _mesa_function_pool[29380]: GetMapControlPointsNV (dynamic) */
+   /* _mesa_function_pool[29757]: GetMapControlPointsNV (dynamic) */
    "iiiiiip\0"
    "glGetMapControlPointsNV\0"
    "\0"
-   /* _mesa_function_pool[29413]: DrawBuffersARB (will be remapped) */
+   /* _mesa_function_pool[29790]: DrawBuffersARB (will be remapped) */
    "ip\0"
    "glDrawBuffers\0"
    "glDrawBuffersARB\0"
    "glDrawBuffersATI\0"
    "\0"
-   /* _mesa_function_pool[29465]: ClearBufferiv (will be remapped) */
+   /* _mesa_function_pool[29842]: ClearBufferiv (will be remapped) */
    "iip\0"
    "glClearBufferiv\0"
    "\0"
-   /* _mesa_function_pool[29486]: ProgramLocalParameter4fARB (will be remapped) */
+   /* _mesa_function_pool[29863]: ProgramLocalParameter4fARB (will be remapped) */
    "iiffff\0"
    "glProgramLocalParameter4fARB\0"
    "\0"
-   /* _mesa_function_pool[29523]: SpriteParameterivSGIX (dynamic) */
+   /* _mesa_function_pool[29900]: SpriteParameterivSGIX (dynamic) */
    "ip\0"
    "glSpriteParameterivSGIX\0"
    "\0"
-   /* _mesa_function_pool[29551]: ProvokingVertexEXT (will be remapped) */
+   /* _mesa_function_pool[29928]: ProvokingVertexEXT (will be remapped) */
    "i\0"
    "glProvokingVertexEXT\0"
    "glProvokingVertex\0"
    "\0"
-   /* _mesa_function_pool[29593]: MultiTexCoord1fARB (offset 378) */
+   /* _mesa_function_pool[29970]: MultiTexCoord1fARB (offset 378) */
    "if\0"
    "glMultiTexCoord1f\0"
    "glMultiTexCoord1fARB\0"
    "\0"
-   /* _mesa_function_pool[29636]: LoadName (offset 198) */
+   /* _mesa_function_pool[30013]: LoadName (offset 198) */
    "i\0"
    "glLoadName\0"
    "\0"
-   /* _mesa_function_pool[29650]: VertexAttribs4ubvNV (will be remapped) */
+   /* _mesa_function_pool[30027]: VertexAttribs4ubvNV (will be remapped) */
    "iip\0"
    "glVertexAttribs4ubvNV\0"
    "\0"
-   /* _mesa_function_pool[29677]: WeightsvARB (dynamic) */
+   /* _mesa_function_pool[30054]: WeightsvARB (dynamic) */
    "ip\0"
    "glWeightsvARB\0"
    "\0"
-   /* _mesa_function_pool[29695]: Uniform1fvARB (will be remapped) */
+   /* _mesa_function_pool[30072]: Uniform1fvARB (will be remapped) */
    "iip\0"
    "glUniform1fv\0"
    "glUniform1fvARB\0"
    "\0"
-   /* _mesa_function_pool[29729]: CopyTexSubImage1D (offset 325) */
+   /* _mesa_function_pool[30106]: CopyTexSubImage1D (offset 325) */
    "iiiiii\0"
    "glCopyTexSubImage1D\0"
    "glCopyTexSubImage1DEXT\0"
    "\0"
-   /* _mesa_function_pool[29780]: CullFace (offset 152) */
+   /* _mesa_function_pool[30157]: CullFace (offset 152) */
    "i\0"
    "glCullFace\0"
    "\0"
-   /* _mesa_function_pool[29794]: BindTexture (offset 307) */
+   /* _mesa_function_pool[30171]: BindTexture (offset 307) */
    "ii\0"
    "glBindTexture\0"
    "glBindTextureEXT\0"
    "\0"
-   /* _mesa_function_pool[29829]: BeginFragmentShaderATI (will be remapped) */
+   /* _mesa_function_pool[30206]: BeginFragmentShaderATI (will be remapped) */
    "\0"
    "glBeginFragmentShaderATI\0"
    "\0"
-   /* _mesa_function_pool[29856]: MultiTexCoord4fARB (offset 402) */
+   /* _mesa_function_pool[30233]: MultiTexCoord4fARB (offset 402) */
    "iffff\0"
    "glMultiTexCoord4f\0"
    "glMultiTexCoord4fARB\0"
    "\0"
-   /* _mesa_function_pool[29902]: VertexAttribs3svNV (will be remapped) */
+   /* _mesa_function_pool[30279]: VertexAttribs3svNV (will be remapped) */
    "iip\0"
    "glVertexAttribs3svNV\0"
    "\0"
-   /* _mesa_function_pool[29928]: StencilFunc (offset 243) */
+   /* _mesa_function_pool[30305]: StencilFunc (offset 243) */
    "iii\0"
    "glStencilFunc\0"
    "\0"
-   /* _mesa_function_pool[29947]: CopyPixels (offset 255) */
+   /* _mesa_function_pool[30324]: CopyPixels (offset 255) */
    "iiiii\0"
    "glCopyPixels\0"
    "\0"
-   /* _mesa_function_pool[29967]: Rectsv (offset 93) */
+   /* _mesa_function_pool[30344]: Rectsv (offset 93) */
    "pp\0"
    "glRectsv\0"
    "\0"
-   /* _mesa_function_pool[29980]: ReplacementCodeuivSUN (dynamic) */
+   /* _mesa_function_pool[30357]: ReplacementCodeuivSUN (dynamic) */
    "p\0"
    "glReplacementCodeuivSUN\0"
    "\0"
-   /* _mesa_function_pool[30007]: EnableVertexAttribArrayARB (will be remapped) */
+   /* _mesa_function_pool[30384]: EnableVertexAttribArrayARB (will be remapped) */
    "i\0"
    "glEnableVertexAttribArray\0"
    "glEnableVertexAttribArrayARB\0"
    "\0"
-   /* _mesa_function_pool[30065]: NormalPointervINTEL (dynamic) */
+   /* _mesa_function_pool[30442]: NormalPointervINTEL (dynamic) */
    "ip\0"
    "glNormalPointervINTEL\0"
    "\0"
-   /* _mesa_function_pool[30091]: CopyConvolutionFilter2D (offset 355) */
+   /* _mesa_function_pool[30468]: CopyConvolutionFilter2D (offset 355) */
    "iiiiii\0"
    "glCopyConvolutionFilter2D\0"
    "glCopyConvolutionFilter2DEXT\0"
    "\0"
-   /* _mesa_function_pool[30154]: WindowPos3ivMESA (will be remapped) */
+   /* _mesa_function_pool[30531]: WindowPos3ivMESA (will be remapped) */
    "p\0"
    "glWindowPos3iv\0"
    "glWindowPos3ivARB\0"
    "glWindowPos3ivMESA\0"
    "\0"
-   /* _mesa_function_pool[30209]: CopyBufferSubData (will be remapped) */
+   /* _mesa_function_pool[30586]: CopyBufferSubData (will be remapped) */
    "iiiii\0"
    "glCopyBufferSubData\0"
    "\0"
-   /* _mesa_function_pool[30236]: NormalPointer (offset 318) */
+   /* _mesa_function_pool[30613]: NormalPointer (offset 318) */
    "iip\0"
    "glNormalPointer\0"
    "\0"
-   /* _mesa_function_pool[30257]: TexParameterfv (offset 179) */
+   /* _mesa_function_pool[30634]: TexParameterfv (offset 179) */
    "iip\0"
    "glTexParameterfv\0"
    "\0"
-   /* _mesa_function_pool[30279]: IsBufferARB (will be remapped) */
+   /* _mesa_function_pool[30656]: IsBufferARB (will be remapped) */
    "i\0"
    "glIsBuffer\0"
    "glIsBufferARB\0"
    "\0"
-   /* _mesa_function_pool[30307]: WindowPos4iMESA (will be remapped) */
+   /* _mesa_function_pool[30684]: WindowPos4iMESA (will be remapped) */
    "iiii\0"
    "glWindowPos4iMESA\0"
    "\0"
-   /* _mesa_function_pool[30331]: VertexAttrib4uivARB (will be remapped) */
+   /* _mesa_function_pool[30708]: VertexAttrib4uivARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4uiv\0"
    "glVertexAttrib4uivARB\0"
    "\0"
-   /* _mesa_function_pool[30376]: Tangent3bvEXT (dynamic) */
+   /* _mesa_function_pool[30753]: Tangent3bvEXT (dynamic) */
    "p\0"
    "glTangent3bvEXT\0"
    "\0"
-   /* _mesa_function_pool[30395]: VertexAttribI3uivEXT (will be remapped) */
+   /* _mesa_function_pool[30772]: VertexAttribI3uivEXT (will be remapped) */
    "ip\0"
    "glVertexAttribI3uivEXT\0"
    "glVertexAttribI3uiv\0"
    "\0"
-   /* _mesa_function_pool[30442]: UniformMatrix3x4fv (will be remapped) */
+   /* _mesa_function_pool[30819]: UniformMatrix3x4fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix3x4fv\0"
    "\0"
-   /* _mesa_function_pool[30469]: ClipPlane (offset 150) */
+   /* _mesa_function_pool[30846]: ClipPlane (offset 150) */
    "ip\0"
    "glClipPlane\0"
    "\0"
-   /* _mesa_function_pool[30485]: Recti (offset 90) */
+   /* _mesa_function_pool[30862]: Recti (offset 90) */
    "iiii\0"
    "glRecti\0"
    "\0"
-   /* _mesa_function_pool[30499]: VertexAttribI3ivEXT (will be remapped) */
-   "ip\0"
-   "glVertexAttribI3ivEXT\0"
-   "glVertexAttribI3iv\0"
+   /* _mesa_function_pool[30876]: TrackMatrixNV (will be remapped) */
+   "iiii\0"
+   "glTrackMatrixNV\0"
    "\0"
-   /* _mesa_function_pool[30544]: DrawRangeElementsBaseVertex (will be remapped) */
+   /* _mesa_function_pool[30898]: DrawRangeElementsBaseVertex (will be remapped) */
    "iiiiipi\0"
    "glDrawRangeElementsBaseVertex\0"
    "\0"
-   /* _mesa_function_pool[30583]: TexCoordPointervINTEL (dynamic) */
+   /* _mesa_function_pool[30937]: SamplerParameterIuiv (will be remapped) */
+   "iip\0"
+   "glSamplerParameterIuiv\0"
+   "\0"
+   /* _mesa_function_pool[30965]: TexCoordPointervINTEL (dynamic) */
    "iip\0"
    "glTexCoordPointervINTEL\0"
    "\0"
-   /* _mesa_function_pool[30612]: DeleteBuffersARB (will be remapped) */
+   /* _mesa_function_pool[30994]: DeleteBuffersARB (will be remapped) */
    "ip\0"
    "glDeleteBuffers\0"
    "glDeleteBuffersARB\0"
    "\0"
-   /* _mesa_function_pool[30651]: PixelTransformParameterfvEXT (dynamic) */
+   /* _mesa_function_pool[31033]: PixelTransformParameterfvEXT (dynamic) */
    "iip\0"
    "glPixelTransformParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[30687]: PrimitiveRestartNV (will be remapped) */
+   /* _mesa_function_pool[31069]: PrimitiveRestartNV (will be remapped) */
    "\0"
    "glPrimitiveRestartNV\0"
    "\0"
-   /* _mesa_function_pool[30710]: WindowPos4fvMESA (will be remapped) */
+   /* _mesa_function_pool[31092]: WindowPos4fvMESA (will be remapped) */
    "p\0"
    "glWindowPos4fvMESA\0"
    "\0"
-   /* _mesa_function_pool[30732]: GetPixelMapuiv (offset 272) */
+   /* _mesa_function_pool[31114]: GetPixelMapuiv (offset 272) */
    "ip\0"
    "glGetPixelMapuiv\0"
    "\0"
-   /* _mesa_function_pool[30753]: Rectf (offset 88) */
+   /* _mesa_function_pool[31135]: Rectf (offset 88) */
    "ffff\0"
    "glRectf\0"
    "\0"
-   /* _mesa_function_pool[30767]: VertexAttrib1sNV (will be remapped) */
+   /* _mesa_function_pool[31149]: VertexAttrib1sNV (will be remapped) */
    "ii\0"
    "glVertexAttrib1sNV\0"
    "\0"
-   /* _mesa_function_pool[30790]: Indexfv (offset 47) */
+   /* _mesa_function_pool[31172]: Indexfv (offset 47) */
    "p\0"
    "glIndexfv\0"
    "\0"
-   /* _mesa_function_pool[30803]: SecondaryColor3svEXT (will be remapped) */
+   /* _mesa_function_pool[31185]: SecondaryColor3svEXT (will be remapped) */
    "p\0"
    "glSecondaryColor3sv\0"
    "glSecondaryColor3svEXT\0"
    "\0"
-   /* _mesa_function_pool[30849]: LoadTransposeMatrixfARB (will be remapped) */
+   /* _mesa_function_pool[31231]: LoadTransposeMatrixfARB (will be remapped) */
    "p\0"
    "glLoadTransposeMatrixf\0"
    "glLoadTransposeMatrixfARB\0"
    "\0"
-   /* _mesa_function_pool[30901]: GetPointerv (offset 329) */
+   /* _mesa_function_pool[31283]: GetPointerv (offset 329) */
    "ip\0"
    "glGetPointerv\0"
    "glGetPointervEXT\0"
    "\0"
-   /* _mesa_function_pool[30936]: Tangent3bEXT (dynamic) */
+   /* _mesa_function_pool[31318]: Tangent3bEXT (dynamic) */
    "iii\0"
    "glTangent3bEXT\0"
    "\0"
-   /* _mesa_function_pool[30956]: CombinerParameterfNV (will be remapped) */
+   /* _mesa_function_pool[31338]: CombinerParameterfNV (will be remapped) */
    "if\0"
    "glCombinerParameterfNV\0"
    "\0"
-   /* _mesa_function_pool[30983]: IndexMask (offset 212) */
+   /* _mesa_function_pool[31365]: IndexMask (offset 212) */
    "i\0"
    "glIndexMask\0"
    "\0"
-   /* _mesa_function_pool[30998]: BindProgramNV (will be remapped) */
+   /* _mesa_function_pool[31380]: BindProgramNV (will be remapped) */
    "ii\0"
    "glBindProgramARB\0"
    "glBindProgramNV\0"
    "\0"
-   /* _mesa_function_pool[31035]: VertexAttrib4svARB (will be remapped) */
+   /* _mesa_function_pool[31417]: VertexAttrib4svARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4sv\0"
    "glVertexAttrib4svARB\0"
    "\0"
-   /* _mesa_function_pool[31078]: GetFloatv (offset 262) */
+   /* _mesa_function_pool[31460]: GetFloatv (offset 262) */
    "ip\0"
    "glGetFloatv\0"
    "\0"
-   /* _mesa_function_pool[31094]: CreateDebugObjectMESA (dynamic) */
+   /* _mesa_function_pool[31476]: CreateDebugObjectMESA (dynamic) */
    "\0"
    "glCreateDebugObjectMESA\0"
    "\0"
-   /* _mesa_function_pool[31120]: GetShaderiv (will be remapped) */
+   /* _mesa_function_pool[31502]: GetShaderiv (will be remapped) */
    "iip\0"
    "glGetShaderiv\0"
    "\0"
-   /* _mesa_function_pool[31139]: ClientWaitSync (will be remapped) */
+   /* _mesa_function_pool[31521]: ClientWaitSync (will be remapped) */
    "iii\0"
    "glClientWaitSync\0"
    "\0"
-   /* _mesa_function_pool[31161]: TexCoord4s (offset 124) */
+   /* _mesa_function_pool[31543]: TexCoord4s (offset 124) */
    "iiii\0"
    "glTexCoord4s\0"
    "\0"
-   /* _mesa_function_pool[31180]: TexCoord3sv (offset 117) */
+   /* _mesa_function_pool[31562]: TexCoord3sv (offset 117) */
    "p\0"
    "glTexCoord3sv\0"
    "\0"
-   /* _mesa_function_pool[31197]: BindFragmentShaderATI (will be remapped) */
+   /* _mesa_function_pool[31579]: BindFragmentShaderATI (will be remapped) */
    "i\0"
    "glBindFragmentShaderATI\0"
    "\0"
-   /* _mesa_function_pool[31224]: PopAttrib (offset 218) */
+   /* _mesa_function_pool[31606]: PopAttrib (offset 218) */
    "\0"
    "glPopAttrib\0"
    "\0"
-   /* _mesa_function_pool[31238]: Fogfv (offset 154) */
+   /* _mesa_function_pool[31620]: Fogfv (offset 154) */
    "ip\0"
    "glFogfv\0"
    "\0"
-   /* _mesa_function_pool[31250]: UnmapBufferARB (will be remapped) */
+   /* _mesa_function_pool[31632]: UnmapBufferARB (will be remapped) */
    "i\0"
    "glUnmapBuffer\0"
    "glUnmapBufferARB\0"
    "\0"
-   /* _mesa_function_pool[31284]: InitNames (offset 197) */
+   /* _mesa_function_pool[31666]: InitNames (offset 197) */
    "\0"
    "glInitNames\0"
    "\0"
-   /* _mesa_function_pool[31298]: Normal3sv (offset 61) */
+   /* _mesa_function_pool[31680]: Normal3sv (offset 61) */
    "p\0"
    "glNormal3sv\0"
    "\0"
-   /* _mesa_function_pool[31313]: Minmax (offset 368) */
+   /* _mesa_function_pool[31695]: Minmax (offset 368) */
    "iii\0"
    "glMinmax\0"
    "glMinmaxEXT\0"
    "\0"
-   /* _mesa_function_pool[31339]: TexCoord4d (offset 118) */
+   /* _mesa_function_pool[31721]: TexCoord4d (offset 118) */
    "dddd\0"
    "glTexCoord4d\0"
    "\0"
-   /* _mesa_function_pool[31358]: TexCoord4f (offset 120) */
+   /* _mesa_function_pool[31740]: DeformationMap3dSGIX (dynamic) */
+   "iddiiddiiddiip\0"
+   "glDeformationMap3dSGIX\0"
+   "\0"
+   /* _mesa_function_pool[31779]: TexCoord4f (offset 120) */
    "ffff\0"
    "glTexCoord4f\0"
    "\0"
-   /* _mesa_function_pool[31377]: FogCoorddvEXT (will be remapped) */
+   /* _mesa_function_pool[31798]: FogCoorddvEXT (will be remapped) */
    "p\0"
    "glFogCoorddv\0"
    "glFogCoorddvEXT\0"
    "\0"
-   /* _mesa_function_pool[31409]: FinishTextureSUNX (dynamic) */
+   /* _mesa_function_pool[31830]: FinishTextureSUNX (dynamic) */
    "\0"
    "glFinishTextureSUNX\0"
    "\0"
-   /* _mesa_function_pool[31431]: GetFragmentLightfvSGIX (dynamic) */
+   /* _mesa_function_pool[31852]: GetFragmentLightfvSGIX (dynamic) */
    "iip\0"
    "glGetFragmentLightfvSGIX\0"
    "\0"
-   /* _mesa_function_pool[31461]: Binormal3fvEXT (dynamic) */
+   /* _mesa_function_pool[31882]: Binormal3fvEXT (dynamic) */
    "p\0"
    "glBinormal3fvEXT\0"
    "\0"
-   /* _mesa_function_pool[31481]: GetBooleanv (offset 258) */
+   /* _mesa_function_pool[31902]: GetBooleanv (offset 258) */
    "ip\0"
    "glGetBooleanv\0"
    "\0"
-   /* _mesa_function_pool[31499]: ColorFragmentOp3ATI (will be remapped) */
+   /* _mesa_function_pool[31920]: ColorFragmentOp3ATI (will be remapped) */
    "iiiiiiiiiiiii\0"
    "glColorFragmentOp3ATI\0"
    "\0"
-   /* _mesa_function_pool[31536]: Hint (offset 158) */
+   /* _mesa_function_pool[31957]: Hint (offset 158) */
    "ii\0"
    "glHint\0"
    "\0"
-   /* _mesa_function_pool[31547]: Color4dv (offset 28) */
+   /* _mesa_function_pool[31968]: Color4dv (offset 28) */
    "p\0"
    "glColor4dv\0"
    "\0"
-   /* _mesa_function_pool[31561]: VertexAttrib2svARB (will be remapped) */
+   /* _mesa_function_pool[31982]: VertexAttrib2svARB (will be remapped) */
    "ip\0"
    "glVertexAttrib2sv\0"
    "glVertexAttrib2svARB\0"
    "\0"
-   /* _mesa_function_pool[31604]: AreProgramsResidentNV (will be remapped) */
+   /* _mesa_function_pool[32025]: AreProgramsResidentNV (will be remapped) */
    "ipp\0"
    "glAreProgramsResidentNV\0"
    "\0"
-   /* _mesa_function_pool[31633]: WindowPos3svMESA (will be remapped) */
+   /* _mesa_function_pool[32054]: WindowPos3svMESA (will be remapped) */
    "p\0"
    "glWindowPos3sv\0"
    "glWindowPos3svARB\0"
    "glWindowPos3svMESA\0"
    "\0"
-   /* _mesa_function_pool[31688]: CopyColorSubTable (offset 347) */
+   /* _mesa_function_pool[32109]: CopyColorSubTable (offset 347) */
    "iiiii\0"
    "glCopyColorSubTable\0"
    "glCopyColorSubTableEXT\0"
    "\0"
-   /* _mesa_function_pool[31738]: WeightdvARB (dynamic) */
+   /* _mesa_function_pool[32159]: WeightdvARB (dynamic) */
    "ip\0"
    "glWeightdvARB\0"
    "\0"
-   /* _mesa_function_pool[31756]: DeleteRenderbuffersEXT (will be remapped) */
+   /* _mesa_function_pool[32177]: DeleteRenderbuffersEXT (will be remapped) */
    "ip\0"
    "glDeleteRenderbuffers\0"
    "glDeleteRenderbuffersEXT\0"
    "\0"
-   /* _mesa_function_pool[31807]: VertexAttrib4NubvARB (will be remapped) */
+   /* _mesa_function_pool[32228]: VertexAttrib4NubvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib4Nubv\0"
    "glVertexAttrib4NubvARB\0"
    "\0"
-   /* _mesa_function_pool[31854]: VertexAttrib3dvNV (will be remapped) */
+   /* _mesa_function_pool[32275]: VertexAttrib3dvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib3dvNV\0"
    "\0"
-   /* _mesa_function_pool[31878]: GetObjectParameterfvARB (will be remapped) */
+   /* _mesa_function_pool[32299]: GetObjectParameterfvARB (will be remapped) */
    "iip\0"
    "glGetObjectParameterfvARB\0"
    "\0"
-   /* _mesa_function_pool[31909]: Vertex4iv (offset 147) */
+   /* _mesa_function_pool[32330]: Vertex4iv (offset 147) */
    "p\0"
    "glVertex4iv\0"
    "\0"
-   /* _mesa_function_pool[31924]: GetProgramEnvParameterdvARB (will be remapped) */
+   /* _mesa_function_pool[32345]: GetProgramEnvParameterdvARB (will be remapped) */
    "iip\0"
    "glGetProgramEnvParameterdvARB\0"
    "\0"
-   /* _mesa_function_pool[31959]: TexCoord4dv (offset 119) */
+   /* _mesa_function_pool[32380]: TexCoord4dv (offset 119) */
    "p\0"
    "glTexCoord4dv\0"
    "\0"
-   /* _mesa_function_pool[31976]: LockArraysEXT (will be remapped) */
+   /* _mesa_function_pool[32397]: LockArraysEXT (will be remapped) */
    "ii\0"
    "glLockArraysEXT\0"
    "\0"
-   /* _mesa_function_pool[31996]: Begin (offset 7) */
+   /* _mesa_function_pool[32417]: Begin (offset 7) */
    "i\0"
    "glBegin\0"
    "\0"
-   /* _mesa_function_pool[32007]: LightModeli (offset 165) */
+   /* _mesa_function_pool[32428]: LightModeli (offset 165) */
    "ii\0"
    "glLightModeli\0"
    "\0"
-   /* _mesa_function_pool[32025]: VertexAttribI4ivEXT (will be remapped) */
+   /* _mesa_function_pool[32446]: VertexAttribI4ivEXT (will be remapped) */
    "ip\0"
    "glVertexAttribI4ivEXT\0"
    "glVertexAttribI4iv\0"
    "\0"
-   /* _mesa_function_pool[32070]: Rectfv (offset 89) */
+   /* _mesa_function_pool[32491]: Rectfv (offset 89) */
    "pp\0"
    "glRectfv\0"
    "\0"
-   /* _mesa_function_pool[32083]: BlendEquationSeparateiARB (will be remapped) */
-   "iii\0"
-   "glBlendEquationSeparateiARB\0"
-   "\0"
-   /* _mesa_function_pool[32116]: LightModelf (offset 163) */
+   /* _mesa_function_pool[32504]: LightModelf (offset 163) */
    "if\0"
    "glLightModelf\0"
    "\0"
-   /* _mesa_function_pool[32134]: GetTexParameterfv (offset 282) */
+   /* _mesa_function_pool[32522]: GetTexParameterfv (offset 282) */
    "iip\0"
    "glGetTexParameterfv\0"
    "\0"
-   /* _mesa_function_pool[32159]: GetLightfv (offset 264) */
+   /* _mesa_function_pool[32547]: GetLightfv (offset 264) */
    "iip\0"
    "glGetLightfv\0"
    "\0"
-   /* _mesa_function_pool[32177]: PixelTransformParameterivEXT (dynamic) */
+   /* _mesa_function_pool[32565]: PixelTransformParameterivEXT (dynamic) */
    "iip\0"
    "glPixelTransformParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[32213]: BinormalPointerEXT (dynamic) */
+   /* _mesa_function_pool[32601]: BinormalPointerEXT (dynamic) */
    "iip\0"
    "glBinormalPointerEXT\0"
    "\0"
-   /* _mesa_function_pool[32239]: VertexAttrib1dNV (will be remapped) */
+   /* _mesa_function_pool[32627]: VertexAttrib1dNV (will be remapped) */
    "id\0"
    "glVertexAttrib1dNV\0"
    "\0"
-   /* _mesa_function_pool[32262]: GetCombinerInputParameterivNV (will be remapped) */
+   /* _mesa_function_pool[32650]: GetCombinerInputParameterivNV (will be remapped) */
    "iiiip\0"
    "glGetCombinerInputParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[32301]: Disable (offset 214) */
+   /* _mesa_function_pool[32689]: Disable (offset 214) */
    "i\0"
    "glDisable\0"
    "\0"
-   /* _mesa_function_pool[32314]: MultiTexCoord2fvARB (offset 387) */
+   /* _mesa_function_pool[32702]: MultiTexCoord2fvARB (offset 387) */
    "ip\0"
    "glMultiTexCoord2fv\0"
    "glMultiTexCoord2fvARB\0"
    "\0"
-   /* _mesa_function_pool[32359]: GetRenderbufferParameterivEXT (will be remapped) */
+   /* _mesa_function_pool[32747]: GetRenderbufferParameterivEXT (will be remapped) */
    "iip\0"
    "glGetRenderbufferParameteriv\0"
    "glGetRenderbufferParameterivEXT\0"
    "\0"
-   /* _mesa_function_pool[32425]: CombinerParameterivNV (will be remapped) */
+   /* _mesa_function_pool[32813]: CombinerParameterivNV (will be remapped) */
    "ip\0"
    "glCombinerParameterivNV\0"
    "\0"
-   /* _mesa_function_pool[32453]: GenFragmentShadersATI (will be remapped) */
+   /* _mesa_function_pool[32841]: GenFragmentShadersATI (will be remapped) */
    "i\0"
    "glGenFragmentShadersATI\0"
    "\0"
-   /* _mesa_function_pool[32480]: DrawArrays (offset 310) */
+   /* _mesa_function_pool[32868]: DrawArrays (offset 310) */
    "iii\0"
    "glDrawArrays\0"
    "glDrawArraysEXT\0"
    "\0"
-   /* _mesa_function_pool[32514]: WeightuivARB (dynamic) */
+   /* _mesa_function_pool[32902]: WeightuivARB (dynamic) */
    "ip\0"
    "glWeightuivARB\0"
    "\0"
-   /* _mesa_function_pool[32533]: VertexAttrib2sARB (will be remapped) */
+   /* _mesa_function_pool[32921]: VertexAttrib2sARB (will be remapped) */
    "iii\0"
    "glVertexAttrib2s\0"
    "glVertexAttrib2sARB\0"
    "\0"
-   /* _mesa_function_pool[32575]: ColorMask (offset 210) */
+   /* _mesa_function_pool[32963]: ColorMask (offset 210) */
    "iiii\0"
    "glColorMask\0"
    "\0"
-   /* _mesa_function_pool[32593]: GenAsyncMarkersSGIX (dynamic) */
+   /* _mesa_function_pool[32981]: GenAsyncMarkersSGIX (dynamic) */
    "i\0"
    "glGenAsyncMarkersSGIX\0"
    "\0"
-   /* _mesa_function_pool[32618]: Tangent3svEXT (dynamic) */
+   /* _mesa_function_pool[33006]: Tangent3svEXT (dynamic) */
    "p\0"
    "glTangent3svEXT\0"
    "\0"
-   /* _mesa_function_pool[32637]: GetListParameterivSGIX (dynamic) */
+   /* _mesa_function_pool[33025]: GetListParameterivSGIX (dynamic) */
    "iip\0"
    "glGetListParameterivSGIX\0"
    "\0"
-   /* _mesa_function_pool[32667]: BindBufferARB (will be remapped) */
+   /* _mesa_function_pool[33055]: BindBufferARB (will be remapped) */
    "ii\0"
    "glBindBuffer\0"
    "glBindBufferARB\0"
    "\0"
-   /* _mesa_function_pool[32700]: GetInfoLogARB (will be remapped) */
+   /* _mesa_function_pool[33088]: GetInfoLogARB (will be remapped) */
    "iipp\0"
    "glGetInfoLogARB\0"
    "\0"
-   /* _mesa_function_pool[32722]: RasterPos4iv (offset 83) */
+   /* _mesa_function_pool[33110]: RasterPos4iv (offset 83) */
    "p\0"
    "glRasterPos4iv\0"
    "\0"
-   /* _mesa_function_pool[32740]: Enable (offset 215) */
+   /* _mesa_function_pool[33128]: Enable (offset 215) */
    "i\0"
    "glEnable\0"
    "\0"
-   /* _mesa_function_pool[32752]: LineStipple (offset 167) */
+   /* _mesa_function_pool[33140]: LineStipple (offset 167) */
    "ii\0"
    "glLineStipple\0"
    "\0"
-   /* _mesa_function_pool[32770]: VertexAttribs4svNV (will be remapped) */
+   /* _mesa_function_pool[33158]: VertexAttribs4svNV (will be remapped) */
    "iip\0"
    "glVertexAttribs4svNV\0"
    "\0"
-   /* _mesa_function_pool[32796]: EdgeFlagPointerListIBM (dynamic) */
+   /* _mesa_function_pool[33184]: EdgeFlagPointerListIBM (dynamic) */
    "ipi\0"
    "glEdgeFlagPointerListIBM\0"
    "\0"
-   /* _mesa_function_pool[32826]: UniformMatrix3x2fv (will be remapped) */
+   /* _mesa_function_pool[33214]: UniformMatrix3x2fv (will be remapped) */
    "iiip\0"
    "glUniformMatrix3x2fv\0"
    "\0"
-   /* _mesa_function_pool[32853]: GetMinmaxParameterfv (offset 365) */
+   /* _mesa_function_pool[33241]: GetMinmaxParameterfv (offset 365) */
    "iip\0"
    "glGetMinmaxParameterfv\0"
    "glGetMinmaxParameterfvEXT\0"
    "\0"
-   /* _mesa_function_pool[32907]: VertexAttrib1fvARB (will be remapped) */
+   /* _mesa_function_pool[33295]: VertexAttrib1fvARB (will be remapped) */
    "ip\0"
    "glVertexAttrib1fv\0"
    "glVertexAttrib1fvARB\0"
    "\0"
-   /* _mesa_function_pool[32950]: GenBuffersARB (will be remapped) */
+   /* _mesa_function_pool[33338]: GenBuffersARB (will be remapped) */
    "ip\0"
    "glGenBuffers\0"
    "glGenBuffersARB\0"
    "\0"
-   /* _mesa_function_pool[32983]: VertexAttribs1svNV (will be remapped) */
+   /* _mesa_function_pool[33371]: VertexAttribs1svNV (will be remapped) */
    "iip\0"
    "glVertexAttribs1svNV\0"
    "\0"
-   /* _mesa_function_pool[33009]: Vertex3fv (offset 137) */
+   /* _mesa_function_pool[33397]: Vertex3fv (offset 137) */
    "p\0"
    "glVertex3fv\0"
    "\0"
-   /* _mesa_function_pool[33024]: GetTexBumpParameterivATI (will be remapped) */
+   /* _mesa_function_pool[33412]: GetTexBumpParameterivATI (will be remapped) */
    "ip\0"
    "glGetTexBumpParameterivATI\0"
    "\0"
-   /* _mesa_function_pool[33055]: Binormal3bEXT (dynamic) */
+   /* _mesa_function_pool[33443]: Binormal3bEXT (dynamic) */
    "iii\0"
    "glBinormal3bEXT\0"
    "\0"
-   /* _mesa_function_pool[33076]: FragmentMaterialivSGIX (dynamic) */
+   /* _mesa_function_pool[33464]: FragmentMaterialivSGIX (dynamic) */
    "iip\0"
    "glFragmentMaterialivSGIX\0"
    "\0"
-   /* _mesa_function_pool[33106]: IsRenderbufferEXT (will be remapped) */
+   /* _mesa_function_pool[33494]: IsRenderbufferEXT (will be remapped) */
    "i\0"
    "glIsRenderbuffer\0"
    "glIsRenderbufferEXT\0"
    "\0"
-   /* _mesa_function_pool[33146]: GenProgramsNV (will be remapped) */
+   /* _mesa_function_pool[33534]: GenProgramsNV (will be remapped) */
    "ip\0"
    "glGenProgramsARB\0"
    "glGenProgramsNV\0"
    "\0"
-   /* _mesa_function_pool[33183]: VertexAttrib4dvNV (will be remapped) */
+   /* _mesa_function_pool[33571]: VertexAttrib4dvNV (will be remapped) */
    "ip\0"
    "glVertexAttrib4dvNV\0"
    "\0"
-   /* _mesa_function_pool[33207]: EndFragmentShaderATI (will be remapped) */
+   /* _mesa_function_pool[33595]: EndFragmentShaderATI (will be remapped) */
    "\0"
    "glEndFragmentShaderATI\0"
    "\0"
-   /* _mesa_function_pool[33232]: Binormal3iEXT (dynamic) */
+   /* _mesa_function_pool[33620]: Binormal3iEXT (dynamic) */
    "iii\0"
    "glBinormal3iEXT\0"
    "\0"
-   /* _mesa_function_pool[33253]: WindowPos2fMESA (will be remapped) */
+   /* _mesa_function_pool[33641]: WindowPos2fMESA (will be remapped) */
    "ff\0"
    "glWindowPos2f\0"
    "glWindowPos2fARB\0"
@@ -4783,600 +4847,616 @@ static const char _mesa_function_pool[] =
 
 /* these functions need to be remapped */
 static const struct gl_function_pool_remap MESA_remap_table_functions[] = {
-   {  1616, AttachShader_remap_index },
-   {  9893, CreateProgram_remap_index },
-   { 22964, CreateShader_remap_index },
-   { 25451, DeleteProgram_remap_index },
-   { 18608, DeleteShader_remap_index },
-   { 23465, DetachShader_remap_index },
-   { 17974, GetAttachedShaders_remap_index },
-   {  4856, GetProgramInfoLog_remap_index },
-   {   444, GetProgramiv_remap_index },
-   {  6529, GetShaderInfoLog_remap_index },
-   { 31120, GetShaderiv_remap_index },
-   { 13387, IsProgram_remap_index },
-   { 12308, IsShader_remap_index },
-   { 10023, StencilFuncSeparate_remap_index },
-   {  3960, StencilMaskSeparate_remap_index },
-   {  7594, StencilOpSeparate_remap_index },
-   { 22252, UniformMatrix2x3fv_remap_index },
-   {  2886, UniformMatrix2x4fv_remap_index },
-   { 32826, UniformMatrix3x2fv_remap_index },
-   { 30442, UniformMatrix3x4fv_remap_index },
-   { 16264, UniformMatrix4x2fv_remap_index },
-   {  3302, UniformMatrix4x3fv_remap_index },
-   {  5017, ClampColor_remap_index },
-   { 18028, ClearBufferfi_remap_index },
-   { 17470, ClearBufferfv_remap_index },
-   { 29465, ClearBufferiv_remap_index },
-   { 13592, ClearBufferuiv_remap_index },
-   { 19891, GetStringi_remap_index },
-   {  2827, TexBuffer_remap_index },
-   {   977, FramebufferTexture_remap_index },
-   { 26477, GetBufferParameteri64v_remap_index },
-   { 10123, GetInteger64i_v_remap_index },
-   { 23278, VertexAttribDivisor_remap_index },
-   {  9911, LoadTransposeMatrixdARB_remap_index },
-   { 30849, LoadTransposeMatrixfARB_remap_index },
-   {  5637, MultTransposeMatrixdARB_remap_index },
-   { 23652, MultTransposeMatrixfARB_remap_index },
-   {   255, SampleCoverageARB_remap_index },
-   {  5821, CompressedTexImage1DARB_remap_index },
-   { 24180, CompressedTexImage2DARB_remap_index },
-   {  4023, CompressedTexImage3DARB_remap_index },
-   { 18325, CompressedTexSubImage1DARB_remap_index },
-   {  2089, CompressedTexSubImage2DARB_remap_index },
-   { 20313, CompressedTexSubImage3DARB_remap_index },
-   { 28621, GetCompressedTexImageARB_remap_index },
-   {  3868, DisableVertexAttribArrayARB_remap_index },
-   { 30007, EnableVertexAttribArrayARB_remap_index },
-   { 31924, GetProgramEnvParameterdvARB_remap_index },
-   { 23532, GetProgramEnvParameterfvARB_remap_index },
-   { 27506, GetProgramLocalParameterdvARB_remap_index },
-   {  8036, GetProgramLocalParameterfvARB_remap_index },
-   { 18459, GetProgramStringARB_remap_index },
-   { 27701, GetProgramivARB_remap_index },
-   { 20508, GetVertexAttribdvARB_remap_index },
-   { 16072, GetVertexAttribfvARB_remap_index },
-   {  9735, GetVertexAttribivARB_remap_index },
-   { 19372, ProgramEnvParameter4dARB_remap_index },
-   { 25201, ProgramEnvParameter4dvARB_remap_index },
-   { 16792, ProgramEnvParameter4fARB_remap_index },
-   {  8935, ProgramEnvParameter4fvARB_remap_index },
-   {  3986, ProgramLocalParameter4dARB_remap_index },
-   { 13097, ProgramLocalParameter4dvARB_remap_index },
-   { 29486, ProgramLocalParameter4fARB_remap_index },
-   { 25837, ProgramLocalParameter4fvARB_remap_index },
-   { 28375, ProgramStringARB_remap_index },
-   { 19622, VertexAttrib1dARB_remap_index },
-   { 15726, VertexAttrib1dvARB_remap_index },
-   {  4161, VertexAttrib1fARB_remap_index },
-   { 32907, VertexAttrib1fvARB_remap_index },
-   {  7120, VertexAttrib1sARB_remap_index },
-   {  2263, VertexAttrib1svARB_remap_index },
-   { 15157, VertexAttrib2dARB_remap_index },
-   { 17491, VertexAttrib2dvARB_remap_index },
-   {  1635, VertexAttrib2fARB_remap_index },
-   { 17604, VertexAttrib2fvARB_remap_index },
-   { 32533, VertexAttrib2sARB_remap_index },
-   { 31561, VertexAttrib2svARB_remap_index },
-   { 11274, VertexAttrib3dARB_remap_index },
-   {  8602, VertexAttrib3dvARB_remap_index },
-   {  1722, VertexAttrib3fARB_remap_index },
-   { 22515, VertexAttrib3fvARB_remap_index },
-   { 28222, VertexAttrib3sARB_remap_index },
-   { 20250, VertexAttrib3svARB_remap_index },
-   {  4882, VertexAttrib4NbvARB_remap_index },
-   { 17851, VertexAttrib4NivARB_remap_index },
-   { 22470, VertexAttrib4NsvARB_remap_index },
-   { 23484, VertexAttrib4NubARB_remap_index },
-   { 31807, VertexAttrib4NubvARB_remap_index },
-   { 19033, VertexAttrib4NuivARB_remap_index },
-   {  3175, VertexAttrib4NusvARB_remap_index },
-   { 10863, VertexAttrib4bvARB_remap_index },
-   { 26879, VertexAttrib4dARB_remap_index },
-   { 21272, VertexAttrib4dvARB_remap_index },
-   { 11428, VertexAttrib4fARB_remap_index },
-   { 11832, VertexAttrib4fvARB_remap_index },
-   { 10239, VertexAttrib4ivARB_remap_index },
-   { 17284, VertexAttrib4sARB_remap_index },
-   { 31035, VertexAttrib4svARB_remap_index },
-   { 16597, VertexAttrib4ubvARB_remap_index },
-   { 30331, VertexAttrib4uivARB_remap_index },
-   { 20061, VertexAttrib4usvARB_remap_index },
-   { 22067, VertexAttribPointerARB_remap_index },
-   { 32667, BindBufferARB_remap_index },
-   {  6827, BufferDataARB_remap_index },
-   {  1537, BufferSubDataARB_remap_index },
-   { 30612, DeleteBuffersARB_remap_index },
-   { 32950, GenBuffersARB_remap_index },
-   { 17647, GetBufferParameterivARB_remap_index },
-   { 16744, GetBufferPointervARB_remap_index },
-   {  1490, GetBufferSubDataARB_remap_index },
-   { 30279, IsBufferARB_remap_index },
-   { 26321, MapBufferARB_remap_index },
-   { 31250, UnmapBufferARB_remap_index },
-   {   351, BeginQueryARB_remap_index },
-   { 19717, DeleteQueriesARB_remap_index },
-   { 12159, EndQueryARB_remap_index },
-   { 29100, GenQueriesARB_remap_index },
-   {  1981, GetQueryObjectivARB_remap_index },
-   { 17328, GetQueryObjectuivARB_remap_index },
-   {  1779, GetQueryivARB_remap_index },
-   { 19968, IsQueryARB_remap_index },
-   {  8212, AttachObjectARB_remap_index },
-   { 18570, CompileShaderARB_remap_index },
-   {  3244, CreateProgramObjectARB_remap_index },
-   {  6772, CreateShaderObjectARB_remap_index },
-   { 14459, DeleteObjectARB_remap_index },
-   { 23971, DetachObjectARB_remap_index },
-   { 11904, GetActiveUniformARB_remap_index },
-   {  9410, GetAttachedObjectsARB_remap_index },
-   {  9717, GetHandleARB_remap_index },
-   { 32700, GetInfoLogARB_remap_index },
-   { 31878, GetObjectParameterfvARB_remap_index },
-   { 27380, GetObjectParameterivARB_remap_index },
-   { 28858, GetShaderSourceARB_remap_index },
-   { 28082, GetUniformLocationARB_remap_index },
-   { 23754, GetUniformfvARB_remap_index },
-   { 12672, GetUniformivARB_remap_index },
-   { 20106, LinkProgramARB_remap_index },
-   { 20164, ShaderSourceARB_remap_index },
-   {  7494, Uniform1fARB_remap_index },
-   { 29695, Uniform1fvARB_remap_index },
-   { 22036, Uniform1iARB_remap_index },
-   { 20961, Uniform1ivARB_remap_index },
-   {  2212, Uniform2fARB_remap_index },
-   { 14295, Uniform2fvARB_remap_index },
-   { 26208, Uniform2iARB_remap_index },
-   {  2332, Uniform2ivARB_remap_index },
-   { 18680, Uniform3fARB_remap_index },
-   {  9440, Uniform3fvARB_remap_index },
-   {  6383, Uniform3iARB_remap_index },
-   { 16850, Uniform3ivARB_remap_index },
-   { 19178, Uniform4fARB_remap_index },
-   { 23618, Uniform4fvARB_remap_index },
-   { 24880, Uniform4iARB_remap_index },
-   { 20474, Uniform4ivARB_remap_index },
-   {  8264, UniformMatrix2fvARB_remap_index },
+   {  1577, AttachShader_remap_index },
+   {  9967, CreateProgram_remap_index },
+   { 23300, CreateShader_remap_index },
+   { 25832, DeleteProgram_remap_index },
+   { 18888, DeleteShader_remap_index },
+   { 23801, DetachShader_remap_index },
+   { 18202, GetAttachedShaders_remap_index },
+   {  4919, GetProgramInfoLog_remap_index },
+   {   405, GetProgramiv_remap_index },
+   {  6627, GetShaderInfoLog_remap_index },
+   { 31502, GetShaderiv_remap_index },
+   { 13443, IsProgram_remap_index },
+   { 12364, IsShader_remap_index },
+   { 10097, StencilFuncSeparate_remap_index },
+   {  3921, StencilMaskSeparate_remap_index },
+   {  7692, StencilOpSeparate_remap_index },
+   { 22560, UniformMatrix2x3fv_remap_index },
+   {  2847, UniformMatrix2x4fv_remap_index },
+   { 33214, UniformMatrix3x2fv_remap_index },
+   { 30819, UniformMatrix3x4fv_remap_index },
+   { 16406, UniformMatrix4x2fv_remap_index },
+   {  3263, UniformMatrix4x3fv_remap_index },
+   {  5080, ClampColor_remap_index },
+   { 18256, ClearBufferfi_remap_index },
+   { 17698, ClearBufferfv_remap_index },
+   { 29842, ClearBufferiv_remap_index },
+   { 13648, ClearBufferuiv_remap_index },
+   { 20199, GetStringi_remap_index },
+   {  2788, TexBuffer_remap_index },
+   {   938, FramebufferTexture_remap_index },
+   { 26868, GetBufferParameteri64v_remap_index },
+   { 10197, GetInteger64i_v_remap_index },
+   { 23614, VertexAttribDivisor_remap_index },
+   {  9985, LoadTransposeMatrixdARB_remap_index },
+   { 31231, LoadTransposeMatrixfARB_remap_index },
+   {  5693, MultTransposeMatrixdARB_remap_index },
+   { 23988, MultTransposeMatrixfARB_remap_index },
+   {   216, SampleCoverageARB_remap_index },
+   {  5919, CompressedTexImage1DARB_remap_index },
+   { 24516, CompressedTexImage2DARB_remap_index },
+   {  3984, CompressedTexImage3DARB_remap_index },
+   { 18544, CompressedTexSubImage1DARB_remap_index },
+   {  2050, CompressedTexSubImage2DARB_remap_index },
+   { 20621, CompressedTexSubImage3DARB_remap_index },
+   { 28948, GetCompressedTexImageARB_remap_index },
+   {  3829, DisableVertexAttribArrayARB_remap_index },
+   { 30384, EnableVertexAttribArrayARB_remap_index },
+   { 32345, GetProgramEnvParameterdvARB_remap_index },
+   { 23868, GetProgramEnvParameterfvARB_remap_index },
+   { 27865, GetProgramLocalParameterdvARB_remap_index },
+   {  8134, GetProgramLocalParameterfvARB_remap_index },
+   { 18720, GetProgramStringARB_remap_index },
+   { 28060, GetProgramivARB_remap_index },
+   { 20816, GetVertexAttribdvARB_remap_index },
+   { 16214, GetVertexAttribfvARB_remap_index },
+   {  9809, GetVertexAttribivARB_remap_index },
+   { 19662, ProgramEnvParameter4dARB_remap_index },
+   { 25582, ProgramEnvParameter4dvARB_remap_index },
+   { 17020, ProgramEnvParameter4fARB_remap_index },
+   {  9009, ProgramEnvParameter4fvARB_remap_index },
+   {  3947, ProgramLocalParameter4dARB_remap_index },
+   { 13153, ProgramLocalParameter4dvARB_remap_index },
+   { 29863, ProgramLocalParameter4fARB_remap_index },
+   { 26228, ProgramLocalParameter4fvARB_remap_index },
+   { 28702, ProgramStringARB_remap_index },
+   { 19930, VertexAttrib1dARB_remap_index },
+   { 15868, VertexAttrib1dvARB_remap_index },
+   {  4143, VertexAttrib1fARB_remap_index },
+   { 33295, VertexAttrib1fvARB_remap_index },
+   {  7218, VertexAttrib1sARB_remap_index },
+   {  2224, VertexAttrib1svARB_remap_index },
+   { 15299, VertexAttrib2dARB_remap_index },
+   { 17719, VertexAttrib2dvARB_remap_index },
+   {  1596, VertexAttrib2fARB_remap_index },
+   { 17832, VertexAttrib2fvARB_remap_index },
+   { 32921, VertexAttrib2sARB_remap_index },
+   { 31982, VertexAttrib2svARB_remap_index },
+   { 11348, VertexAttrib3dARB_remap_index },
+   {  8676, VertexAttrib3dvARB_remap_index },
+   {  1683, VertexAttrib3fARB_remap_index },
+   { 22851, VertexAttrib3fvARB_remap_index },
+   { 28549, VertexAttrib3sARB_remap_index },
+   { 20558, VertexAttrib3svARB_remap_index },
+   {  4945, VertexAttrib4NbvARB_remap_index },
+   { 18079, VertexAttrib4NivARB_remap_index },
+   { 22806, VertexAttrib4NsvARB_remap_index },
+   { 23820, VertexAttrib4NubARB_remap_index },
+   { 32228, VertexAttrib4NubvARB_remap_index },
+   { 19313, VertexAttrib4NuivARB_remap_index },
+   {  3136, VertexAttrib4NusvARB_remap_index },
+   { 10937, VertexAttrib4bvARB_remap_index },
+   { 27238, VertexAttrib4dARB_remap_index },
+   { 21580, VertexAttrib4dvARB_remap_index },
+   { 11502, VertexAttrib4fARB_remap_index },
+   { 11906, VertexAttrib4fvARB_remap_index },
+   { 10313, VertexAttrib4ivARB_remap_index },
+   { 17512, VertexAttrib4sARB_remap_index },
+   { 31417, VertexAttrib4svARB_remap_index },
+   { 16825, VertexAttrib4ubvARB_remap_index },
+   { 30708, VertexAttrib4uivARB_remap_index },
+   { 20369, VertexAttrib4usvARB_remap_index },
+   { 22375, VertexAttribPointerARB_remap_index },
+   { 33055, BindBufferARB_remap_index },
+   {  6925, BufferDataARB_remap_index },
+   {  1498, BufferSubDataARB_remap_index },
+   { 30994, DeleteBuffersARB_remap_index },
+   { 33338, GenBuffersARB_remap_index },
+   { 17875, GetBufferParameterivARB_remap_index },
+   { 16972, GetBufferPointervARB_remap_index },
+   {  1451, GetBufferSubDataARB_remap_index },
+   { 30656, IsBufferARB_remap_index },
+   { 26712, MapBufferARB_remap_index },
+   { 31632, UnmapBufferARB_remap_index },
+   {   312, BeginQueryARB_remap_index },
+   { 20025, DeleteQueriesARB_remap_index },
+   { 12225, EndQueryARB_remap_index },
+   { 29427, GenQueriesARB_remap_index },
+   {  1942, GetQueryObjectivARB_remap_index },
+   { 17556, GetQueryObjectuivARB_remap_index },
+   {  1740, GetQueryivARB_remap_index },
+   { 20276, IsQueryARB_remap_index },
+   {  8286, AttachObjectARB_remap_index },
+   { 18850, CompileShaderARB_remap_index },
+   {  3205, CreateProgramObjectARB_remap_index },
+   {  6870, CreateShaderObjectARB_remap_index },
+   { 14601, DeleteObjectARB_remap_index },
+   { 24307, DetachObjectARB_remap_index },
+   { 11970, GetActiveUniformARB_remap_index },
+   {  9484, GetAttachedObjectsARB_remap_index },
+   {  9791, GetHandleARB_remap_index },
+   { 33088, GetInfoLogARB_remap_index },
+   { 32299, GetObjectParameterfvARB_remap_index },
+   { 27739, GetObjectParameterivARB_remap_index },
+   { 29185, GetShaderSourceARB_remap_index },
+   { 28409, GetUniformLocationARB_remap_index },
+   { 24090, GetUniformfvARB_remap_index },
+   { 12728, GetUniformivARB_remap_index },
+   { 20414, LinkProgramARB_remap_index },
+   { 20472, ShaderSourceARB_remap_index },
+   {  7592, Uniform1fARB_remap_index },
+   { 30072, Uniform1fvARB_remap_index },
+   { 22344, Uniform1iARB_remap_index },
+   { 21269, Uniform1ivARB_remap_index },
+   {  2173, Uniform2fARB_remap_index },
+   { 14437, Uniform2fvARB_remap_index },
+   { 26599, Uniform2iARB_remap_index },
+   {  2293, Uniform2ivARB_remap_index },
+   { 18960, Uniform3fARB_remap_index },
+   {  9514, Uniform3fvARB_remap_index },
+   {  6481, Uniform3iARB_remap_index },
+   { 17078, Uniform3ivARB_remap_index },
+   { 19468, Uniform4fARB_remap_index },
+   { 23954, Uniform4fvARB_remap_index },
+   { 25216, Uniform4iARB_remap_index },
+   { 20782, Uniform4ivARB_remap_index },
+   {  8338, UniformMatrix2fvARB_remap_index },
    {    17, UniformMatrix3fvARB_remap_index },
-   {  2729, UniformMatrix4fvARB_remap_index },
-   { 25313, UseProgramObjectARB_remap_index },
-   { 14845, ValidateProgramARB_remap_index },
-   { 21315, BindAttribLocationARB_remap_index },
-   {  4927, GetActiveAttribARB_remap_index },
-   { 16531, GetAttribLocationARB_remap_index },
-   { 29413, DrawBuffersARB_remap_index },
-   { 17896, DrawArraysInstancedARB_remap_index },
-   {  6444, DrawElementsInstancedARB_remap_index },
-   { 13202, RenderbufferStorageMultisample_remap_index },
-   { 13673, FramebufferTextureARB_remap_index },
-   { 25739, FramebufferTextureFaceARB_remap_index },
-   { 24120, ProgramParameteriARB_remap_index },
-   { 23436, VertexAttribDivisorARB_remap_index },
-   { 19226, FlushMappedBufferRange_remap_index },
-   { 27797, MapBufferRange_remap_index },
-   { 16375, BindVertexArray_remap_index },
-   { 14668, GenVertexArrays_remap_index },
-   { 30209, CopyBufferSubData_remap_index },
-   { 31139, ClientWaitSync_remap_index },
-   {  2648, DeleteSync_remap_index },
-   {  7161, FenceSync_remap_index },
-   { 15216, GetInteger64v_remap_index },
-   { 22577, GetSynciv_remap_index },
-   { 29352, IsSync_remap_index },
-   {  9358, WaitSync_remap_index },
-   {  3836, DrawElementsBaseVertex_remap_index },
-   { 30544, DrawRangeElementsBaseVertex_remap_index },
-   { 26352, MultiDrawElementsBaseVertex_remap_index },
-   { 32083, BlendEquationSeparateiARB_remap_index },
-   { 17740, BlendEquationiARB_remap_index },
-   { 12641, BlendFuncSeparateiARB_remap_index },
-   {  9783, BlendFunciARB_remap_index },
-   {  5078, BindTransformFeedback_remap_index },
-   {  3271, DeleteTransformFeedbacks_remap_index },
-   {  6416, DrawTransformFeedback_remap_index },
-   {  9577, GenTransformFeedbacks_remap_index },
-   { 28265, IsTransformFeedback_remap_index },
-   { 25932, PauseTransformFeedback_remap_index },
-   {  5557, ResumeTransformFeedback_remap_index },
-   { 21635, ClearDepthf_remap_index },
-   {  6720, DepthRangef_remap_index },
-   { 14480, GetShaderPrecisionFormat_remap_index },
-   {  9963, ReleaseShaderCompiler_remap_index },
-   { 10906, ShaderBinary_remap_index },
-   {  5425, PolygonOffsetEXT_remap_index },
-   { 23199, GetPixelTexGenParameterfvSGIS_remap_index },
-   {  4404, GetPixelTexGenParameterivSGIS_remap_index },
-   { 22932, PixelTexGenParameterfSGIS_remap_index },
-   {   663, PixelTexGenParameterfvSGIS_remap_index },
-   { 12710, PixelTexGenParameteriSGIS_remap_index },
-   { 13815, PixelTexGenParameterivSGIS_remap_index },
-   { 18224, SampleMaskSGIS_remap_index },
-   { 19908, SamplePatternSGIS_remap_index },
-   { 26281, ColorPointerEXT_remap_index },
-   { 17534, EdgeFlagPointerEXT_remap_index },
-   {  6037, IndexPointerEXT_remap_index },
-   {  6117, NormalPointerEXT_remap_index },
-   { 15810, TexCoordPointerEXT_remap_index },
-   {  6950, VertexPointerEXT_remap_index },
-   {  3638, PointParameterfEXT_remap_index },
-   {  7801, PointParameterfvEXT_remap_index },
-   { 31976, LockArraysEXT_remap_index },
-   { 14909, UnlockArraysEXT_remap_index },
-   {  1306, SecondaryColor3bEXT_remap_index },
-   {  7960, SecondaryColor3bvEXT_remap_index },
-   { 10416, SecondaryColor3dEXT_remap_index },
-   { 25509, SecondaryColor3dvEXT_remap_index },
-   { 28131, SecondaryColor3fEXT_remap_index },
-   { 18261, SecondaryColor3fvEXT_remap_index },
-   {   509, SecondaryColor3iEXT_remap_index },
-   { 16120, SecondaryColor3ivEXT_remap_index },
-   { 10051, SecondaryColor3sEXT_remap_index },
-   { 30803, SecondaryColor3svEXT_remap_index },
-   { 27216, SecondaryColor3ubEXT_remap_index },
-   { 21206, SecondaryColor3ubvEXT_remap_index },
-   { 12952, SecondaryColor3uiEXT_remap_index },
-   { 22819, SecondaryColor3uivEXT_remap_index },
-   { 25789, SecondaryColor3usEXT_remap_index },
-   { 13025, SecondaryColor3usvEXT_remap_index },
-   { 11775, SecondaryColorPointerEXT_remap_index },
-   { 25603, MultiDrawArraysEXT_remap_index },
-   { 20896, MultiDrawElementsEXT_remap_index },
-   { 21091, FogCoordPointerEXT_remap_index },
-   {  4553, FogCoorddEXT_remap_index },
-   { 31377, FogCoorddvEXT_remap_index },
-   {  4670, FogCoordfEXT_remap_index },
-   { 27139, FogCoordfvEXT_remap_index },
-   { 19130, PixelTexGenSGIX_remap_index },
-   { 27724, BlendFuncSeparateEXT_remap_index },
-   {  6862, FlushVertexArrayRangeNV_remap_index },
-   {  5374, VertexArrayRangeNV_remap_index },
-   { 28196, CombinerInputNV_remap_index },
-   {  2155, CombinerOutputNV_remap_index },
-   { 30956, CombinerParameterfNV_remap_index },
-   {  5248, CombinerParameterfvNV_remap_index },
-   { 22301, CombinerParameteriNV_remap_index },
-   { 32425, CombinerParameterivNV_remap_index },
-   {  7238, FinalCombinerInputNV_remap_index },
-   {  9804, GetCombinerInputParameterfvNV_remap_index },
-   { 32262, GetCombinerInputParameterivNV_remap_index },
-   {   216, GetCombinerOutputParameterfvNV_remap_index },
-   { 13776, GetCombinerOutputParameterivNV_remap_index },
-   {  6624, GetFinalCombinerInputParameterfvNV_remap_index },
-   { 24752, GetFinalCombinerInputParameterivNV_remap_index },
-   { 12619, ResizeBuffersMESA_remap_index },
-   { 11101, WindowPos2dMESA_remap_index },
-   {  1099, WindowPos2dvMESA_remap_index },
-   { 33253, WindowPos2fMESA_remap_index },
-   {  7905, WindowPos2fvMESA_remap_index },
-   { 18171, WindowPos2iMESA_remap_index },
-   { 20381, WindowPos2ivMESA_remap_index },
-   { 20995, WindowPos2sMESA_remap_index },
-   {  5735, WindowPos2svMESA_remap_index },
-   {  7730, WindowPos3dMESA_remap_index },
-   { 14023, WindowPos3dvMESA_remap_index },
-   {   555, WindowPos3fMESA_remap_index },
-   { 14970, WindowPos3fvMESA_remap_index },
-   { 24013, WindowPos3iMESA_remap_index },
-   { 30154, WindowPos3ivMESA_remap_index },
-   { 18825, WindowPos3sMESA_remap_index },
-   { 31633, WindowPos3svMESA_remap_index },
-   { 11052, WindowPos4dMESA_remap_index },
-   { 16988, WindowPos4dvMESA_remap_index },
-   { 13982, WindowPos4fMESA_remap_index },
-   { 30710, WindowPos4fvMESA_remap_index },
-   { 30307, WindowPos4iMESA_remap_index },
-   { 12422, WindowPos4ivMESA_remap_index },
-   { 19009, WindowPos4sMESA_remap_index },
-   {  3222, WindowPos4svMESA_remap_index },
-   { 26847, MultiModeDrawArraysIBM_remap_index },
-   { 28971, MultiModeDrawElementsIBM_remap_index },
-   { 12187, DeleteFencesNV_remap_index },
-   { 28043, FinishFenceNV_remap_index },
-   {  3760, GenFencesNV_remap_index },
-   { 16968, GetFenceivNV_remap_index },
-   {  8197, IsFenceNV_remap_index },
-   { 13703, SetFenceNV_remap_index },
-   {  4217, TestFenceNV_remap_index },
-   { 31604, AreProgramsResidentNV_remap_index },
-   { 30998, BindProgramNV_remap_index },
-   { 25872, DeleteProgramsNV_remap_index },
-   { 21424, ExecuteProgramNV_remap_index },
-   { 33146, GenProgramsNV_remap_index },
-   { 23304, GetProgramParameterdvNV_remap_index },
-   { 10478, GetProgramParameterfvNV_remap_index },
-   { 26255, GetProgramStringNV_remap_index },
-   { 24390, GetProgramivNV_remap_index },
-   { 23567, GetTrackMatrixivNV_remap_index },
-   { 26049, GetVertexAttribPointervNV_remap_index },
-   { 24685, GetVertexAttribdvNV_remap_index },
-   {  9253, GetVertexAttribfvNV_remap_index },
-   { 18432, GetVertexAttribivNV_remap_index },
-   { 19256, IsProgramNV_remap_index },
-   {  9336, LoadProgramNV_remap_index },
-   { 27820, ProgramParameters4dvNV_remap_index },
-   { 24320, ProgramParameters4fvNV_remap_index },
-   { 20685, RequestResidentProgramsNV_remap_index },
-   { 22279, TrackMatrixNV_remap_index },
-   { 32239, VertexAttrib1dNV_remap_index },
-   { 13614, VertexAttrib1dvNV_remap_index },
-   { 28477, VertexAttrib1fNV_remap_index },
-   {  2454, VertexAttrib1fvNV_remap_index },
-   { 30767, VertexAttrib1sNV_remap_index },
-   { 15043, VertexAttrib1svNV_remap_index },
-   {  4832, VertexAttrib2dNV_remap_index },
-   { 13507, VertexAttrib2dvNV_remap_index },
-   { 20140, VertexAttrib2fNV_remap_index },
-   { 13073, VertexAttrib2fvNV_remap_index },
-   {  5947, VertexAttrib2sNV_remap_index },
-   { 18879, VertexAttrib2svNV_remap_index },
-   { 11249, VertexAttrib3dNV_remap_index },
-   { 31854, VertexAttrib3dvNV_remap_index },
-   { 10290, VertexAttrib3fNV_remap_index },
-   { 24712, VertexAttrib3fvNV_remap_index },
-   { 22122, VertexAttrib3sNV_remap_index },
-   { 23594, VertexAttrib3svNV_remap_index },
-   { 28945, VertexAttrib4dNV_remap_index },
-   { 33183, VertexAttrib4dvNV_remap_index },
-   {  4454, VertexAttrib4fNV_remap_index },
-   {  9386, VertexAttrib4fvNV_remap_index },
-   { 26731, VertexAttrib4sNV_remap_index },
-   {  1448, VertexAttrib4svNV_remap_index },
-   {  4990, VertexAttrib4ubNV_remap_index },
-   {   817, VertexAttrib4ubvNV_remap_index },
-   { 21604, VertexAttribPointerNV_remap_index },
-   {  2306, VertexAttribs1dvNV_remap_index },
-   { 26137, VertexAttribs1fvNV_remap_index },
-   { 32983, VertexAttribs1svNV_remap_index },
-   { 10315, VertexAttribs2dvNV_remap_index },
-   { 25274, VertexAttribs2fvNV_remap_index },
-   { 17560, VertexAttribs2svNV_remap_index },
-   {  5276, VertexAttribs3dvNV_remap_index },
-   {  2186, VertexAttribs3fvNV_remap_index },
-   { 29902, VertexAttribs3svNV_remap_index },
-   { 26821, VertexAttribs4dvNV_remap_index },
-   {  5348, VertexAttribs4fvNV_remap_index },
-   { 32770, VertexAttribs4svNV_remap_index },
-   { 29650, VertexAttribs4ubvNV_remap_index },
-   { 26923, GetTexBumpParameterfvATI_remap_index },
-   { 33024, GetTexBumpParameterivATI_remap_index },
-   { 18542, TexBumpParameterfvATI_remap_index },
-   { 20556, TexBumpParameterivATI_remap_index },
-   { 15589, AlphaFragmentOp1ATI_remap_index },
-   { 25555, AlphaFragmentOp2ATI_remap_index },
-   { 24628, AlphaFragmentOp3ATI_remap_index },
-   { 29829, BeginFragmentShaderATI_remap_index },
-   { 31197, BindFragmentShaderATI_remap_index },
-   { 23723, ColorFragmentOp1ATI_remap_index },
-   {  4332, ColorFragmentOp2ATI_remap_index },
-   { 31499, ColorFragmentOp3ATI_remap_index },
-   {  5514, DeleteFragmentShaderATI_remap_index },
-   { 33207, EndFragmentShaderATI_remap_index },
-   { 32453, GenFragmentShadersATI_remap_index },
-   { 25428, PassTexCoordATI_remap_index },
-   {  6930, SampleMapATI_remap_index },
-   { 27034, SetFragmentShaderConstantATI_remap_index },
-   {   402, PointParameteriNV_remap_index },
-   { 14184, PointParameterivNV_remap_index },
-   { 28784, ActiveStencilFaceEXT_remap_index },
-   { 27480, BindVertexArrayAPPLE_remap_index },
-   {  2776, DeleteVertexArraysAPPLE_remap_index },
-   { 18001, GenVertexArraysAPPLE_remap_index },
-   { 23369, IsVertexArrayAPPLE_remap_index },
-   {   858, GetProgramNamedParameterdvNV_remap_index },
-   {  3601, GetProgramNamedParameterfvNV_remap_index },
-   { 26954, ProgramNamedParameter4dNV_remap_index },
-   { 14543, ProgramNamedParameter4dvNV_remap_index },
-   {  8869, ProgramNamedParameter4fNV_remap_index },
-   { 11740, ProgramNamedParameter4fvNV_remap_index },
-   { 16899, PrimitiveRestartIndexNV_remap_index },
-   { 30687, PrimitiveRestartNV_remap_index },
-   { 24299, DepthBoundsEXT_remap_index },
-   {  1198, BlendEquationSeparateEXT_remap_index },
-   { 14744, BindFramebufferEXT_remap_index },
-   { 25648, BindRenderbufferEXT_remap_index },
-   {  9633, CheckFramebufferStatusEXT_remap_index },
-   { 22620, DeleteFramebuffersEXT_remap_index },
-   { 31756, DeleteRenderbuffersEXT_remap_index },
-   { 13531, FramebufferRenderbufferEXT_remap_index },
-   { 13720, FramebufferTexture1DEXT_remap_index },
-   { 11534, FramebufferTexture2DEXT_remap_index },
-   { 11154, FramebufferTexture3DEXT_remap_index },
-   { 23235, GenFramebuffersEXT_remap_index },
-   { 17425, GenRenderbuffersEXT_remap_index },
-   {  6666, GenerateMipmapEXT_remap_index },
-   { 21697, GetFramebufferAttachmentParameterivEXT_remap_index },
-   { 32359, GetRenderbufferParameterivEXT_remap_index },
-   { 20436, IsFramebufferEXT_remap_index },
-   { 33106, IsRenderbufferEXT_remap_index },
-   {  8144, RenderbufferStorageEXT_remap_index },
-   {   734, BlitFramebufferEXT_remap_index },
-   { 14329, BufferParameteriAPPLE_remap_index },
-   { 19288, FlushMappedBufferRangeAPPLE_remap_index },
-   {  1854, BindFragDataLocationEXT_remap_index },
-   { 24412, GetFragDataLocationEXT_remap_index },
-   { 10593, GetUniformuivEXT_remap_index },
-   {  2972, GetVertexAttribIivEXT_remap_index },
-   { 27991, GetVertexAttribIuivEXT_remap_index },
-   { 12020, Uniform1uiEXT_remap_index },
-   { 27905, Uniform1uivEXT_remap_index },
-   { 22218, Uniform2uiEXT_remap_index },
-   {  4296, Uniform2uivEXT_remap_index },
-   { 29224, Uniform3uiEXT_remap_index },
-   { 14690, Uniform3uivEXT_remap_index },
-   {  3525, Uniform4uiEXT_remap_index },
-   {  8645, Uniform4uivEXT_remap_index },
-   { 18389, VertexAttribI1iEXT_remap_index },
-   {  1004, VertexAttribI1ivEXT_remap_index },
-   {  2555, VertexAttribI1uiEXT_remap_index },
-   { 12801, VertexAttribI1uivEXT_remap_index },
+   {  2690, UniformMatrix4fvARB_remap_index },
+   { 25694, UseProgramObjectARB_remap_index },
+   { 14987, ValidateProgramARB_remap_index },
+   { 21623, BindAttribLocationARB_remap_index },
+   {  4990, GetActiveAttribARB_remap_index },
+   { 16726, GetAttribLocationARB_remap_index },
+   { 29790, DrawBuffersARB_remap_index },
+   { 29623, ClampColorARB_remap_index },
+   { 18124, DrawArraysInstancedARB_remap_index },
+   {  6542, DrawElementsInstancedARB_remap_index },
+   { 13258, RenderbufferStorageMultisample_remap_index },
+   { 13729, FramebufferTextureARB_remap_index },
+   { 26130, FramebufferTextureFaceARB_remap_index },
+   { 24456, ProgramParameteriARB_remap_index },
+   { 23772, VertexAttribDivisorARB_remap_index },
+   { 19516, FlushMappedBufferRange_remap_index },
+   { 28176, MapBufferRange_remap_index },
+   { 28083, TexBufferARB_remap_index },
+   { 16544, BindVertexArray_remap_index },
+   { 14810, GenVertexArrays_remap_index },
+   { 30586, CopyBufferSubData_remap_index },
+   { 31521, ClientWaitSync_remap_index },
+   {  2609, DeleteSync_remap_index },
+   {  7259, FenceSync_remap_index },
+   { 15358, GetInteger64v_remap_index },
+   { 22913, GetSynciv_remap_index },
+   { 29729, IsSync_remap_index },
+   {  9432, WaitSync_remap_index },
+   {  3797, DrawElementsBaseVertex_remap_index },
+   { 30898, DrawRangeElementsBaseVertex_remap_index },
+   { 26743, MultiDrawElementsBaseVertex_remap_index },
+   { 16792, BlendEquationSeparateiARB_remap_index },
+   { 17968, BlendEquationiARB_remap_index },
+   { 12697, BlendFuncSeparateiARB_remap_index },
+   {  9857, BlendFunciARB_remap_index },
+   {  8200, BindSampler_remap_index },
+   {  4122, DeleteSamplers_remap_index },
+   { 19889, GenSamplers_remap_index },
+   { 29661, GetSamplerParameterIiv_remap_index },
+   { 19410, GetSamplerParameterIuiv_remap_index },
+   {  4839, GetSamplerParameterfv_remap_index },
+   { 25851, GetSamplerParameteriv_remap_index },
+   { 14355, IsSampler_remap_index },
+   { 16497, SamplerParameterIiv_remap_index },
+   { 30937, SamplerParameterIuiv_remap_index },
+   { 22612, SamplerParameterf_remap_index },
+   { 16653, SamplerParameterfv_remap_index },
+   { 22587, SamplerParameteri_remap_index },
+   { 18318, SamplerParameteriv_remap_index },
+   {  5141, BindTransformFeedback_remap_index },
+   {  3232, DeleteTransformFeedbacks_remap_index },
+   {  6514, DrawTransformFeedback_remap_index },
+   {  9651, GenTransformFeedbacks_remap_index },
+   { 28592, IsTransformFeedback_remap_index },
+   { 26323, PauseTransformFeedback_remap_index },
+   {  5578, ResumeTransformFeedback_remap_index },
+   { 21943, ClearDepthf_remap_index },
+   {  6818, DepthRangef_remap_index },
+   { 14622, GetShaderPrecisionFormat_remap_index },
+   { 10037, ReleaseShaderCompiler_remap_index },
+   { 10980, ShaderBinary_remap_index },
+   {  5446, PolygonOffsetEXT_remap_index },
+   { 23535, GetPixelTexGenParameterfvSGIS_remap_index },
+   {  4438, GetPixelTexGenParameterivSGIS_remap_index },
+   { 23268, PixelTexGenParameterfSGIS_remap_index },
+   {   624, PixelTexGenParameterfvSGIS_remap_index },
+   { 12766, PixelTexGenParameteriSGIS_remap_index },
+   { 13903, PixelTexGenParameterivSGIS_remap_index },
+   { 18443, SampleMaskSGIS_remap_index },
+   { 20216, SamplePatternSGIS_remap_index },
+   { 26672, ColorPointerEXT_remap_index },
+   { 17762, EdgeFlagPointerEXT_remap_index },
+   {  6135, IndexPointerEXT_remap_index },
+   {  6215, NormalPointerEXT_remap_index },
+   { 15952, TexCoordPointerEXT_remap_index },
+   {  7048, VertexPointerEXT_remap_index },
+   {  3599, PointParameterfEXT_remap_index },
+   {  7899, PointParameterfvEXT_remap_index },
+   { 32397, LockArraysEXT_remap_index },
+   { 15051, UnlockArraysEXT_remap_index },
+   {  1267, SecondaryColor3bEXT_remap_index },
+   {  8058, SecondaryColor3bvEXT_remap_index },
+   { 10490, SecondaryColor3dEXT_remap_index },
+   { 25900, SecondaryColor3dvEXT_remap_index },
+   { 28458, SecondaryColor3fEXT_remap_index },
+   { 18480, SecondaryColor3fvEXT_remap_index },
+   {   470, SecondaryColor3iEXT_remap_index },
+   { 16262, SecondaryColor3ivEXT_remap_index },
+   { 10125, SecondaryColor3sEXT_remap_index },
+   { 31185, SecondaryColor3svEXT_remap_index },
+   { 27575, SecondaryColor3ubEXT_remap_index },
+   { 21514, SecondaryColor3ubvEXT_remap_index },
+   { 13008, SecondaryColor3uiEXT_remap_index },
+   { 23155, SecondaryColor3uivEXT_remap_index },
+   { 26180, SecondaryColor3usEXT_remap_index },
+   { 13081, SecondaryColor3usvEXT_remap_index },
+   { 11849, SecondaryColorPointerEXT_remap_index },
+   { 25994, MultiDrawArraysEXT_remap_index },
+   { 21204, MultiDrawElementsEXT_remap_index },
+   { 21399, FogCoordPointerEXT_remap_index },
+   {  4587, FogCoorddEXT_remap_index },
+   { 31798, FogCoorddvEXT_remap_index },
+   {  4704, FogCoordfEXT_remap_index },
+   { 27498, FogCoordfvEXT_remap_index },
+   { 11949, PixelTexGenSGIX_remap_index },
+   { 28103, BlendFuncSeparateEXT_remap_index },
+   {  6960, FlushVertexArrayRangeNV_remap_index },
+   {  5395, VertexArrayRangeNV_remap_index },
+   { 28523, CombinerInputNV_remap_index },
+   {  2116, CombinerOutputNV_remap_index },
+   { 31338, CombinerParameterfNV_remap_index },
+   {  5269, CombinerParameterfvNV_remap_index },
+   { 22637, CombinerParameteriNV_remap_index },
+   { 32813, CombinerParameterivNV_remap_index },
+   {  7336, FinalCombinerInputNV_remap_index },
+   {  9878, GetCombinerInputParameterfvNV_remap_index },
+   { 32650, GetCombinerInputParameterivNV_remap_index },
+   { 14004, GetCombinerOutputParameterfvNV_remap_index },
+   { 13832, GetCombinerOutputParameterivNV_remap_index },
+   {  6722, GetFinalCombinerInputParameterfvNV_remap_index },
+   { 25088, GetFinalCombinerInputParameterivNV_remap_index },
+   { 12675, ResizeBuffersMESA_remap_index },
+   { 11175, WindowPos2dMESA_remap_index },
+   {  1060, WindowPos2dvMESA_remap_index },
+   { 33641, WindowPos2fMESA_remap_index },
+   {  8003, WindowPos2fvMESA_remap_index },
+   { 18390, WindowPos2iMESA_remap_index },
+   { 20689, WindowPos2ivMESA_remap_index },
+   { 21303, WindowPos2sMESA_remap_index },
+   {  5833, WindowPos2svMESA_remap_index },
+   {  7828, WindowPos3dMESA_remap_index },
+   { 14150, WindowPos3dvMESA_remap_index },
+   {   516, WindowPos3fMESA_remap_index },
+   { 15112, WindowPos3fvMESA_remap_index },
+   { 24349, WindowPos3iMESA_remap_index },
+   { 30531, WindowPos3ivMESA_remap_index },
+   { 19105, WindowPos3sMESA_remap_index },
+   { 32054, WindowPos3svMESA_remap_index },
+   { 11126, WindowPos4dMESA_remap_index },
+   { 17216, WindowPos4dvMESA_remap_index },
+   { 14109, WindowPos4fMESA_remap_index },
+   { 31092, WindowPos4fvMESA_remap_index },
+   { 30684, WindowPos4iMESA_remap_index },
+   { 12478, WindowPos4ivMESA_remap_index },
+   { 19289, WindowPos4sMESA_remap_index },
+   {  3183, WindowPos4svMESA_remap_index },
+   { 13871, MultiModeDrawArraysIBM_remap_index },
+   { 29298, MultiModeDrawElementsIBM_remap_index },
+   { 12253, DeleteFencesNV_remap_index },
+   { 28370, FinishFenceNV_remap_index },
+   {  3721, GenFencesNV_remap_index },
+   { 17196, GetFenceivNV_remap_index },
+   {  8271, IsFenceNV_remap_index },
+   { 13759, SetFenceNV_remap_index },
+   {  4199, TestFenceNV_remap_index },
+   { 32025, AreProgramsResidentNV_remap_index },
+   { 31380, BindProgramNV_remap_index },
+   { 26263, DeleteProgramsNV_remap_index },
+   { 21732, ExecuteProgramNV_remap_index },
+   { 33534, GenProgramsNV_remap_index },
+   { 23640, GetProgramParameterdvNV_remap_index },
+   { 10552, GetProgramParameterfvNV_remap_index },
+   { 26646, GetProgramStringNV_remap_index },
+   { 24726, GetProgramivNV_remap_index },
+   { 23903, GetTrackMatrixivNV_remap_index },
+   { 26440, GetVertexAttribPointervNV_remap_index },
+   { 25021, GetVertexAttribdvNV_remap_index },
+   {  9327, GetVertexAttribfvNV_remap_index },
+   { 18693, GetVertexAttribivNV_remap_index },
+   { 19546, IsProgramNV_remap_index },
+   {  9410, LoadProgramNV_remap_index },
+   { 28199, ProgramParameters4dvNV_remap_index },
+   { 24656, ProgramParameters4fvNV_remap_index },
+   { 20993, RequestResidentProgramsNV_remap_index },
+   { 30876, TrackMatrixNV_remap_index },
+   { 32627, VertexAttrib1dNV_remap_index },
+   { 13670, VertexAttrib1dvNV_remap_index },
+   { 28804, VertexAttrib1fNV_remap_index },
+   {  2415, VertexAttrib1fvNV_remap_index },
+   { 31149, VertexAttrib1sNV_remap_index },
+   { 15185, VertexAttrib1svNV_remap_index },
+   {  4895, VertexAttrib2dNV_remap_index },
+   { 13563, VertexAttrib2dvNV_remap_index },
+   { 20448, VertexAttrib2fNV_remap_index },
+   { 13129, VertexAttrib2fvNV_remap_index },
+   {  6045, VertexAttrib2sNV_remap_index },
+   { 19159, VertexAttrib2svNV_remap_index },
+   { 11323, VertexAttrib3dNV_remap_index },
+   { 32275, VertexAttrib3dvNV_remap_index },
+   { 10364, VertexAttrib3fNV_remap_index },
+   { 25048, VertexAttrib3fvNV_remap_index },
+   { 22430, VertexAttrib3sNV_remap_index },
+   { 23930, VertexAttrib3svNV_remap_index },
+   { 29272, VertexAttrib4dNV_remap_index },
+   { 33571, VertexAttrib4dvNV_remap_index },
+   {  4488, VertexAttrib4fNV_remap_index },
+   {  9460, VertexAttrib4fvNV_remap_index },
+   { 27122, VertexAttrib4sNV_remap_index },
+   {  1409, VertexAttrib4svNV_remap_index },
+   {  5053, VertexAttrib4ubNV_remap_index },
+   {   778, VertexAttrib4ubvNV_remap_index },
+   { 21912, VertexAttribPointerNV_remap_index },
+   {  2267, VertexAttribs1dvNV_remap_index },
+   { 26528, VertexAttribs1fvNV_remap_index },
+   { 33371, VertexAttribs1svNV_remap_index },
+   { 10389, VertexAttribs2dvNV_remap_index },
+   { 25655, VertexAttribs2fvNV_remap_index },
+   { 17788, VertexAttribs2svNV_remap_index },
+   {  5297, VertexAttribs3dvNV_remap_index },
+   {  2147, VertexAttribs3fvNV_remap_index },
+   { 30279, VertexAttribs3svNV_remap_index },
+   { 27212, VertexAttribs4dvNV_remap_index },
+   {  5369, VertexAttribs4fvNV_remap_index },
+   { 33158, VertexAttribs4svNV_remap_index },
+   { 30027, VertexAttribs4ubvNV_remap_index },
+   { 27282, GetTexBumpParameterfvATI_remap_index },
+   { 33412, GetTexBumpParameterivATI_remap_index },
+   { 18803, TexBumpParameterfvATI_remap_index },
+   { 20864, TexBumpParameterivATI_remap_index },
+   { 15731, AlphaFragmentOp1ATI_remap_index },
+   { 25946, AlphaFragmentOp2ATI_remap_index },
+   { 24964, AlphaFragmentOp3ATI_remap_index },
+   { 30206, BeginFragmentShaderATI_remap_index },
+   { 31579, BindFragmentShaderATI_remap_index },
+   { 24059, ColorFragmentOp1ATI_remap_index },
+   {  4366, ColorFragmentOp2ATI_remap_index },
+   { 31920, ColorFragmentOp3ATI_remap_index },
+   {  5535, DeleteFragmentShaderATI_remap_index },
+   { 33595, EndFragmentShaderATI_remap_index },
+   { 32841, GenFragmentShadersATI_remap_index },
+   { 25809, PassTexCoordATI_remap_index },
+   {  7028, SampleMapATI_remap_index },
+   { 27393, SetFragmentShaderConstantATI_remap_index },
+   {   363, PointParameteriNV_remap_index },
+   { 14311, PointParameterivNV_remap_index },
+   { 29111, ActiveStencilFaceEXT_remap_index },
+   { 27839, BindVertexArrayAPPLE_remap_index },
+   {  2737, DeleteVertexArraysAPPLE_remap_index },
+   { 18229, GenVertexArraysAPPLE_remap_index },
+   { 23705, IsVertexArrayAPPLE_remap_index },
+   {   819, GetProgramNamedParameterdvNV_remap_index },
+   {  3562, GetProgramNamedParameterfvNV_remap_index },
+   { 27313, ProgramNamedParameter4dNV_remap_index },
+   { 14685, ProgramNamedParameter4dvNV_remap_index },
+   {  8943, ProgramNamedParameter4fNV_remap_index },
+   { 11814, ProgramNamedParameter4fvNV_remap_index },
+   { 17127, PrimitiveRestartIndexNV_remap_index },
+   { 31069, PrimitiveRestartNV_remap_index },
+   { 24635, DepthBoundsEXT_remap_index },
+   {  1159, BlendEquationSeparateEXT_remap_index },
+   { 14886, BindFramebufferEXT_remap_index },
+   { 26039, BindRenderbufferEXT_remap_index },
+   {  9707, CheckFramebufferStatusEXT_remap_index },
+   { 22956, DeleteFramebuffersEXT_remap_index },
+   { 32177, DeleteRenderbuffersEXT_remap_index },
+   { 13587, FramebufferRenderbufferEXT_remap_index },
+   { 13776, FramebufferTexture1DEXT_remap_index },
+   { 11608, FramebufferTexture2DEXT_remap_index },
+   { 11228, FramebufferTexture3DEXT_remap_index },
+   { 23571, GenFramebuffersEXT_remap_index },
+   { 17653, GenRenderbuffersEXT_remap_index },
+   {  6764, GenerateMipmapEXT_remap_index },
+   { 22005, GetFramebufferAttachmentParameterivEXT_remap_index },
+   { 32747, GetRenderbufferParameterivEXT_remap_index },
+   { 20744, IsFramebufferEXT_remap_index },
+   { 33494, IsRenderbufferEXT_remap_index },
+   {  8218, RenderbufferStorageEXT_remap_index },
+   {   695, BlitFramebufferEXT_remap_index },
+   { 14471, BufferParameteriAPPLE_remap_index },
+   { 19578, FlushMappedBufferRangeAPPLE_remap_index },
+   {  1815, BindFragDataLocationEXT_remap_index },
+   { 24748, GetFragDataLocationEXT_remap_index },
+   { 10667, GetUniformuivEXT_remap_index },
+   {  2933, GetVertexAttribIivEXT_remap_index },
+   {  4216, GetVertexAttribIuivEXT_remap_index },
+   { 12086, Uniform1uiEXT_remap_index },
+   { 28284, Uniform1uivEXT_remap_index },
+   { 22526, Uniform2uiEXT_remap_index },
+   {  4330, Uniform2uivEXT_remap_index },
+   { 29551, Uniform3uiEXT_remap_index },
+   { 14832, Uniform3uivEXT_remap_index },
+   {  3486, Uniform4uiEXT_remap_index },
+   {  8719, Uniform4uivEXT_remap_index },
+   { 18608, VertexAttribI1iEXT_remap_index },
+   {   965, VertexAttribI1ivEXT_remap_index },
+   {  2516, VertexAttribI1uiEXT_remap_index },
+   { 12857, VertexAttribI1uivEXT_remap_index },
    {    81, VertexAttribI2iEXT_remap_index },
-   { 23835, VertexAttribI2ivEXT_remap_index },
-   {  5302, VertexAttribI2uiEXT_remap_index },
-   {  4715, VertexAttribI2uivEXT_remap_index },
-   { 26523, VertexAttribI3iEXT_remap_index },
-   { 30499, VertexAttribI3ivEXT_remap_index },
-   {  3379, VertexAttribI3uiEXT_remap_index },
-   { 30395, VertexAttribI3uivEXT_remap_index },
-   { 21948, VertexAttribI4bvEXT_remap_index },
-   { 14622, VertexAttribI4iEXT_remap_index },
-   { 32025, VertexAttribI4ivEXT_remap_index },
-   { 13434, VertexAttribI4svEXT_remap_index },
-   { 16484, VertexAttribI4ubvEXT_remap_index },
-   { 16183, VertexAttribI4uiEXT_remap_index },
-   {  5448, VertexAttribI4uivEXT_remap_index },
-   { 11317, VertexAttribI4usvEXT_remap_index },
-   { 18486, VertexAttribIPointerEXT_remap_index },
-   {  3066, FramebufferTextureLayerEXT_remap_index },
-   {  5172, ColorMaskIndexedEXT_remap_index },
-   { 18903, DisableIndexedEXT_remap_index },
-   { 26568, EnableIndexedEXT_remap_index },
-   { 21652, GetBooleanIndexedvEXT_remap_index },
-   { 10928, GetIntegerIndexedvEXT_remap_index },
-   { 22696, IsEnabledIndexedEXT_remap_index },
-   { 22596, ClearColorIiEXT_remap_index },
-   {  3475, ClearColorIuiEXT_remap_index },
-   {  9843, GetTexParameterIivEXT_remap_index },
-   {  5895, GetTexParameterIuivEXT_remap_index },
-   {  3022, TexParameterIivEXT_remap_index },
-   { 26390, TexParameterIuivEXT_remap_index },
-   {  4583, BeginConditionalRenderNV_remap_index },
-   { 25378, EndConditionalRenderNV_remap_index },
-   {  9280, BeginTransformFeedbackEXT_remap_index },
-   { 18938, BindBufferBaseEXT_remap_index },
-   { 18797, BindBufferOffsetEXT_remap_index },
-   { 12247, BindBufferRangeEXT_remap_index },
-   { 14244, EndTransformFeedbackEXT_remap_index },
-   { 10791, GetTransformFeedbackVaryingEXT_remap_index },
-   { 20741, TransformFeedbackVaryingsEXT_remap_index },
-   { 29551, ProvokingVertexEXT_remap_index },
-   { 10739, GetTexParameterPointervAPPLE_remap_index },
-   {  5034, TextureRangeAPPLE_remap_index },
-   { 11606, GetObjectParameterivAPPLE_remap_index },
-   { 19863, ObjectPurgeableAPPLE_remap_index },
-   {  5689, ObjectUnpurgeableAPPLE_remap_index },
-   { 17247, ActiveProgramEXT_remap_index },
-   { 17218, CreateShaderProgramEXT_remap_index },
-   { 28569, UseShaderProgramEXT_remap_index },
-   { 16463, TextureBarrierNV_remap_index },
-   { 28810, StencilFuncSeparateATI_remap_index },
-   { 18090, ProgramEnvParameters4fvEXT_remap_index },
-   { 17112, ProgramLocalParameters4fvEXT_remap_index },
-   { 14112, GetQueryObjecti64vEXT_remap_index },
-   { 10341, GetQueryObjectui64vEXT_remap_index },
-   { 23792, EGLImageTargetRenderbufferStorageOES_remap_index },
-   { 12126, EGLImageTargetTexture2DOES_remap_index },
+   { 24171, VertexAttribI2ivEXT_remap_index },
+   {  5323, VertexAttribI2uiEXT_remap_index },
+   {  4749, VertexAttribI2uivEXT_remap_index },
+   { 26914, VertexAttribI3iEXT_remap_index },
+   { 25373, VertexAttribI3ivEXT_remap_index },
+   {  3340, VertexAttribI3uiEXT_remap_index },
+   { 30772, VertexAttribI3uivEXT_remap_index },
+   { 22256, VertexAttribI4bvEXT_remap_index },
+   { 14764, VertexAttribI4iEXT_remap_index },
+   { 32446, VertexAttribI4ivEXT_remap_index },
+   { 13490, VertexAttribI4svEXT_remap_index },
+   { 16679, VertexAttribI4ubvEXT_remap_index },
+   { 16325, VertexAttribI4uiEXT_remap_index },
+   {  5469, VertexAttribI4uivEXT_remap_index },
+   { 11391, VertexAttribI4usvEXT_remap_index },
+   { 18747, VertexAttribIPointerEXT_remap_index },
+   {  3027, FramebufferTextureLayerEXT_remap_index },
+   {  5745, ColorMaskIndexedEXT_remap_index },
+   { 19183, DisableIndexedEXT_remap_index },
+   { 26959, EnableIndexedEXT_remap_index },
+   { 21960, GetBooleanIndexedvEXT_remap_index },
+   { 11002, GetIntegerIndexedvEXT_remap_index },
+   { 23032, IsEnabledIndexedEXT_remap_index },
+   { 22932, ClearColorIiEXT_remap_index },
+   {  3436, ClearColorIuiEXT_remap_index },
+   {  9917, GetTexParameterIivEXT_remap_index },
+   {  5993, GetTexParameterIuivEXT_remap_index },
+   {  2983, TexParameterIivEXT_remap_index },
+   { 26781, TexParameterIuivEXT_remap_index },
+   {  4617, BeginConditionalRenderNV_remap_index },
+   { 25759, EndConditionalRenderNV_remap_index },
+   {  9354, BeginTransformFeedbackEXT_remap_index },
+   { 19218, BindBufferBaseEXT_remap_index },
+   { 19077, BindBufferOffsetEXT_remap_index },
+   { 12303, BindBufferRangeEXT_remap_index },
+   { 14386, EndTransformFeedbackEXT_remap_index },
+   { 10865, GetTransformFeedbackVaryingEXT_remap_index },
+   { 21049, TransformFeedbackVaryingsEXT_remap_index },
+   { 29928, ProvokingVertexEXT_remap_index },
+   { 10813, GetTexParameterPointervAPPLE_remap_index },
+   {  5097, TextureRangeAPPLE_remap_index },
+   { 11680, GetObjectParameterivAPPLE_remap_index },
+   { 20171, ObjectPurgeableAPPLE_remap_index },
+   {  5787, ObjectUnpurgeableAPPLE_remap_index },
+   { 17475, ActiveProgramEXT_remap_index },
+   { 17446, CreateShaderProgramEXT_remap_index },
+   { 28896, UseShaderProgramEXT_remap_index },
+   { 16632, TextureBarrierNV_remap_index },
+   { 29137, StencilFuncSeparateATI_remap_index },
+   {  5658, ProgramEnvParameters4fvEXT_remap_index },
+   { 17340, ProgramLocalParameters4fvEXT_remap_index },
+   { 14239, GetQueryObjecti64vEXT_remap_index },
+   { 10415, GetQueryObjectui64vEXT_remap_index },
+   { 24128, EGLImageTargetRenderbufferStorageOES_remap_index },
+   { 12192, EGLImageTargetTexture2DOES_remap_index },
    {    -1, -1 }
 };
 
 /* these functions are in the ABI, but have alternative names */
 static const struct gl_function_remap MESA_alt_functions[] = {
    /* from GL_EXT_blend_color */
-   {  2694, _gloffset_BlendColor },
+   {  2655, _gloffset_BlendColor },
    /* from GL_EXT_blend_minmax */
-   { 11211, _gloffset_BlendEquation },
+   { 11285, _gloffset_BlendEquation },
    /* from GL_EXT_color_subtable */
-   { 17010, _gloffset_ColorSubTable },
-   { 31688, _gloffset_CopyColorSubTable },
+   { 17238, _gloffset_ColorSubTable },
+   { 32109, _gloffset_CopyColorSubTable },
    /* from GL_EXT_convolution */
-   {   296, _gloffset_ConvolutionFilter1D },
-   {  2493, _gloffset_CopyConvolutionFilter1D },
-   {  4097, _gloffset_GetConvolutionParameteriv },
-   {  8493, _gloffset_ConvolutionFilter2D },
-   {  8695, _gloffset_ConvolutionParameteriv },
-   {  9155, _gloffset_ConvolutionParameterfv },
-   { 20584, _gloffset_GetSeparableFilter },
-   { 24067, _gloffset_SeparableFilter2D },
-   { 24930, _gloffset_ConvolutionParameteri },
-   { 25053, _gloffset_ConvolutionParameterf },
-   { 26757, _gloffset_GetConvolutionParameterfv },
-   { 27646, _gloffset_GetConvolutionFilter },
-   { 30091, _gloffset_CopyConvolutionFilter2D },
+   {   257, _gloffset_ConvolutionFilter1D },
+   {  2454, _gloffset_CopyConvolutionFilter1D },
+   {  4058, _gloffset_GetConvolutionParameteriv },
+   {  8567, _gloffset_ConvolutionFilter2D },
+   {  8769, _gloffset_ConvolutionParameteriv },
+   {  9229, _gloffset_ConvolutionParameterfv },
+   { 20892, _gloffset_GetSeparableFilter },
+   { 24403, _gloffset_SeparableFilter2D },
+   { 25266, _gloffset_ConvolutionParameteri },
+   { 25434, _gloffset_ConvolutionParameterf },
+   { 27148, _gloffset_GetConvolutionParameterfv },
+   { 28005, _gloffset_GetConvolutionFilter },
+   { 30468, _gloffset_CopyConvolutionFilter2D },
    /* from GL_EXT_copy_texture */
-   { 15103, _gloffset_CopyTexSubImage3D },
-   { 16697, _gloffset_CopyTexImage2D },
-   { 24538, _gloffset_CopyTexImage1D },
-   { 27327, _gloffset_CopyTexSubImage2D },
-   { 29729, _gloffset_CopyTexSubImage1D },
+   { 15245, _gloffset_CopyTexSubImage3D },
+   { 16925, _gloffset_CopyTexImage2D },
+   { 24874, _gloffset_CopyTexImage1D },
+   { 27686, _gloffset_CopyTexSubImage2D },
+   { 30106, _gloffset_CopyTexSubImage1D },
    /* from GL_EXT_draw_range_elements */
-   {  9492, _gloffset_DrawRangeElements },
+   {  9566, _gloffset_DrawRangeElements },
    /* from GL_EXT_histogram */
-   {   895, _gloffset_Histogram },
-   {  3561, _gloffset_ResetHistogram },
-   {  9989, _gloffset_GetMinmax },
-   { 15437, _gloffset_GetHistogramParameterfv },
-   { 24463, _gloffset_GetMinmaxParameteriv },
-   { 26647, _gloffset_ResetMinmax },
-   { 27543, _gloffset_GetHistogramParameteriv },
-   { 28744, _gloffset_GetHistogram },
-   { 31313, _gloffset_Minmax },
-   { 32853, _gloffset_GetMinmaxParameterfv },
+   {   856, _gloffset_Histogram },
+   {  3522, _gloffset_ResetHistogram },
+   { 10063, _gloffset_GetMinmax },
+   { 15579, _gloffset_GetHistogramParameterfv },
+   { 24799, _gloffset_GetMinmaxParameteriv },
+   { 27038, _gloffset_ResetMinmax },
+   { 27902, _gloffset_GetHistogramParameteriv },
+   { 29071, _gloffset_GetHistogram },
+   { 31695, _gloffset_Minmax },
+   { 33241, _gloffset_GetMinmaxParameterfv },
    /* from GL_EXT_paletted_texture */
-   {  8355, _gloffset_ColorTable },
-   { 15283, _gloffset_GetColorTable },
-   { 22982, _gloffset_GetColorTableParameterfv },
-   { 25109, _gloffset_GetColorTableParameteriv },
+   {  8429, _gloffset_ColorTable },
+   { 15425, _gloffset_GetColorTable },
+   { 23318, _gloffset_GetColorTableParameterfv },
+   { 25490, _gloffset_GetColorTableParameteriv },
    /* from GL_EXT_subtexture */
-   {  7076, _gloffset_TexSubImage1D },
-   { 10666, _gloffset_TexSubImage2D },
+   {  7174, _gloffset_TexSubImage1D },
+   { 10740, _gloffset_TexSubImage2D },
    /* from GL_EXT_texture3D */
-   {  1813, _gloffset_TexImage3D },
-   { 22751, _gloffset_TexSubImage3D },
+   {  1774, _gloffset_TexImage3D },
+   { 23087, _gloffset_TexSubImage3D },
    /* from GL_EXT_texture_object */
-   {  3329, _gloffset_PrioritizeTextures },
-   {  7525, _gloffset_AreTexturesResident },
-   { 13638, _gloffset_GenTextures },
-   { 15769, _gloffset_DeleteTextures },
-   { 19569, _gloffset_IsTexture },
-   { 29794, _gloffset_BindTexture },
+   {  3290, _gloffset_PrioritizeTextures },
+   {  7623, _gloffset_AreTexturesResident },
+   { 13694, _gloffset_GenTextures },
+   { 15911, _gloffset_DeleteTextures },
+   { 19859, _gloffset_IsTexture },
+   { 30171, _gloffset_BindTexture },
    /* from GL_EXT_vertex_array */
-   { 24239, _gloffset_ArrayElement },
-   { 30901, _gloffset_GetPointerv },
-   { 32480, _gloffset_DrawArrays },
+   { 24575, _gloffset_ArrayElement },
+   { 31283, _gloffset_GetPointerv },
+   { 32868, _gloffset_DrawArrays },
    /* from GL_SGI_color_table */
-   {  7643, _gloffset_ColorTableParameteriv },
-   {  8355, _gloffset_ColorTable },
-   { 15283, _gloffset_GetColorTable },
-   { 15393, _gloffset_CopyColorTable },
-   { 19430, _gloffset_ColorTableParameterfv },
-   { 22982, _gloffset_GetColorTableParameterfv },
-   { 25109, _gloffset_GetColorTableParameteriv },
+   {  7741, _gloffset_ColorTableParameteriv },
+   {  8429, _gloffset_ColorTable },
+   { 15425, _gloffset_GetColorTable },
+   { 15535, _gloffset_CopyColorTable },
+   { 19720, _gloffset_ColorTableParameterfv },
+   { 23318, _gloffset_GetColorTableParameterfv },
+   { 25490, _gloffset_GetColorTableParameteriv },
    /* from GL_VERSION_1_3 */
-   {   464, _gloffset_MultiTexCoord3sARB },
-   {   696, _gloffset_ActiveTextureARB },
-   {  4234, _gloffset_MultiTexCoord1fvARB },
-   {  6142, _gloffset_MultiTexCoord3dARB },
-   {  6187, _gloffset_MultiTexCoord2iARB },
-   {  6311, _gloffset_MultiTexCoord2svARB },
-   {  8311, _gloffset_MultiTexCoord2fARB },
-   { 10371, _gloffset_MultiTexCoord3fvARB },
-   { 10973, _gloffset_MultiTexCoord4sARB },
-   { 11654, _gloffset_MultiTexCoord2dvARB },
-   { 12069, _gloffset_MultiTexCoord1svARB },
-   { 12480, _gloffset_MultiTexCoord3svARB },
-   { 12541, _gloffset_MultiTexCoord4iARB },
-   { 13342, _gloffset_MultiTexCoord3iARB },
-   { 14141, _gloffset_MultiTexCoord1dARB },
-   { 14358, _gloffset_MultiTexCoord3dvARB },
-   { 15637, _gloffset_MultiTexCoord3ivARB },
-   { 15682, _gloffset_MultiTexCoord2sARB },
-   { 17067, _gloffset_MultiTexCoord4ivARB },
-   { 19080, _gloffset_ClientActiveTextureARB },
-   { 21380, _gloffset_MultiTexCoord2dARB },
-   { 21817, _gloffset_MultiTexCoord4dvARB },
-   { 22173, _gloffset_MultiTexCoord4fvARB },
-   { 23123, _gloffset_MultiTexCoord3fARB },
-   { 25693, _gloffset_MultiTexCoord4dARB },
-   { 25959, _gloffset_MultiTexCoord1sARB },
-   { 26163, _gloffset_MultiTexCoord1dvARB },
-   { 27171, _gloffset_MultiTexCoord1ivARB },
-   { 27264, _gloffset_MultiTexCoord2ivARB },
-   { 27603, _gloffset_MultiTexCoord1iARB },
-   { 29019, _gloffset_MultiTexCoord4svARB },
-   { 29593, _gloffset_MultiTexCoord1fARB },
-   { 29856, _gloffset_MultiTexCoord4fARB },
-   { 32314, _gloffset_MultiTexCoord2fvARB },
+   {   425, _gloffset_MultiTexCoord3sARB },
+   {   657, _gloffset_ActiveTextureARB },
+   {  4268, _gloffset_MultiTexCoord1fvARB },
+   {  6240, _gloffset_MultiTexCoord3dARB },
+   {  6285, _gloffset_MultiTexCoord2iARB },
+   {  6409, _gloffset_MultiTexCoord2svARB },
+   {  8385, _gloffset_MultiTexCoord2fARB },
+   { 10445, _gloffset_MultiTexCoord3fvARB },
+   { 11047, _gloffset_MultiTexCoord4sARB },
+   { 11728, _gloffset_MultiTexCoord2dvARB },
+   { 12135, _gloffset_MultiTexCoord1svARB },
+   { 12536, _gloffset_MultiTexCoord3svARB },
+   { 12597, _gloffset_MultiTexCoord4iARB },
+   { 13398, _gloffset_MultiTexCoord3iARB },
+   { 14268, _gloffset_MultiTexCoord1dARB },
+   { 14500, _gloffset_MultiTexCoord3dvARB },
+   { 15779, _gloffset_MultiTexCoord3ivARB },
+   { 15824, _gloffset_MultiTexCoord2sARB },
+   { 17295, _gloffset_MultiTexCoord4ivARB },
+   { 19360, _gloffset_ClientActiveTextureARB },
+   { 21688, _gloffset_MultiTexCoord2dARB },
+   { 22125, _gloffset_MultiTexCoord4dvARB },
+   { 22481, _gloffset_MultiTexCoord4fvARB },
+   { 23459, _gloffset_MultiTexCoord3fARB },
+   { 26084, _gloffset_MultiTexCoord4dARB },
+   { 26350, _gloffset_MultiTexCoord1sARB },
+   { 26554, _gloffset_MultiTexCoord1dvARB },
+   { 27530, _gloffset_MultiTexCoord1ivARB },
+   { 27623, _gloffset_MultiTexCoord2ivARB },
+   { 27962, _gloffset_MultiTexCoord1iARB },
+   { 29346, _gloffset_MultiTexCoord4svARB },
+   { 29970, _gloffset_MultiTexCoord1fARB },
+   { 30233, _gloffset_MultiTexCoord4fARB },
+   { 32702, _gloffset_MultiTexCoord2fvARB },
    {    -1, -1 }
 };
 
@@ -5384,7 +5464,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[] = {
-   {  9213, -1 }, /* TbufferMask3DFX */
+   {  9287, -1 }, /* TbufferMask3DFX */
    {    -1, -1 }
 };
 #endif
@@ -5424,6 +5504,13 @@ static const struct gl_function_remap GL_ARB_ES2_compatibility_functions[] = {
 };
 #endif
 
+#if defined(need_GL_ARB_color_buffer_float)
+/* functions defined in MESA_remap_table_functions are excluded */
+static const struct gl_function_remap GL_ARB_color_buffer_float_functions[] = {
+   {    -1, -1 }
+};
+#endif
+
 #if defined(need_GL_ARB_copy_buffer)
 /* functions defined in MESA_remap_table_functions are excluded */
 static const struct gl_function_remap GL_ARB_copy_buffer_functions[] = {
@@ -5469,7 +5556,7 @@ static const struct gl_function_remap GL_ARB_framebuffer_object_functions[] = {
 #if defined(need_GL_ARB_geometry_shader4)
 /* functions defined in MESA_remap_table_functions are excluded */
 static const struct gl_function_remap GL_ARB_geometry_shader4_functions[] = {
-   { 12444, -1 }, /* FramebufferTextureLayer */
+   { 12500, -1 }, /* FramebufferTextureLayer */
    {    -1, -1 }
 };
 #endif
@@ -5490,11 +5577,11 @@ 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[] = {
-   {  3812, -1 }, /* MatrixIndexusvARB */
-   { 13163, -1 }, /* MatrixIndexuivARB */
-   { 14513, -1 }, /* MatrixIndexPointerARB */
-   { 19818, -1 }, /* CurrentPaletteMatrixARB */
-   { 22867, -1 }, /* MatrixIndexubvARB */
+   {  3773, -1 }, /* MatrixIndexusvARB */
+   { 13219, -1 }, /* MatrixIndexuivARB */
+   { 14655, -1 }, /* MatrixIndexPointerARB */
+   { 20126, -1 }, /* CurrentPaletteMatrixARB */
+   { 23203, -1 }, /* MatrixIndexubvARB */
    {    -1, -1 }
 };
 #endif
@@ -5527,6 +5614,13 @@ static const struct gl_function_remap GL_ARB_provoking_vertex_functions[] = {
 };
 #endif
 
+#if defined(need_GL_ARB_sampler_objects)
+/* functions defined in MESA_remap_table_functions are excluded */
+static const struct gl_function_remap GL_ARB_sampler_objects_functions[] = {
+   {    -1, -1 }
+};
+#endif
+
 #if defined(need_GL_ARB_shader_objects)
 /* functions defined in MESA_remap_table_functions are excluded */
 static const struct gl_function_remap GL_ARB_shader_objects_functions[] = {
@@ -5541,6 +5635,13 @@ static const struct gl_function_remap GL_ARB_sync_functions[] = {
 };
 #endif
 
+#if defined(need_GL_ARB_texture_buffer_object)
+/* functions defined in MESA_remap_table_functions are excluded */
+static const struct gl_function_remap GL_ARB_texture_buffer_object_functions[] = {
+   {    -1, -1 }
+};
+#endif
+
 #if defined(need_GL_ARB_texture_compression)
 /* functions defined in MESA_remap_table_functions are excluded */
 static const struct gl_function_remap GL_ARB_texture_compression_functions[] = {
@@ -5571,16 +5672,16 @@ 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[] = {
-   {  2435, -1 }, /* WeightubvARB */
-   {  6554, -1 }, /* WeightivARB */
-   { 11076, -1 }, /* WeightPointerARB */
-   { 13898, -1 }, /* WeightfvARB */
-   { 17586, -1 }, /* WeightbvARB */
-   { 21048, -1 }, /* WeightusvARB */
-   { 23993, -1 }, /* VertexBlendARB */
-   { 29677, -1 }, /* WeightsvARB */
-   { 31738, -1 }, /* WeightdvARB */
-   { 32514, -1 }, /* WeightuivARB */
+   {  2396, -1 }, /* WeightubvARB */
+   {  6652, -1 }, /* WeightivARB */
+   { 11150, -1 }, /* WeightPointerARB */
+   { 13986, -1 }, /* WeightfvARB */
+   { 17814, -1 }, /* WeightbvARB */
+   { 21356, -1 }, /* WeightusvARB */
+   { 24329, -1 }, /* VertexBlendARB */
+   { 30054, -1 }, /* WeightsvARB */
+   { 32159, -1 }, /* WeightdvARB */
+   { 32902, -1 }, /* WeightuivARB */
    {    -1, -1 }
 };
 #endif
@@ -5650,7 +5751,7 @@ static const struct gl_function_remap GL_ATI_separate_stencil_functions[] = {
 
 #if defined(need_GL_EXT_blend_color)
 static const struct gl_function_remap GL_EXT_blend_color_functions[] = {
-   {  2694, _gloffset_BlendColor },
+   {  2655, _gloffset_BlendColor },
    {    -1, -1 }
 };
 #endif
@@ -5671,15 +5772,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[] = {
-   { 11211, _gloffset_BlendEquation },
+   { 11285, _gloffset_BlendEquation },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_color_subtable)
 static const struct gl_function_remap GL_EXT_color_subtable_functions[] = {
-   { 17010, _gloffset_ColorSubTable },
-   { 31688, _gloffset_CopyColorSubTable },
+   { 17238, _gloffset_ColorSubTable },
+   { 32109, _gloffset_CopyColorSubTable },
    {    -1, -1 }
 };
 #endif
@@ -5693,66 +5794,66 @@ static const struct gl_function_remap GL_EXT_compiled_vertex_array_functions[] =
 
 #if defined(need_GL_EXT_convolution)
 static const struct gl_function_remap GL_EXT_convolution_functions[] = {
-   {   296, _gloffset_ConvolutionFilter1D },
-   {  2493, _gloffset_CopyConvolutionFilter1D },
-   {  4097, _gloffset_GetConvolutionParameteriv },
-   {  8493, _gloffset_ConvolutionFilter2D },
-   {  8695, _gloffset_ConvolutionParameteriv },
-   {  9155, _gloffset_ConvolutionParameterfv },
-   { 20584, _gloffset_GetSeparableFilter },
-   { 24067, _gloffset_SeparableFilter2D },
-   { 24930, _gloffset_ConvolutionParameteri },
-   { 25053, _gloffset_ConvolutionParameterf },
-   { 26757, _gloffset_GetConvolutionParameterfv },
-   { 27646, _gloffset_GetConvolutionFilter },
-   { 30091, _gloffset_CopyConvolutionFilter2D },
+   {   257, _gloffset_ConvolutionFilter1D },
+   {  2454, _gloffset_CopyConvolutionFilter1D },
+   {  4058, _gloffset_GetConvolutionParameteriv },
+   {  8567, _gloffset_ConvolutionFilter2D },
+   {  8769, _gloffset_ConvolutionParameteriv },
+   {  9229, _gloffset_ConvolutionParameterfv },
+   { 20892, _gloffset_GetSeparableFilter },
+   { 24403, _gloffset_SeparableFilter2D },
+   { 25266, _gloffset_ConvolutionParameteri },
+   { 25434, _gloffset_ConvolutionParameterf },
+   { 27148, _gloffset_GetConvolutionParameterfv },
+   { 28005, _gloffset_GetConvolutionFilter },
+   { 30468, _gloffset_CopyConvolutionFilter2D },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_coordinate_frame)
 static const struct gl_function_remap GL_EXT_coordinate_frame_functions[] = {
-   { 10510, -1 }, /* TangentPointerEXT */
-   { 12599, -1 }, /* Binormal3ivEXT */
-   { 13295, -1 }, /* Tangent3sEXT */
-   { 14578, -1 }, /* Tangent3fvEXT */
-   { 18778, -1 }, /* Tangent3dvEXT */
-   { 19516, -1 }, /* Binormal3bvEXT */
-   { 20637, -1 }, /* Binormal3dEXT */
-   { 22799, -1 }, /* Tangent3fEXT */
-   { 25002, -1 }, /* Binormal3sEXT */
-   { 25470, -1 }, /* Tangent3ivEXT */
-   { 25489, -1 }, /* Tangent3dEXT */
-   { 26436, -1 }, /* Binormal3svEXT */
-   { 27069, -1 }, /* Binormal3fEXT */
-   { 27957, -1 }, /* Binormal3dvEXT */
-   { 29276, -1 }, /* Tangent3iEXT */
-   { 30376, -1 }, /* Tangent3bvEXT */
-   { 30936, -1 }, /* Tangent3bEXT */
-   { 31461, -1 }, /* Binormal3fvEXT */
-   { 32213, -1 }, /* BinormalPointerEXT */
-   { 32618, -1 }, /* Tangent3svEXT */
-   { 33055, -1 }, /* Binormal3bEXT */
-   { 33232, -1 }, /* Binormal3iEXT */
+   { 10584, -1 }, /* TangentPointerEXT */
+   { 12655, -1 }, /* Binormal3ivEXT */
+   { 13351, -1 }, /* Tangent3sEXT */
+   { 14720, -1 }, /* Tangent3fvEXT */
+   { 18831, -1 }, /* Tangent3ivEXT */
+   { 19058, -1 }, /* Tangent3dvEXT */
+   { 19806, -1 }, /* Binormal3bvEXT */
+   { 20945, -1 }, /* Binormal3dEXT */
+   { 23135, -1 }, /* Tangent3fEXT */
+   { 25338, -1 }, /* Binormal3sEXT */
+   { 25880, -1 }, /* Tangent3dEXT */
+   { 26827, -1 }, /* Binormal3svEXT */
+   { 27428, -1 }, /* Binormal3fEXT */
+   { 28336, -1 }, /* Binormal3dvEXT */
+   { 29603, -1 }, /* Tangent3iEXT */
+   { 30753, -1 }, /* Tangent3bvEXT */
+   { 31318, -1 }, /* Tangent3bEXT */
+   { 31882, -1 }, /* Binormal3fvEXT */
+   { 32601, -1 }, /* BinormalPointerEXT */
+   { 33006, -1 }, /* Tangent3svEXT */
+   { 33443, -1 }, /* Binormal3bEXT */
+   { 33620, -1 }, /* Binormal3iEXT */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_copy_texture)
 static const struct gl_function_remap GL_EXT_copy_texture_functions[] = {
-   { 15103, _gloffset_CopyTexSubImage3D },
-   { 16697, _gloffset_CopyTexImage2D },
-   { 24538, _gloffset_CopyTexImage1D },
-   { 27327, _gloffset_CopyTexSubImage2D },
-   { 29729, _gloffset_CopyTexSubImage1D },
+   { 15245, _gloffset_CopyTexSubImage3D },
+   { 16925, _gloffset_CopyTexImage2D },
+   { 24874, _gloffset_CopyTexImage1D },
+   { 27686, _gloffset_CopyTexSubImage2D },
+   { 30106, _gloffset_CopyTexSubImage1D },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_cull_vertex)
 static const struct gl_function_remap GL_EXT_cull_vertex_functions[] = {
-   {  8844, -1 }, /* CullParameterdvEXT */
-   { 11699, -1 }, /* CullParameterfvEXT */
+   {  8918, -1 }, /* CullParameterdvEXT */
+   { 11773, -1 }, /* CullParameterfvEXT */
    {    -1, -1 }
 };
 #endif
@@ -5780,7 +5881,7 @@ static const struct gl_function_remap GL_EXT_draw_instanced_functions[] = {
 
 #if defined(need_GL_EXT_draw_range_elements)
 static const struct gl_function_remap GL_EXT_draw_range_elements_functions[] = {
-   {  9492, _gloffset_DrawRangeElements },
+   {  9566, _gloffset_DrawRangeElements },
    {    -1, -1 }
 };
 #endif
@@ -5829,39 +5930,39 @@ static const struct gl_function_remap GL_EXT_gpu_shader4_functions[] = {
 
 #if defined(need_GL_EXT_histogram)
 static const struct gl_function_remap GL_EXT_histogram_functions[] = {
-   {   895, _gloffset_Histogram },
-   {  3561, _gloffset_ResetHistogram },
-   {  9989, _gloffset_GetMinmax },
-   { 15437, _gloffset_GetHistogramParameterfv },
-   { 24463, _gloffset_GetMinmaxParameteriv },
-   { 26647, _gloffset_ResetMinmax },
-   { 27543, _gloffset_GetHistogramParameteriv },
-   { 28744, _gloffset_GetHistogram },
-   { 31313, _gloffset_Minmax },
-   { 32853, _gloffset_GetMinmaxParameterfv },
+   {   856, _gloffset_Histogram },
+   {  3522, _gloffset_ResetHistogram },
+   { 10063, _gloffset_GetMinmax },
+   { 15579, _gloffset_GetHistogramParameterfv },
+   { 24799, _gloffset_GetMinmaxParameteriv },
+   { 27038, _gloffset_ResetMinmax },
+   { 27902, _gloffset_GetHistogramParameteriv },
+   { 29071, _gloffset_GetHistogram },
+   { 31695, _gloffset_Minmax },
+   { 33241, _gloffset_GetMinmaxParameterfv },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_index_func)
 static const struct gl_function_remap GL_EXT_index_func_functions[] = {
-   { 11485, -1 }, /* IndexFuncEXT */
+   { 11559, -1 }, /* IndexFuncEXT */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_index_material)
 static const struct gl_function_remap GL_EXT_index_material_functions[] = {
-   { 21135, -1 }, /* IndexMaterialEXT */
+   { 21443, -1 }, /* IndexMaterialEXT */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_light_texture)
 static const struct gl_function_remap GL_EXT_light_texture_functions[] = {
-   { 26456, -1 }, /* ApplyTextureEXT */
-   { 26601, -1 }, /* TextureMaterialEXT */
-   { 26626, -1 }, /* TextureLightEXT */
+   { 26847, -1 }, /* ApplyTextureEXT */
+   { 26992, -1 }, /* TextureMaterialEXT */
+   { 27017, -1 }, /* TextureLightEXT */
    {    -1, -1 }
 };
 #endif
@@ -5882,20 +5983,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[] = {
-   {  8355, _gloffset_ColorTable },
-   { 15283, _gloffset_GetColorTable },
-   { 22982, _gloffset_GetColorTableParameterfv },
-   { 25109, _gloffset_GetColorTableParameteriv },
+   {  8429, _gloffset_ColorTable },
+   { 15425, _gloffset_GetColorTable },
+   { 23318, _gloffset_GetColorTableParameterfv },
+   { 25490, _gloffset_GetColorTableParameteriv },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_pixel_transform)
 static const struct gl_function_remap GL_EXT_pixel_transform_functions[] = {
-   { 21782, -1 }, /* PixelTransformParameterfEXT */
-   { 21862, -1 }, /* PixelTransformParameteriEXT */
-   { 30651, -1 }, /* PixelTransformParameterfvEXT */
-   { 32177, -1 }, /* PixelTransformParameterivEXT */
+   { 22090, -1 }, /* PixelTransformParameterfEXT */
+   { 22170, -1 }, /* PixelTransformParameteriEXT */
+   { 31033, -1 }, /* PixelTransformParameterfvEXT */
+   { 32565, -1 }, /* PixelTransformParameterivEXT */
    {    -1, -1 }
 };
 #endif
@@ -5944,16 +6045,16 @@ 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[] = {
-   {  7076, _gloffset_TexSubImage1D },
-   { 10666, _gloffset_TexSubImage2D },
+   {  7174, _gloffset_TexSubImage1D },
+   { 10740, _gloffset_TexSubImage2D },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_texture3D)
 static const struct gl_function_remap GL_EXT_texture3D_functions[] = {
-   {  1813, _gloffset_TexImage3D },
-   { 22751, _gloffset_TexSubImage3D },
+   {  1774, _gloffset_TexImage3D },
+   { 23087, _gloffset_TexSubImage3D },
    {    -1, -1 }
 };
 #endif
@@ -5974,19 +6075,19 @@ static const struct gl_function_remap GL_EXT_texture_integer_functions[] = {
 
 #if defined(need_GL_EXT_texture_object)
 static const struct gl_function_remap GL_EXT_texture_object_functions[] = {
-   {  3329, _gloffset_PrioritizeTextures },
-   {  7525, _gloffset_AreTexturesResident },
-   { 13638, _gloffset_GenTextures },
-   { 15769, _gloffset_DeleteTextures },
-   { 19569, _gloffset_IsTexture },
-   { 29794, _gloffset_BindTexture },
+   {  3290, _gloffset_PrioritizeTextures },
+   {  7623, _gloffset_AreTexturesResident },
+   { 13694, _gloffset_GenTextures },
+   { 15911, _gloffset_DeleteTextures },
+   { 19859, _gloffset_IsTexture },
+   { 30171, _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[] = {
-   { 13848, -1 }, /* TextureNormalEXT */
+   { 13936, -1 }, /* TextureNormalEXT */
    {    -1, -1 }
 };
 #endif
@@ -6008,30 +6109,30 @@ static const struct gl_function_remap GL_EXT_transform_feedback_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[] = {
-   { 24239, _gloffset_ArrayElement },
-   { 30901, _gloffset_GetPointerv },
-   { 32480, _gloffset_DrawArrays },
+   { 24575, _gloffset_ArrayElement },
+   { 31283, _gloffset_GetPointerv },
+   { 32868, _gloffset_DrawArrays },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_EXT_vertex_weighting)
 static const struct gl_function_remap GL_EXT_vertex_weighting_functions[] = {
-   { 19599, -1 }, /* VertexWeightfvEXT */
-   { 27012, -1 }, /* VertexWeightfEXT */
-   { 28713, -1 }, /* VertexWeightPointerEXT */
+   { 19907, -1 }, /* VertexWeightfvEXT */
+   { 27371, -1 }, /* VertexWeightfEXT */
+   { 29040, -1 }, /* VertexWeightPointerEXT */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_HP_image_transform)
 static const struct gl_function_remap GL_HP_image_transform_functions[] = {
-   {  2366, -1 }, /* GetImageTransformParameterfvHP */
-   {  3778, -1 }, /* ImageTransformParameterfHP */
-   { 10204, -1 }, /* ImageTransformParameterfvHP */
-   { 11954, -1 }, /* ImageTransformParameteriHP */
-   { 12334, -1 }, /* GetImageTransformParameterivHP */
-   { 19663, -1 }, /* ImageTransformParameterivHP */
+   {  2327, -1 }, /* GetImageTransformParameterfvHP */
+   {  3739, -1 }, /* ImageTransformParameterfHP */
+   { 10278, -1 }, /* ImageTransformParameterfvHP */
+   { 12020, -1 }, /* ImageTransformParameteriHP */
+   { 12390, -1 }, /* GetImageTransformParameterivHP */
+   { 19971, -1 }, /* ImageTransformParameterivHP */
    {    -1, -1 }
 };
 #endif
@@ -6045,14 +6146,14 @@ 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[] = {
-   {  4366, -1 }, /* SecondaryColorPointerListIBM */
-   {  6008, -1 }, /* NormalPointerListIBM */
-   {  7699, -1 }, /* FogCoordPointerListIBM */
-   {  8006, -1 }, /* VertexPointerListIBM */
-   { 11875, -1 }, /* ColorPointerListIBM */
-   { 13402, -1 }, /* TexCoordPointerListIBM */
-   { 13870, -1 }, /* IndexPointerListIBM */
-   { 32796, -1 }, /* EdgeFlagPointerListIBM */
+   {  4400, -1 }, /* SecondaryColorPointerListIBM */
+   {  6106, -1 }, /* NormalPointerListIBM */
+   {  7797, -1 }, /* FogCoordPointerListIBM */
+   {  8104, -1 }, /* VertexPointerListIBM */
+   { 12274, -1 }, /* ColorPointerListIBM */
+   { 13458, -1 }, /* TexCoordPointerListIBM */
+   { 13958, -1 }, /* IndexPointerListIBM */
+   { 33184, -1 }, /* EdgeFlagPointerListIBM */
    {    -1, -1 }
 };
 #endif
@@ -6066,10 +6167,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[] = {
-   { 12742, -1 }, /* VertexPointervINTEL */
-   { 15530, -1 }, /* ColorPointervINTEL */
-   { 30065, -1 }, /* NormalPointervINTEL */
-   { 30583, -1 }, /* TexCoordPointervINTEL */
+   { 12798, -1 }, /* VertexPointervINTEL */
+   { 15672, -1 }, /* ColorPointervINTEL */
+   { 30442, -1 }, /* NormalPointervINTEL */
+   { 30965, -1 }, /* TexCoordPointervINTEL */
    {    -1, -1 }
 };
 #endif
@@ -6083,10 +6184,10 @@ static const struct gl_function_remap GL_MESA_resize_buffers_functions[] = {
 
 #if defined(need_GL_MESA_shader_debug)
 static const struct gl_function_remap GL_MESA_shader_debug_functions[] = {
-   {  1677, -1 }, /* GetDebugLogLengthMESA */
-   {  3500, -1 }, /* ClearDebugLogMESA */
-   {  4527, -1 }, /* GetDebugLogMESA */
-   { 31094, -1 }, /* CreateDebugObjectMESA */
+   {  1638, -1 }, /* GetDebugLogLengthMESA */
+   {  3461, -1 }, /* ClearDebugLogMESA */
+   {  4561, -1 }, /* GetDebugLogMESA */
+   { 31476, -1 }, /* CreateDebugObjectMESA */
    {    -1, -1 }
 };
 #endif
@@ -6107,15 +6208,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[] = {
-   {  6738, -1 }, /* GetMapAttribParameterivNV */
-   {  8461, -1 }, /* MapControlPointsNV */
-   {  8560, -1 }, /* MapParameterfvNV */
-   { 10649, -1 }, /* EvalMapsNV */
-   { 17184, -1 }, /* GetMapAttribParameterfvNV */
-   { 17401, -1 }, /* MapParameterivNV */
-   { 24853, -1 }, /* GetMapParameterivNV */
-   { 25351, -1 }, /* GetMapParameterfvNV */
-   { 29380, -1 }, /* GetMapControlPointsNV */
+   {  6836, -1 }, /* GetMapAttribParameterivNV */
+   {  8535, -1 }, /* MapControlPointsNV */
+   {  8634, -1 }, /* MapParameterfvNV */
+   { 10723, -1 }, /* EvalMapsNV */
+   { 17412, -1 }, /* GetMapAttribParameterfvNV */
+   { 17629, -1 }, /* MapParameterivNV */
+   { 25189, -1 }, /* GetMapParameterivNV */
+   { 25732, -1 }, /* GetMapParameterfvNV */
+   { 29757, -1 }, /* GetMapControlPointsNV */
    {    -1, -1 }
 };
 #endif
@@ -6157,8 +6258,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[] = {
-   { 15922, -1 }, /* CombinerStageParameterfvNV */
-   { 16318, -1 }, /* GetCombinerStageParameterfvNV */
+   { 16064, -1 }, /* CombinerStageParameterfvNV */
+   { 16460, -1 }, /* GetCombinerStageParameterfvNV */
    {    -1, -1 }
 };
 #endif
@@ -6193,23 +6294,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[] = {
-   {  8681, -1 }, /* HintPGI */
+   {  8755, -1 }, /* HintPGI */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIS_detail_texture)
 static const struct gl_function_remap GL_SGIS_detail_texture_functions[] = {
-   { 16291, -1 }, /* GetDetailTexFuncSGIS */
-   { 16642, -1 }, /* DetailTexFuncSGIS */
+   { 16433, -1 }, /* GetDetailTexFuncSGIS */
+   { 16870, -1 }, /* DetailTexFuncSGIS */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIS_fog_function)
 static const struct gl_function_remap GL_SGIS_fog_function_functions[] = {
-   { 27309, -1 }, /* FogFuncSGIS */
-   { 28062, -1 }, /* GetFogFuncSGIS */
+   { 27668, -1 }, /* FogFuncSGIS */
+   { 28389, -1 }, /* GetFogFuncSGIS */
    {    -1, -1 }
 };
 #endif
@@ -6237,112 +6338,112 @@ 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[] = {
-   {  6799, -1 }, /* GetSharpenTexFuncSGIS */
-   { 22147, -1 }, /* SharpenTexFuncSGIS */
+   {  6897, -1 }, /* GetSharpenTexFuncSGIS */
+   { 22455, -1 }, /* SharpenTexFuncSGIS */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIS_texture4D)
 static const struct gl_function_remap GL_SGIS_texture4D_functions[] = {
-   {  1049, -1 }, /* TexImage4DSGIS */
-   { 15838, -1 }, /* TexSubImage4DSGIS */
+   {  1010, -1 }, /* TexImage4DSGIS */
+   { 15980, -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[] = {
-   { 15236, -1 }, /* TextureColorMaskSGIS */
+   { 15378, -1 }, /* TextureColorMaskSGIS */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIS_texture_filter4)
 static const struct gl_function_remap GL_SGIS_texture_filter4_functions[] = {
-   {  6976, -1 }, /* GetTexFilterFuncSGIS */
-   { 16437, -1 }, /* TexFilterFuncSGIS */
+   {  7074, -1 }, /* GetTexFilterFuncSGIS */
+   { 16606, -1 }, /* TexFilterFuncSGIS */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_async)
 static const struct gl_function_remap GL_SGIX_async_functions[] = {
-   {  3426, -1 }, /* AsyncMarkerSGIX */
-   {  4506, -1 }, /* FinishAsyncSGIX */
-   {  5495, -1 }, /* PollAsyncSGIX */
-   { 22328, -1 }, /* DeleteAsyncMarkersSGIX */
-   { 22383, -1 }, /* IsAsyncMarkerSGIX */
-   { 32593, -1 }, /* GenAsyncMarkersSGIX */
+   {  3387, -1 }, /* AsyncMarkerSGIX */
+   {  4540, -1 }, /* FinishAsyncSGIX */
+   {  5516, -1 }, /* PollAsyncSGIX */
+   { 22664, -1 }, /* DeleteAsyncMarkersSGIX */
+   { 22719, -1 }, /* IsAsyncMarkerSGIX */
+   { 32981, -1 }, /* GenAsyncMarkersSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_flush_raster)
 static const struct gl_function_remap GL_SGIX_flush_raster_functions[] = {
-   {  7353, -1 }, /* FlushRasterSGIX */
+   {  7451, -1 }, /* FlushRasterSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_fragment_lighting)
 static const struct gl_function_remap GL_SGIX_fragment_lighting_functions[] = {
-   {  2664, -1 }, /* FragmentMaterialfvSGIX */
-   {  5399, -1 }, /* FragmentLightiSGIX */
-   {  8073, -1 }, /* FragmentMaterialfSGIX */
-   {  8234, -1 }, /* GetFragmentLightivSGIX */
-   {  9107, -1 }, /* FragmentLightModeliSGIX */
-   { 10712, -1 }, /* FragmentLightivSGIX */
-   { 11019, -1 }, /* GetFragmentMaterialivSGIX */
-   { 16231, -1 }, /* GetFragmentMaterialfvSGIX */
-   { 19486, -1 }, /* FragmentLightModelfSGIX */
-   { 19786, -1 }, /* FragmentColorMaterialSGIX */
-   { 20203, -1 }, /* FragmentMaterialiSGIX */
-   { 21463, -1 }, /* LightEnviSGIX */
-   { 23074, -1 }, /* FragmentLightModelfvSGIX */
-   { 23409, -1 }, /* FragmentLightfvSGIX */
-   { 28446, -1 }, /* FragmentLightModelivSGIX */
-   { 28595, -1 }, /* FragmentLightfSGIX */
-   { 31431, -1 }, /* GetFragmentLightfvSGIX */
-   { 33076, -1 }, /* FragmentMaterialivSGIX */
+   {  2625, -1 }, /* FragmentMaterialfvSGIX */
+   {  5420, -1 }, /* FragmentLightiSGIX */
+   {  8171, -1 }, /* FragmentMaterialfSGIX */
+   {  8308, -1 }, /* GetFragmentLightivSGIX */
+   {  9181, -1 }, /* FragmentLightModeliSGIX */
+   { 10786, -1 }, /* FragmentLightivSGIX */
+   { 11093, -1 }, /* GetFragmentMaterialivSGIX */
+   { 16373, -1 }, /* GetFragmentMaterialfvSGIX */
+   { 19776, -1 }, /* FragmentLightModelfSGIX */
+   { 20094, -1 }, /* FragmentColorMaterialSGIX */
+   { 20511, -1 }, /* FragmentMaterialiSGIX */
+   { 21771, -1 }, /* LightEnviSGIX */
+   { 23410, -1 }, /* FragmentLightModelfvSGIX */
+   { 23745, -1 }, /* FragmentLightfvSGIX */
+   { 28773, -1 }, /* FragmentLightModelivSGIX */
+   { 28922, -1 }, /* FragmentLightfSGIX */
+   { 31852, -1 }, /* GetFragmentLightfvSGIX */
+   { 33464, -1 }, /* FragmentMaterialivSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_framezoom)
 static const struct gl_function_remap GL_SGIX_framezoom_functions[] = {
-   { 22406, -1 }, /* FrameZoomSGIX */
+   { 22742, -1 }, /* FrameZoomSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_igloo_interface)
 static const struct gl_function_remap GL_SGIX_igloo_interface_functions[] = {
-   { 28903, -1 }, /* IglooInterfaceSGIX */
+   { 29230, -1 }, /* IglooInterfaceSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_instruments)
 static const struct gl_function_remap GL_SGIX_instruments_functions[] = {
-   {  2844, -1 }, /* ReadInstrumentsSGIX */
-   {  6572, -1 }, /* PollInstrumentsSGIX */
-   { 10570, -1 }, /* GetInstrumentsSGIX */
-   { 13000, -1 }, /* StartInstrumentsSGIX */
-   { 15956, -1 }, /* StopInstrumentsSGIX */
-   { 17823, -1 }, /* InstrumentsBufferSGIX */
+   {  2805, -1 }, /* ReadInstrumentsSGIX */
+   {  6670, -1 }, /* PollInstrumentsSGIX */
+   { 10644, -1 }, /* GetInstrumentsSGIX */
+   { 13056, -1 }, /* StartInstrumentsSGIX */
+   { 16098, -1 }, /* StopInstrumentsSGIX */
+   { 18051, -1 }, /* InstrumentsBufferSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_list_priority)
 static const struct gl_function_remap GL_SGIX_list_priority_functions[] = {
-   {  1280, -1 }, /* ListParameterfSGIX */
-   {  3128, -1 }, /* GetListParameterfvSGIX */
-   { 17714, -1 }, /* ListParameteriSGIX */
-   { 18728, -1 }, /* ListParameterfvSGIX */
-   { 20869, -1 }, /* ListParameterivSGIX */
-   { 32637, -1 }, /* GetListParameterivSGIX */
+   {  1241, -1 }, /* ListParameterfSGIX */
+   {  3089, -1 }, /* GetListParameterfvSGIX */
+   { 17942, -1 }, /* ListParameteriSGIX */
+   { 19008, -1 }, /* ListParameterfvSGIX */
+   { 21177, -1 }, /* ListParameterivSGIX */
+   { 33025, -1 }, /* GetListParameterivSGIX */
    {    -1, -1 }
 };
 #endif
@@ -6356,134 +6457,134 @@ 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[] = {
-   {  3724, -1 }, /* LoadIdentityDeformationMapSGIX */
-   { 12208, -1 }, /* DeformationMap3dSGIX */
-   { 16056, -1 }, /* DeformSGIX */
-   { 24351, -1 }, /* DeformationMap3fSGIX */
+   {  3685, -1 }, /* LoadIdentityDeformationMapSGIX */
+   { 16198, -1 }, /* DeformSGIX */
+   { 24687, -1 }, /* DeformationMap3fSGIX */
+   { 31740, -1 }, /* DeformationMap3dSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_reference_plane)
 static const struct gl_function_remap GL_SGIX_reference_plane_functions[] = {
-   { 14787, -1 }, /* ReferencePlaneSGIX */
+   { 14929, -1 }, /* ReferencePlaneSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGIX_sprite)
 static const struct gl_function_remap GL_SGIX_sprite_functions[] = {
-   {  9605, -1 }, /* SpriteParameterfvSGIX */
-   { 20658, -1 }, /* SpriteParameteriSGIX */
-   { 26681, -1 }, /* SpriteParameterfSGIX */
-   { 29523, -1 }, /* SpriteParameterivSGIX */
+   {  9679, -1 }, /* SpriteParameterfvSGIX */
+   { 20966, -1 }, /* SpriteParameteriSGIX */
+   { 27072, -1 }, /* SpriteParameterfSGIX */
+   { 29900, -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[] = {
-   { 20717, -1 }, /* TagSampleBufferSGIX */
+   { 21025, -1 }, /* TagSampleBufferSGIX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SGI_color_table)
 static const struct gl_function_remap GL_SGI_color_table_functions[] = {
-   {  7643, _gloffset_ColorTableParameteriv },
-   {  8355, _gloffset_ColorTable },
-   { 15283, _gloffset_GetColorTable },
-   { 15393, _gloffset_CopyColorTable },
-   { 19430, _gloffset_ColorTableParameterfv },
-   { 22982, _gloffset_GetColorTableParameterfv },
-   { 25109, _gloffset_GetColorTableParameteriv },
+   {  7741, _gloffset_ColorTableParameteriv },
+   {  8429, _gloffset_ColorTable },
+   { 15425, _gloffset_GetColorTable },
+   { 15535, _gloffset_CopyColorTable },
+   { 19720, _gloffset_ColorTableParameterfv },
+   { 23318, _gloffset_GetColorTableParameterfv },
+   { 25490, _gloffset_GetColorTableParameteriv },
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SUNX_constant_data)
 static const struct gl_function_remap GL_SUNX_constant_data_functions[] = {
-   { 31409, -1 }, /* FinishTextureSUNX */
+   { 31830, -1 }, /* FinishTextureSUNX */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SUN_global_alpha)
 static const struct gl_function_remap GL_SUN_global_alpha_functions[] = {
-   {  3447, -1 }, /* GlobalAlphaFactorubSUN */
-   {  4805, -1 }, /* GlobalAlphaFactoriSUN */
-   {  6597, -1 }, /* GlobalAlphaFactordSUN */
-   {  9689, -1 }, /* GlobalAlphaFactoruiSUN */
-   { 10161, -1 }, /* GlobalAlphaFactorbSUN */
-   { 13315, -1 }, /* GlobalAlphaFactorfSUN */
-   { 13479, -1 }, /* GlobalAlphaFactorusSUN */
-   { 22669, -1 }, /* GlobalAlphaFactorsSUN */
+   {  3408, -1 }, /* GlobalAlphaFactorubSUN */
+   {  4868, -1 }, /* GlobalAlphaFactoriSUN */
+   {  6695, -1 }, /* GlobalAlphaFactordSUN */
+   {  9763, -1 }, /* GlobalAlphaFactoruiSUN */
+   { 10235, -1 }, /* GlobalAlphaFactorbSUN */
+   { 13371, -1 }, /* GlobalAlphaFactorfSUN */
+   { 13535, -1 }, /* GlobalAlphaFactorusSUN */
+   { 23005, -1 }, /* GlobalAlphaFactorsSUN */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SUN_mesh_array)
 static const struct gl_function_remap GL_SUN_mesh_array_functions[] = {
-   { 29314, -1 }, /* DrawMeshArraysSUN */
+   { 29691, -1 }, /* DrawMeshArraysSUN */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SUN_triangle_list)
 static const struct gl_function_remap GL_SUN_triangle_list_functions[] = {
-   {  4480, -1 }, /* ReplacementCodeubSUN */
-   {  6356, -1 }, /* ReplacementCodeubvSUN */
-   { 19151, -1 }, /* ReplacementCodeusvSUN */
-   { 19339, -1 }, /* ReplacementCodePointerSUN */
-   { 21527, -1 }, /* ReplacementCodeuiSUN */
-   { 22357, -1 }, /* ReplacementCodeusSUN */
-   { 29980, -1 }, /* ReplacementCodeuivSUN */
+   {  4514, -1 }, /* ReplacementCodeubSUN */
+   {  6454, -1 }, /* ReplacementCodeubvSUN */
+   { 19441, -1 }, /* ReplacementCodeusvSUN */
+   { 19629, -1 }, /* ReplacementCodePointerSUN */
+   { 21835, -1 }, /* ReplacementCodeuiSUN */
+   { 22693, -1 }, /* ReplacementCodeusSUN */
+   { 30357, -1 }, /* ReplacementCodeuivSUN */
    {    -1, -1 }
 };
 #endif
 
 #if defined(need_GL_SUN_vertex)
 static const struct gl_function_remap GL_SUN_vertex_functions[] = {
-   {  1154, -1 }, /* ReplacementCodeuiColor3fVertex3fvSUN */
-   {  1352, -1 }, /* TexCoord4fColor4fNormal3fVertex4fvSUN */
-   {  1578, -1 }, /* TexCoord2fColor4ubVertex3fvSUN */
-   {  1908, -1 }, /* ReplacementCodeuiVertex3fvSUN */
-   {  2042, -1 }, /* ReplacementCodeuiTexCoord2fVertex3fvSUN */
-   {  2600, -1 }, /* ReplacementCodeuiNormal3fVertex3fSUN */
-   {  2913, -1 }, /* Color4ubVertex3fvSUN */
-   {  4639, -1 }, /* Color4ubVertex3fSUN */
-   {  4762, -1 }, /* TexCoord2fVertex3fSUN */
-   {  5106, -1 }, /* TexCoord2fColor4fNormal3fVertex3fSUN */
-   {  5599, -1 }, /* TexCoord2fNormal3fVertex3fvSUN */
-   {  6251, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN */
-   {  7031, -1 }, /* ReplacementCodeuiColor4ubVertex3fvSUN */
-   {  7390, -1 }, /* ReplacementCodeuiTexCoord2fVertex3fSUN */
-   {  8102, -1 }, /* TexCoord2fNormal3fVertex3fSUN */
-   {  8906, -1 }, /* Color3fVertex3fSUN */
-   { 10097, -1 }, /* Color3fVertex3fvSUN */
-   { 10535, -1 }, /* Color4fNormal3fVertex3fvSUN */
-   { 11364, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN */
-   { 12863, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fvSUN */
-   { 14403, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN */
-   { 14929, -1 }, /* TexCoord2fColor3fVertex3fSUN */
-   { 15981, -1 }, /* TexCoord4fColor4fNormal3fVertex4fSUN */
-   { 16396, -1 }, /* Color4ubVertex2fvSUN */
-   { 16667, -1 }, /* Normal3fVertex3fSUN */
-   { 17764, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fSUN */
-   { 18125, -1 }, /* TexCoord2fColor4fNormal3fVertex3fvSUN */
-   { 18980, -1 }, /* TexCoord2fVertex3fvSUN */
-   { 19756, -1 }, /* Color4ubVertex2fSUN */
-   { 19994, -1 }, /* ReplacementCodeuiColor4ubVertex3fSUN */
-   { 21993, -1 }, /* TexCoord2fColor4ubVertex3fSUN */
-   { 22425, -1 }, /* Normal3fVertex3fvSUN */
-   { 22891, -1 }, /* Color4fNormal3fVertex3fSUN */
-   { 23900, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN */
-   { 26002, -1 }, /* ReplacementCodeuiColor3fVertex3fSUN */
-   { 27425, -1 }, /* TexCoord4fVertex4fSUN */
-   { 27851, -1 }, /* TexCoord2fColor3fVertex3fvSUN */
-   { 28290, -1 }, /* ReplacementCodeuiNormal3fVertex3fvSUN */
-   { 28417, -1 }, /* TexCoord4fVertex4fvSUN */
-   { 29151, -1 }, /* ReplacementCodeuiVertex3fSUN */
+   {  1115, -1 }, /* ReplacementCodeuiColor3fVertex3fvSUN */
+   {  1313, -1 }, /* TexCoord4fColor4fNormal3fVertex4fvSUN */
+   {  1539, -1 }, /* TexCoord2fColor4ubVertex3fvSUN */
+   {  1869, -1 }, /* ReplacementCodeuiVertex3fvSUN */
+   {  2003, -1 }, /* ReplacementCodeuiTexCoord2fVertex3fvSUN */
+   {  2561, -1 }, /* ReplacementCodeuiNormal3fVertex3fSUN */
+   {  2874, -1 }, /* Color4ubVertex3fvSUN */
+   {  4673, -1 }, /* Color4ubVertex3fSUN */
+   {  4796, -1 }, /* TexCoord2fVertex3fSUN */
+   {  5169, -1 }, /* TexCoord2fColor4fNormal3fVertex3fSUN */
+   {  5620, -1 }, /* TexCoord2fNormal3fVertex3fvSUN */
+   {  6349, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN */
+   {  7129, -1 }, /* ReplacementCodeuiColor4ubVertex3fvSUN */
+   {  7488, -1 }, /* ReplacementCodeuiTexCoord2fVertex3fSUN */
+   {  8980, -1 }, /* Color3fVertex3fSUN */
+   { 10171, -1 }, /* Color3fVertex3fvSUN */
+   { 10609, -1 }, /* Color4fNormal3fVertex3fvSUN */
+   { 11438, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN */
+   { 12919, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fvSUN */
+   { 14545, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN */
+   { 15071, -1 }, /* TexCoord2fColor3fVertex3fSUN */
+   { 16123, -1 }, /* TexCoord4fColor4fNormal3fVertex4fSUN */
+   { 16565, -1 }, /* Color4ubVertex2fvSUN */
+   { 16895, -1 }, /* Normal3fVertex3fSUN */
+   { 17992, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fSUN */
+   { 18344, -1 }, /* TexCoord2fColor4fNormal3fVertex3fvSUN */
+   { 18651, -1 }, /* TexCoord2fNormal3fVertex3fSUN */
+   { 19260, -1 }, /* TexCoord2fVertex3fvSUN */
+   { 20064, -1 }, /* Color4ubVertex2fSUN */
+   { 20302, -1 }, /* ReplacementCodeuiColor4ubVertex3fSUN */
+   { 22301, -1 }, /* TexCoord2fColor4ubVertex3fSUN */
+   { 22761, -1 }, /* Normal3fVertex3fvSUN */
+   { 23227, -1 }, /* Color4fNormal3fVertex3fSUN */
+   { 24236, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN */
+   { 26393, -1 }, /* ReplacementCodeuiColor3fVertex3fSUN */
+   { 27784, -1 }, /* TexCoord4fVertex4fSUN */
+   { 28230, -1 }, /* TexCoord2fColor3fVertex3fvSUN */
+   { 28617, -1 }, /* ReplacementCodeuiNormal3fVertex3fvSUN */
+   { 28744, -1 }, /* TexCoord4fVertex4fvSUN */
+   { 29478, -1 }, /* ReplacementCodeuiVertex3fSUN */
    {    -1, -1 }
 };
 #endif
@@ -6491,40 +6592,40 @@ static const struct gl_function_remap GL_SUN_vertex_functions[] = {
 #if defined(need_GL_VERSION_1_3)
 /* functions defined in MESA_remap_table_functions are excluded */
 static const struct gl_function_remap GL_VERSION_1_3_functions[] = {
-   {   464, _gloffset_MultiTexCoord3sARB },
-   {   696, _gloffset_ActiveTextureARB },
-   {  4234, _gloffset_MultiTexCoord1fvARB },
-   {  6142, _gloffset_MultiTexCoord3dARB },
-   {  6187, _gloffset_MultiTexCoord2iARB },
-   {  6311, _gloffset_MultiTexCoord2svARB },
-   {  8311, _gloffset_MultiTexCoord2fARB },
-   { 10371, _gloffset_MultiTexCoord3fvARB },
-   { 10973, _gloffset_MultiTexCoord4sARB },
-   { 11654, _gloffset_MultiTexCoord2dvARB },
-   { 12069, _gloffset_MultiTexCoord1svARB },
-   { 12480, _gloffset_MultiTexCoord3svARB },
-   { 12541, _gloffset_MultiTexCoord4iARB },
-   { 13342, _gloffset_MultiTexCoord3iARB },
-   { 14141, _gloffset_MultiTexCoord1dARB },
-   { 14358, _gloffset_MultiTexCoord3dvARB },
-   { 15637, _gloffset_MultiTexCoord3ivARB },
-   { 15682, _gloffset_MultiTexCoord2sARB },
-   { 17067, _gloffset_MultiTexCoord4ivARB },
-   { 19080, _gloffset_ClientActiveTextureARB },
-   { 21380, _gloffset_MultiTexCoord2dARB },
-   { 21817, _gloffset_MultiTexCoord4dvARB },
-   { 22173, _gloffset_MultiTexCoord4fvARB },
-   { 23123, _gloffset_MultiTexCoord3fARB },
-   { 25693, _gloffset_MultiTexCoord4dARB },
-   { 25959, _gloffset_MultiTexCoord1sARB },
-   { 26163, _gloffset_MultiTexCoord1dvARB },
-   { 27171, _gloffset_MultiTexCoord1ivARB },
-   { 27264, _gloffset_MultiTexCoord2ivARB },
-   { 27603, _gloffset_MultiTexCoord1iARB },
-   { 29019, _gloffset_MultiTexCoord4svARB },
-   { 29593, _gloffset_MultiTexCoord1fARB },
-   { 29856, _gloffset_MultiTexCoord4fARB },
-   { 32314, _gloffset_MultiTexCoord2fvARB },
+   {   425, _gloffset_MultiTexCoord3sARB },
+   {   657, _gloffset_ActiveTextureARB },
+   {  4268, _gloffset_MultiTexCoord1fvARB },
+   {  6240, _gloffset_MultiTexCoord3dARB },
+   {  6285, _gloffset_MultiTexCoord2iARB },
+   {  6409, _gloffset_MultiTexCoord2svARB },
+   {  8385, _gloffset_MultiTexCoord2fARB },
+   { 10445, _gloffset_MultiTexCoord3fvARB },
+   { 11047, _gloffset_MultiTexCoord4sARB },
+   { 11728, _gloffset_MultiTexCoord2dvARB },
+   { 12135, _gloffset_MultiTexCoord1svARB },
+   { 12536, _gloffset_MultiTexCoord3svARB },
+   { 12597, _gloffset_MultiTexCoord4iARB },
+   { 13398, _gloffset_MultiTexCoord3iARB },
+   { 14268, _gloffset_MultiTexCoord1dARB },
+   { 14500, _gloffset_MultiTexCoord3dvARB },
+   { 15779, _gloffset_MultiTexCoord3ivARB },
+   { 15824, _gloffset_MultiTexCoord2sARB },
+   { 17295, _gloffset_MultiTexCoord4ivARB },
+   { 19360, _gloffset_ClientActiveTextureARB },
+   { 21688, _gloffset_MultiTexCoord2dARB },
+   { 22125, _gloffset_MultiTexCoord4dvARB },
+   { 22481, _gloffset_MultiTexCoord4fvARB },
+   { 23459, _gloffset_MultiTexCoord3fARB },
+   { 26084, _gloffset_MultiTexCoord4dARB },
+   { 26350, _gloffset_MultiTexCoord1sARB },
+   { 26554, _gloffset_MultiTexCoord1dvARB },
+   { 27530, _gloffset_MultiTexCoord1ivARB },
+   { 27623, _gloffset_MultiTexCoord2ivARB },
+   { 27962, _gloffset_MultiTexCoord1iARB },
+   { 29346, _gloffset_MultiTexCoord4svARB },
+   { 29970, _gloffset_MultiTexCoord1fARB },
+   { 30233, _gloffset_MultiTexCoord4fARB },
+   { 32702, _gloffset_MultiTexCoord2fvARB },
    {    -1, -1 }
 };
 #endif
index 67ee589d77665def695658dc2c1be90b7feec5a9..fa884c0de93bea927eb9d7d18f4e21eeaf86803e 100644 (file)
 
 /*
  * Routines for get/put values in common buffer formats follow.
- * Someday add support for arbitrary row stride to make them more
- * flexible.
  */
 
-/**********************************************************************
- * Functions for buffers of 1 X GLubyte values.
- * Typically stencil.
+/* Returns a bytes per pixel of the DataType in the get/put span
+ * functions for at least a subset of the available combinations a
+ * renderbuffer can have.
+ *
+ * It would be nice to see gl_renderbuffer start talking about a
+ * gl_format instead of a GLenum DataType.
  */
+static int
+get_datatype_bytes(struct gl_renderbuffer *rb)
+{
+   int component_size;
+
+   switch (rb->DataType) {
+   case GL_FLOAT:
+   case GL_UNSIGNED_INT:
+   case GL_UNSIGNED_INT_24_8_EXT:
+      component_size = 4;
+      break;
+   case GL_UNSIGNED_SHORT:
+      component_size = 2;
+      break;
+   case GL_UNSIGNED_BYTE:
+      component_size = 1;
+      break;
+   default:
+      component_size = 1;
+      assert(0);
+   }
+
+   switch (rb->_BaseFormat) {
+   case GL_DEPTH_COMPONENT:
+   case GL_DEPTH_STENCIL:
+      return component_size;
+   default:
+      return 4 * component_size;
+   }
+}
 
+/* This is commonly used by most of the accessors. */
 static void *
-get_pointer_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb,
-                  GLint x, GLint y)
+get_pointer_generic(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                   GLint x, GLint y)
 {
    if (!rb->Data)
       return NULL;
-   ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
-   /* Can't assert rb->Format since these funcs may be used for serveral
-    * different formats (GL_ALPHA8, GL_STENCIL_INDEX8, etc).
-    */
-   return (GLubyte *) rb->Data + y * rb->Width + x;
+
+   return ((char *) rb->Data +
+          (y * rb->RowStride + x) * _mesa_get_format_bytes(rb->Format));
 }
 
+/* GetRow() implementation for formats where DataType matches the rb->Format.
+ */
+static void
+get_row_generic(struct gl_context *ctx, struct gl_renderbuffer *rb,
+               GLuint count, GLint x, GLint y, void *values)
+{
+   void *src = rb->GetPointer(ctx, rb, x, y);
+   memcpy(values, src, count * _mesa_get_format_bytes(rb->Format));
+}
 
+/* Only used for float textures currently, but might also be used for
+ * RGBA8888, RGBA16, etc.
+ */
 static void
-get_row_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
-              GLint x, GLint y, void *values)
+get_values_generic(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                  GLuint count, const GLint x[], const GLint y[], void *values)
 {
-   const GLubyte *src = (const GLubyte *) rb->Data + y * rb->Width + x;
-   ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
-   memcpy(values, src, count * sizeof(GLubyte));
+   int format_bytes = _mesa_get_format_bytes(rb->Format) / sizeof(GLfloat);
+   GLuint i;
+
+   for (i = 0; i < count; i++) {
+      const void *src = rb->GetPointer(ctx, rb, x[i], y[i]);
+      char *dst = (char *) values + i * format_bytes;
+      memcpy(dst, src, format_bytes);
+   }
+}
+
+/* For the GL_RED/GL_RG/GL_RGB format/DataType combinations (and
+ * GL_LUMINANCE/GL_INTENSITY?), the Put functions are a matter of
+ * storing those initial components of the value per pixel into the
+ * destination.
+ */
+static void
+put_row_generic(struct gl_context *ctx, struct gl_renderbuffer *rb,
+               GLuint count, GLint x, GLint y,
+               const void *values, const GLubyte *mask)
+{
+   void *row = rb->GetPointer(ctx, rb, x, y);
+   int format_bytes = _mesa_get_format_bytes(rb->Format) / sizeof(GLfloat);
+   int datatype_bytes = get_datatype_bytes(rb);
+   unsigned int i;
+
+   if (mask) {
+      for (i = 0; i < count; i++) {
+        char *dst = (char *) row + i * format_bytes;
+        const char *src = (const char *) values + i * datatype_bytes;
+
+         if (mask[i]) {
+           memcpy(dst, src, format_bytes);
+         }
+      }
+   }
+   else {
+      for (i = 0; i < count; i++) {
+        char *dst = (char *) row + i * format_bytes;
+        const char *src = (const char *) values + i * datatype_bytes;
+        memcpy(dst, src, format_bytes);
+      }
+   }
+}
+
+static void
+put_mono_row_generic(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                    GLuint count, GLint x, GLint y,
+                    const void *value, const GLubyte *mask)
+{
+   void *row = rb->GetPointer(ctx, rb, x, y);
+   int format_bytes = _mesa_get_format_bytes(rb->Format) / sizeof(GLfloat);
+   unsigned int i;
+
+   if (mask) {
+      for (i = 0; i < count; i++) {
+        char *dst = (char *) row + i * format_bytes;
+         if (mask[i]) {
+           memcpy(dst, value, format_bytes);
+         }
+      }
+   }
+   else {
+      for (i = 0; i < count; i++) {
+        char *dst = (char *) row + i * format_bytes;
+        memcpy(dst, value, format_bytes);
+      }
+   }
+}
+
+
+static void
+put_values_generic(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                  GLuint count, const GLint x[], const GLint y[],
+                  const void *values, const GLubyte *mask)
+{
+   int format_bytes = _mesa_get_format_bytes(rb->Format) / sizeof(GLfloat);
+   int datatype_bytes = get_datatype_bytes(rb);
+   unsigned int i;
+
+   for (i = 0; i < count; i++) {
+      if (!mask || mask[i]) {
+        void *dst = rb->GetPointer(ctx, rb, x[i], y[i]);
+        const char *src = (const char *) values + i * datatype_bytes;
+        memcpy(dst, src, format_bytes);
+      }
+   }
+}
+
+
+static void
+put_mono_values_generic(struct gl_context *ctx,
+                       struct gl_renderbuffer *rb,
+                       GLuint count, const GLint x[], const GLint y[],
+                       const void *value, const GLubyte *mask)
+{
+   int format_bytes = _mesa_get_format_bytes(rb->Format) / sizeof(GLfloat);
+   unsigned int i;
+
+   for (i = 0; i < count; i++) {
+      if (!mask || mask[i]) {
+        void *dst = rb->GetPointer(ctx, rb, x[i], y[i]);
+        memcpy(dst, value, format_bytes);
+      }
+   }
 }
 
+/**********************************************************************
+ * Functions for buffers of 1 X GLubyte values.
+ * Typically stencil.
+ */
 
 static void
 get_values_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
@@ -92,7 +239,7 @@ get_values_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint coun
    GLuint i;
    ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
    for (i = 0; i < count; i++) {
-      const GLubyte *src = (GLubyte *) rb->Data + y[i] * rb->Width + x[i];
+      const GLubyte *src = (GLubyte *) rb->Data + y[i] * rb->RowStride + x[i];
       dst[i] = *src;
    }
 }
@@ -103,7 +250,7 @@ put_row_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
               GLint x, GLint y, const void *values, const GLubyte *mask)
 {
    const GLubyte *src = (const GLubyte *) values;
-   GLubyte *dst = (GLubyte *) rb->Data + y * rb->Width + x;
+   GLubyte *dst = (GLubyte *) rb->Data + y * rb->RowStride + x;
    ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
    if (mask) {
       GLuint i;
@@ -124,7 +271,7 @@ put_mono_row_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint co
                    GLint x, GLint y, const void *value, const GLubyte *mask)
 {
    const GLubyte val = *((const GLubyte *) value);
-   GLubyte *dst = (GLubyte *) rb->Data + y * rb->Width + x;
+   GLubyte *dst = (GLubyte *) rb->Data + y * rb->RowStride + x;
    ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
    if (mask) {
       GLuint i;
@@ -153,7 +300,7 @@ put_values_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint coun
    ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
    for (i = 0; i < count; i++) {
       if (!mask || mask[i]) {
-         GLubyte *dst = (GLubyte *) rb->Data + y[i] * rb->Width + x[i];
+         GLubyte *dst = (GLubyte *) rb->Data + y[i] * rb->RowStride + x[i];
          *dst = src[i];
       }
    }
@@ -170,7 +317,7 @@ put_mono_values_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint
    ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
    for (i = 0; i < count; i++) {
       if (!mask || mask[i]) {
-         GLubyte *dst = (GLubyte *) rb->Data + y[i] * rb->Width + x[i];
+         GLubyte *dst = (GLubyte *) rb->Data + y[i] * rb->RowStride + x[i];
          *dst = val;
       }
    }
@@ -182,28 +329,6 @@ put_mono_values_ubyte(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint
  * Typically depth/Z.
  */
 
-static void *
-get_pointer_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb,
-                   GLint x, GLint y)
-{
-   if (!rb->Data)
-      return NULL;
-   ASSERT(rb->DataType == GL_UNSIGNED_SHORT);
-   ASSERT(rb->Width > 0);
-   return (GLushort *) rb->Data + y * rb->Width + x;
-}
-
-
-static void
-get_row_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
-               GLint x, GLint y, void *values)
-{
-   const void *src = rb->GetPointer(ctx, rb, x, y);
-   ASSERT(rb->DataType == GL_UNSIGNED_SHORT);
-   memcpy(values, src, count * sizeof(GLushort));
-}
-
-
 static void
 get_values_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
                   const GLint x[], const GLint y[], void *values)
@@ -212,7 +337,7 @@ get_values_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint cou
    GLuint i;
    ASSERT(rb->DataType == GL_UNSIGNED_SHORT);
    for (i = 0; i < count; i++) {
-      const GLushort *src = (GLushort *) rb->Data + y[i] * rb->Width + x[i];
+      const GLushort *src = (GLushort *) rb->Data + y[i] * rb->RowStride + x[i];
       dst[i] = *src;
    }
 }
@@ -223,7 +348,7 @@ put_row_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
                GLint x, GLint y, const void *values, const GLubyte *mask)
 {
    const GLushort *src = (const GLushort *) values;
-   GLushort *dst = (GLushort *) rb->Data + y * rb->Width + x;
+   GLushort *dst = (GLushort *) rb->Data + y * rb->RowStride + x;
    ASSERT(rb->DataType == GL_UNSIGNED_SHORT);
    if (mask) {
       GLuint i;
@@ -244,7 +369,7 @@ put_mono_row_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint c
                     GLint x, GLint y, const void *value, const GLubyte *mask)
 {
    const GLushort val = *((const GLushort *) value);
-   GLushort *dst = (GLushort *) rb->Data + y * rb->Width + x;
+   GLushort *dst = (GLushort *) rb->Data + y * rb->RowStride + x;
    ASSERT(rb->DataType == GL_UNSIGNED_SHORT);
    if (mask) {
       GLuint i;
@@ -273,7 +398,7 @@ put_values_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint cou
    ASSERT(rb->DataType == GL_UNSIGNED_SHORT);
    for (i = 0; i < count; i++) {
       if (!mask || mask[i]) {
-         GLushort *dst = (GLushort *) rb->Data + y[i] * rb->Width + x[i];
+         GLushort *dst = (GLushort *) rb->Data + y[i] * rb->RowStride + x[i];
          *dst = src[i];
       }
    }
@@ -291,7 +416,7 @@ put_mono_values_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb,
       GLuint i;
       for (i = 0; i < count; i++) {
          if (mask[i]) {
-            GLushort *dst = (GLushort *) rb->Data + y[i] * rb->Width + x[i];
+            GLushort *dst = (GLushort *) rb->Data + y[i] * rb->RowStride + x[i];
             *dst = val;
          }
       }
@@ -299,7 +424,7 @@ put_mono_values_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb,
    else {
       GLuint i;
       for (i = 0; i < count; i++) {
-         GLushort *dst = (GLushort *) rb->Data + y[i] * rb->Width + x[i];
+         GLushort *dst = (GLushort *) rb->Data + y[i] * rb->RowStride + x[i];
          *dst = val;
       }
    }
@@ -311,29 +436,6 @@ put_mono_values_ushort(struct gl_context *ctx, struct gl_renderbuffer *rb,
  * Typically depth/Z or color index.
  */
 
-static void *
-get_pointer_uint(struct gl_context *ctx, struct gl_renderbuffer *rb,
-                 GLint x, GLint y)
-{
-   if (!rb->Data)
-      return NULL;
-   ASSERT(rb->DataType == GL_UNSIGNED_INT ||
-          rb->DataType == GL_UNSIGNED_INT_24_8_EXT);
-   return (GLuint *) rb->Data + y * rb->Width + x;
-}
-
-
-static void
-get_row_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
-             GLint x, GLint y, void *values)
-{
-   const void *src = rb->GetPointer(ctx, rb, x, y);
-   ASSERT(rb->DataType == GL_UNSIGNED_INT ||
-          rb->DataType == GL_UNSIGNED_INT_24_8_EXT);
-   memcpy(values, src, count * sizeof(GLuint));
-}
-
-
 static void
 get_values_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
                 const GLint x[], const GLint y[], void *values)
@@ -343,7 +445,7 @@ get_values_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count
    ASSERT(rb->DataType == GL_UNSIGNED_INT ||
           rb->DataType == GL_UNSIGNED_INT_24_8_EXT);
    for (i = 0; i < count; i++) {
-      const GLuint *src = (GLuint *) rb->Data + y[i] * rb->Width + x[i];
+      const GLuint *src = (GLuint *) rb->Data + y[i] * rb->RowStride + x[i];
       dst[i] = *src;
    }
 }
@@ -354,7 +456,7 @@ put_row_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
              GLint x, GLint y, const void *values, const GLubyte *mask)
 {
    const GLuint *src = (const GLuint *) values;
-   GLuint *dst = (GLuint *) rb->Data + y * rb->Width + x;
+   GLuint *dst = (GLuint *) rb->Data + y * rb->RowStride + x;
    ASSERT(rb->DataType == GL_UNSIGNED_INT ||
           rb->DataType == GL_UNSIGNED_INT_24_8_EXT);
    if (mask) {
@@ -376,7 +478,7 @@ put_mono_row_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint cou
                   GLint x, GLint y, const void *value, const GLubyte *mask)
 {
    const GLuint val = *((const GLuint *) value);
-   GLuint *dst = (GLuint *) rb->Data + y * rb->Width + x;
+   GLuint *dst = (GLuint *) rb->Data + y * rb->RowStride + x;
    ASSERT(rb->DataType == GL_UNSIGNED_INT ||
           rb->DataType == GL_UNSIGNED_INT_24_8_EXT);
    if (mask) {
@@ -407,7 +509,7 @@ put_values_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count
           rb->DataType == GL_UNSIGNED_INT_24_8_EXT);
    for (i = 0; i < count; i++) {
       if (!mask || mask[i]) {
-         GLuint *dst = (GLuint *) rb->Data + y[i] * rb->Width + x[i];
+         GLuint *dst = (GLuint *) rb->Data + y[i] * rb->RowStride + x[i];
          *dst = src[i];
       }
    }
@@ -425,7 +527,7 @@ put_mono_values_uint(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint
           rb->DataType == GL_UNSIGNED_INT_24_8_EXT);
    for (i = 0; i < count; i++) {
       if (!mask || mask[i]) {
-         GLuint *dst = (GLuint *) rb->Data + y[i] * rb->Width + x[i];
+         GLuint *dst = (GLuint *) rb->Data + y[i] * rb->RowStride + x[i];
          *dst = val;
       }
    }
@@ -455,7 +557,8 @@ static void
 get_row_ubyte3(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
                GLint x, GLint y, void *values)
 {
-   const GLubyte *src = (const GLubyte *) rb->Data + 3 * (y * rb->Width + x);
+   const GLubyte *src = ((const GLubyte *) rb->Data) +
+                                          3 * (y * rb->RowStride + x);
    GLubyte *dst = (GLubyte *) values;
    GLuint i;
    ASSERT(rb->Format == MESA_FORMAT_RGB888);
@@ -479,7 +582,7 @@ get_values_ubyte3(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint cou
    ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
    for (i = 0; i < count; i++) {
       const GLubyte *src
-         = (GLubyte *) rb->Data + 3 * (y[i] * rb->Width + x[i]);
+         = (GLubyte *) rb->Data + 3 * (y[i] * rb->RowStride + x[i]);
       dst[i * 4 + 0] = src[0];
       dst[i * 4 + 1] = src[1];
       dst[i * 4 + 2] = src[2];
@@ -494,7 +597,7 @@ put_row_ubyte3(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
 {
    /* note: incoming values are RGB+A! */
    const GLubyte *src = (const GLubyte *) values;
-   GLubyte *dst = (GLubyte *) rb->Data + 3 * (y * rb->Width + x);
+   GLubyte *dst = (GLubyte *) rb->Data + 3 * (y * rb->RowStride + x);
    GLuint i;
    ASSERT(rb->Format == MESA_FORMAT_RGB888);
    ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
@@ -514,7 +617,7 @@ put_row_rgb_ubyte3(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint co
 {
    /* note: incoming values are RGB+A! */
    const GLubyte *src = (const GLubyte *) values;
-   GLubyte *dst = (GLubyte *) rb->Data + 3 * (y * rb->Width + x);
+   GLubyte *dst = (GLubyte *) rb->Data + 3 * (y * rb->RowStride + x);
    GLuint i;
    ASSERT(rb->Format == MESA_FORMAT_RGB888);
    ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
@@ -536,7 +639,7 @@ put_mono_row_ubyte3(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint c
    const GLubyte val0 = ((const GLubyte *) value)[0];
    const GLubyte val1 = ((const GLubyte *) value)[1];
    const GLubyte val2 = ((const GLubyte *) value)[2];
-   GLubyte *dst = (GLubyte *) rb->Data + 3 * (y * rb->Width + x);
+   GLubyte *dst = (GLubyte *) rb->Data + 3 * (y * rb->RowStride + x);
    ASSERT(rb->Format == MESA_FORMAT_RGB888);
    ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
    if (!mask && val0 == val1 && val1 == val2) {
@@ -568,7 +671,7 @@ put_values_ubyte3(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint cou
    ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
    for (i = 0; i < count; i++) {
       if (!mask || mask[i]) {
-         GLubyte *dst = (GLubyte *) rb->Data + 3 * (y[i] * rb->Width + x[i]);
+         GLubyte *dst = (GLubyte *) rb->Data + 3 * (y[i] * rb->RowStride + x[i]);
          dst[0] = src[i * 4 + 0];
          dst[1] = src[i * 4 + 1];
          dst[2] = src[i * 4 + 2];
@@ -591,7 +694,8 @@ put_mono_values_ubyte3(struct gl_context *ctx, struct gl_renderbuffer *rb,
    ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
    for (i = 0; i < count; i++) {
       if (!mask || mask[i]) {
-         GLubyte *dst = (GLubyte *) rb->Data + 3 * (y[i] * rb->Width + x[i]);
+         GLubyte *dst = ((GLubyte *) rb->Data) +
+                                    3 * (y[i] * rb->RowStride + x[i]);
          dst[0] = val0;
          dst[1] = val1;
          dst[2] = val2;
@@ -605,29 +709,6 @@ put_mono_values_ubyte3(struct gl_context *ctx, struct gl_renderbuffer *rb,
  * Typically color buffers.
  */
 
-static void *
-get_pointer_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb,
-                   GLint x, GLint y)
-{
-   if (!rb->Data)
-      return NULL;
-   ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
-   ASSERT(rb->Format == MESA_FORMAT_RGBA8888);
-   return (GLubyte *) rb->Data + 4 * (y * rb->Width + x);
-}
-
-
-static void
-get_row_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
-               GLint x, GLint y, void *values)
-{
-   const GLubyte *src = (const GLubyte *) rb->Data + 4 * (y * rb->Width + x);
-   ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
-   ASSERT(rb->Format == MESA_FORMAT_RGBA8888);
-   memcpy(values, src, 4 * count * sizeof(GLubyte));
-}
-
-
 static void
 get_values_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
                   const GLint x[], const GLint y[], void *values)
@@ -638,7 +719,7 @@ get_values_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint cou
    ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
    ASSERT(rb->Format == MESA_FORMAT_RGBA8888);
    for (i = 0; i < count; i++) {
-      const GLuint *src = (GLuint *) rb->Data + (y[i] * rb->Width + x[i]);
+      const GLuint *src = (GLuint *) rb->Data + (y[i] * rb->RowStride + x[i]);
       dst[i] = *src;
    }
 }
@@ -650,7 +731,7 @@ put_row_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
 {
    /* treat 4*GLubyte as 1*GLuint */
    const GLuint *src = (const GLuint *) values;
-   GLuint *dst = (GLuint *) rb->Data + (y * rb->Width + x);
+   GLuint *dst = (GLuint *) rb->Data + (y * rb->RowStride + x);
    ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
    ASSERT(rb->Format == MESA_FORMAT_RGBA8888);
    if (mask) {
@@ -673,7 +754,7 @@ put_row_rgb_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint co
 {
    /* Store RGB values in RGBA buffer */
    const GLubyte *src = (const GLubyte *) values;
-   GLubyte *dst = (GLubyte *) rb->Data + 4 * (y * rb->Width + x);
+   GLubyte *dst = (GLubyte *) rb->Data + 4 * (y * rb->RowStride + x);
    GLuint i;
    ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
    ASSERT(rb->Format == MESA_FORMAT_RGBA8888);
@@ -694,7 +775,7 @@ put_mono_row_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint c
 {
    /* treat 4*GLubyte as 1*GLuint */
    const GLuint val = *((const GLuint *) value);
-   GLuint *dst = (GLuint *) rb->Data + (y * rb->Width + x);
+   GLuint *dst = (GLuint *) rb->Data + (y * rb->RowStride + x);
    ASSERT(rb->DataType == GL_UNSIGNED_BYTE);
    ASSERT(rb->Format == MESA_FORMAT_RGBA8888);
    if (!mask && val == 0) {
@@ -733,7 +814,7 @@ put_values_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint cou
    ASSERT(rb->Format == MESA_FORMAT_RGBA8888);
    for (i = 0; i < count; i++) {
       if (!mask || mask[i]) {
-         GLuint *dst = (GLuint *) rb->Data + (y[i] * rb->Width + x[i]);
+         GLuint *dst = (GLuint *) rb->Data + (y[i] * rb->RowStride + x[i]);
          *dst = src[i];
       }
    }
@@ -752,7 +833,7 @@ put_mono_values_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb,
    ASSERT(rb->Format == MESA_FORMAT_RGBA8888);
    for (i = 0; i < count; i++) {
       if (!mask || mask[i]) {
-         GLuint *dst = (GLuint *) rb->Data + (y[i] * rb->Width + x[i]);
+         GLuint *dst = (GLuint *) rb->Data + (y[i] * rb->RowStride + x[i]);
          *dst = val;
       }
    }
@@ -764,27 +845,6 @@ put_mono_values_ubyte4(struct gl_context *ctx, struct gl_renderbuffer *rb,
  * Typically accum buffer.
  */
 
-static void *
-get_pointer_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb,
-                    GLint x, GLint y)
-{
-   if (!rb->Data)
-      return NULL;
-   ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT);
-   return (GLushort *) rb->Data + 4 * (y * rb->Width + x);
-}
-
-
-static void
-get_row_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
-                GLint x, GLint y, void *values)
-{
-   const GLshort *src = (const GLshort *) rb->Data + 4 * (y * rb->Width + x);
-   ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT);
-   memcpy(values, src, 4 * count * sizeof(GLshort));
-}
-
-
 static void
 get_values_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
                    const GLint x[], const GLint y[], void *values)
@@ -794,7 +854,7 @@ get_values_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint co
    ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT);
    for (i = 0; i < count; i++) {
       const GLushort *src
-         = (GLushort *) rb->Data + 4 * (y[i] * rb->Width + x[i]);
+         = (GLushort *) rb->Data + 4 * (y[i] * rb->RowStride + x[i]);
       dst[i] = *src;
    }
 }
@@ -805,7 +865,7 @@ put_row_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count
                 GLint x, GLint y, const void *values, const GLubyte *mask)
 {
    const GLushort *src = (const GLushort *) values;
-   GLushort *dst = (GLushort *) rb->Data + 4 * (y * rb->Width + x);
+   GLushort *dst = (GLushort *) rb->Data + 4 * (y * rb->RowStride + x);
    ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT);
    if (mask) {
       GLuint i;
@@ -830,7 +890,7 @@ put_row_rgb_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint c
 {
    /* Put RGB values in RGBA buffer */
    const GLushort *src = (const GLushort *) values;
-   GLushort *dst = (GLushort *) rb->Data + 4 * (y * rb->Width + x);
+   GLushort *dst = (GLushort *) rb->Data + 4 * (y * rb->RowStride + x);
    ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT);
    if (mask) {
       GLuint i;
@@ -857,7 +917,7 @@ put_mono_row_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint
    const GLushort val1 = ((const GLushort *) value)[1];
    const GLushort val2 = ((const GLushort *) value)[2];
    const GLushort val3 = ((const GLushort *) value)[3];
-   GLushort *dst = (GLushort *) rb->Data + 4 * (y * rb->Width + x);
+   GLushort *dst = (GLushort *) rb->Data + 4 * (y * rb->RowStride + x);
    ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT);
    if (!mask && val0 == 0 && val1 == 0 && val2 == 0 && val3 == 0) {
       /* common case for clearing accum buffer */
@@ -887,7 +947,8 @@ put_values_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint co
    ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT);
    for (i = 0; i < count; i++) {
       if (!mask || mask[i]) {
-         GLushort *dst = (GLushort *) rb->Data + 4 * (y[i] * rb->Width + x[i]);
+         GLushort *dst =
+            ((GLushort *) rb->Data) + 4 * (y[i] * rb->RowStride + x[i]);
          dst[0] = src[i * 4 + 0];
          dst[1] = src[i * 4 + 1];
          dst[2] = src[i * 4 + 2];
@@ -910,7 +971,8 @@ put_mono_values_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb,
    ASSERT(rb->DataType == GL_UNSIGNED_SHORT || rb->DataType == GL_SHORT);
    for (i = 0; i < count; i++) {
       if (!mask || mask[i]) {
-         GLushort *dst = (GLushort *) rb->Data + 4 * (y[i] * rb->Width + x[i]);
+         GLushort *dst = ((GLushort *) rb->Data) +
+                                      4 * (y[i] * rb->RowStride + x[i]);
          dst[0] = val0;
          dst[1] = val1;
          dst[2] = val2;
@@ -919,177 +981,684 @@ put_mono_values_ushort4(struct gl_context *ctx, struct gl_renderbuffer *rb,
    }
 }
 
+/**********************************************************************
+ * Functions for MESA_FORMAT_R8.
+ */
+static void
+get_row_r8(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
+          GLint x, GLint y, void *values)
+{
+   const GLubyte *src = rb->GetPointer(ctx, rb, x, y);
+   GLuint *dst = values;
+   GLuint i;
 
+   for (i = 0; i < count; i++) {
+      dst[i] = 0xff000000 | src[i];
+   }
+}
 
-/**
- * This is a software fallback for the gl_renderbuffer->AllocStorage
- * function.
- * Device drivers will typically override this function for the buffers
- * which it manages (typically color buffers, Z and stencil).
- * Other buffers (like software accumulation and aux buffers) which the driver
- * doesn't manage can be handled with this function.
- *
- * This one multi-purpose function can allocate stencil, depth, accum, color
- * or color-index buffers!
- *
- * This function also plugs in the appropriate GetPointer, Get/PutRow and
- * Get/PutValues functions.
+static void
+get_values_r8(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
+             const GLint x[], const GLint y[], void *values)
+{
+   GLuint *dst = (GLuint *) values;
+   GLuint i;
+
+   for (i = 0; i < count; i++) {
+      const GLubyte *src = rb->GetPointer(ctx, rb, x[i], y[i]);
+      dst[i] = 0xff000000 | *src;
+   }
+}
+
+/**********************************************************************
+ * Functions for MESA_FORMAT_RG88.
  */
-GLboolean
-_mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *rb,
-                                GLenum internalFormat,
-                                GLuint width, GLuint height)
+static void
+get_row_rg88(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
+            GLint x, GLint y, void *values)
 {
-   GLuint pixelSize;
+   const GLushort *src = rb->GetPointer(ctx, rb, x, y);
+   GLuint *dst = values;
+   GLuint i;
 
-   switch (internalFormat) {
-   case GL_RGB:
-   case GL_R3_G3_B2:
-   case GL_RGB4:
-   case GL_RGB5:
-   case GL_RGB8:
-   case GL_RGB10:
-   case GL_RGB12:
-   case GL_RGB16:
-      rb->Format = MESA_FORMAT_RGB888;
-      rb->DataType = GL_UNSIGNED_BYTE;
-      rb->GetPointer = get_pointer_ubyte3;
-      rb->GetRow = get_row_ubyte3;
-      rb->GetValues = get_values_ubyte3;
-      rb->PutRow = put_row_ubyte3;
-      rb->PutRowRGB = put_row_rgb_ubyte3;
-      rb->PutMonoRow = put_mono_row_ubyte3;
-      rb->PutValues = put_values_ubyte3;
-      rb->PutMonoValues = put_mono_values_ubyte3;
-      pixelSize = 3 * sizeof(GLubyte);
-      break;
-   case GL_RGBA:
-   case GL_RGBA2:
-   case GL_RGBA4:
-   case GL_RGB5_A1:
-   case GL_RGBA8:
-#if 1
-   case GL_RGB10_A2:
-   case GL_RGBA12:
-#endif
-      rb->Format = MESA_FORMAT_RGBA8888;
-      rb->DataType = GL_UNSIGNED_BYTE;
-      rb->GetPointer = get_pointer_ubyte4;
-      rb->GetRow = get_row_ubyte4;
-      rb->GetValues = get_values_ubyte4;
-      rb->PutRow = put_row_ubyte4;
-      rb->PutRowRGB = put_row_rgb_ubyte4;
-      rb->PutMonoRow = put_mono_row_ubyte4;
-      rb->PutValues = put_values_ubyte4;
-      rb->PutMonoValues = put_mono_values_ubyte4;
-      pixelSize = 4 * sizeof(GLubyte);
-      break;
-   case GL_RGBA16:
-   case GL_RGBA16_SNORM:
-      /* for accum buffer */
-      rb->Format = MESA_FORMAT_SIGNED_RGBA_16;
-      rb->DataType = GL_SHORT;
-      rb->GetPointer = get_pointer_ushort4;
-      rb->GetRow = get_row_ushort4;
-      rb->GetValues = get_values_ushort4;
-      rb->PutRow = put_row_ushort4;
-      rb->PutRowRGB = put_row_rgb_ushort4;
-      rb->PutMonoRow = put_mono_row_ushort4;
-      rb->PutValues = put_values_ushort4;
-      rb->PutMonoValues = put_mono_values_ushort4;
-      pixelSize = 4 * sizeof(GLushort);
-      break;
-#if 0
-   case GL_ALPHA8:
-      rb->Format = MESA_FORMAT_A8;
-      rb->DataType = GL_UNSIGNED_BYTE;
-      rb->GetPointer = get_pointer_alpha8;
-      rb->GetRow = get_row_alpha8;
-      rb->GetValues = get_values_alpha8;
-      rb->PutRow = put_row_alpha8;
-      rb->PutRowRGB = NULL;
-      rb->PutMonoRow = put_mono_row_alpha8;
-      rb->PutValues = put_values_alpha8;
-      rb->PutMonoValues = put_mono_values_alpha8;
-      pixelSize = sizeof(GLubyte);
-      break;
-#endif
-   case GL_STENCIL_INDEX:
-   case GL_STENCIL_INDEX1_EXT:
-   case GL_STENCIL_INDEX4_EXT:
-   case GL_STENCIL_INDEX8_EXT:
-   case GL_STENCIL_INDEX16_EXT:
-      rb->Format = MESA_FORMAT_S8;
-      rb->DataType = GL_UNSIGNED_BYTE;
-      rb->GetPointer = get_pointer_ubyte;
-      rb->GetRow = get_row_ubyte;
-      rb->GetValues = get_values_ubyte;
+   for (i = 0; i < count; i++) {
+      dst[i] = 0xff000000 | src[i];
+   }
+}
+
+static void
+get_values_rg88(struct gl_context *ctx, struct gl_renderbuffer *rb,
+               GLuint count, const GLint x[], const GLint y[], void *values)
+{
+   GLuint *dst = (GLuint *) values;
+   GLuint i;
+
+   for (i = 0; i < count; i++) {
+      const GLshort *src = rb->GetPointer(ctx, rb, x[i], y[i]);
+      dst[i] = 0xff000000 | *src;
+   }
+}
+
+/**********************************************************************
+ * Functions for MESA_FORMAT_R16.
+ */
+static void
+get_row_r16(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
+           GLint x, GLint y, void *values)
+{
+   const GLushort *src = rb->GetPointer(ctx, rb, x, y);
+   GLushort *dst = values;
+   GLuint i;
+
+   for (i = 0; i < count; i++) {
+      dst[i * 4 + RCOMP] = src[i];
+      dst[i * 4 + GCOMP] = 0;
+      dst[i * 4 + BCOMP] = 0;
+      dst[i * 4 + ACOMP] = 0xffff;
+   }
+}
+
+static void
+get_values_r16(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
+              const GLint x[], const GLint y[], void *values)
+{
+   GLushort *dst = values;
+   GLuint i;
+
+   for (i = 0; i < count; i++) {
+      const GLushort *src = rb->GetPointer(ctx, rb, x[i], y[i]);
+      dst[i * 4 + RCOMP] = *src;
+      dst[i * 4 + GCOMP] = 0;
+      dst[i * 4 + BCOMP] = 0;
+      dst[i * 4 + ACOMP] = 0xffff;
+   }
+}
+
+/**********************************************************************
+ * Functions for MESA_FORMAT_RG1616.
+ */
+static void
+get_row_rg1616(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count,
+              GLint x, GLint y, void *values)
+{
+   const GLushort *src = rb->GetPointer(ctx, rb, x, y);
+   GLushort *dst = values;
+   GLuint i;
+
+   for (i = 0; i < count; i++) {
+      dst[i * 4 + RCOMP] = src[i * 2];
+      dst[i * 4 + GCOMP] = src[i * 2 + 1];
+      dst[i * 4 + BCOMP] = 0;
+      dst[i * 4 + ACOMP] = 0xffff;
+   }
+}
+
+static void
+get_values_rg1616(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                 GLuint count, const GLint x[], const GLint y[], void *values)
+{
+   GLushort *dst = values;
+   GLuint i;
+
+   for (i = 0; i < count; i++) {
+      const GLshort *src = rb->GetPointer(ctx, rb, x[i], y[i]);
+      dst[i * 4 + RCOMP] = src[0];
+      dst[i * 4 + GCOMP] = src[1];
+      dst[i * 4 + BCOMP] = 0;
+      dst[i * 4 + ACOMP] = 0xffff;
+   }
+}
+
+/**********************************************************************
+ * Functions for MESA_FORMAT_INTENSITY_FLOAT32.
+ */
+static void
+get_row_i_float32(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                 GLuint count, GLint x, GLint y, void *values)
+{
+   const GLfloat *src = rb->GetPointer(ctx, rb, x, y);
+   GLfloat *dst = values;
+   GLuint i;
+
+   for (i = 0; i < count; i++) {
+      dst[i * 4 + RCOMP] =
+      dst[i * 4 + GCOMP] =
+      dst[i * 4 + BCOMP] =
+      dst[i * 4 + ACOMP] = src[i];
+   }
+}
+
+static void
+get_values_i_float32(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                    GLuint count, const GLint x[], const GLint y[],
+                    void *values)
+{
+   GLfloat *dst = values;
+   GLuint i;
+
+   for (i = 0; i < count; i++) {
+      const GLfloat *src = rb->GetPointer(ctx, rb, x[i], y[i]);
+      dst[i * 4 + RCOMP] =
+      dst[i * 4 + GCOMP] =
+      dst[i * 4 + BCOMP] =
+      dst[i * 4 + ACOMP] = src[0];
+   }
+}
+
+/**********************************************************************
+ * Functions for MESA_FORMAT_LUMINANCE_FLOAT32.
+ */
+static void
+get_row_l_float32(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                 GLuint count, GLint x, GLint y, void *values)
+{
+   const GLfloat *src = rb->GetPointer(ctx, rb, x, y);
+   GLfloat *dst = values;
+   GLuint i;
+
+   for (i = 0; i < count; i++) {
+      dst[i * 4 + RCOMP] =
+      dst[i * 4 + GCOMP] =
+      dst[i * 4 + BCOMP] = src[i];
+      dst[i * 4 + ACOMP] = 1.0;
+   }
+}
+
+static void
+get_values_l_float32(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                    GLuint count, const GLint x[], const GLint y[],
+                    void *values)
+{
+   GLfloat *dst = values;
+   GLuint i;
+
+   for (i = 0; i < count; i++) {
+      const GLfloat *src = rb->GetPointer(ctx, rb, x[i], y[i]);
+      dst[i * 4 + RCOMP] =
+      dst[i * 4 + GCOMP] =
+      dst[i * 4 + BCOMP] = src[0];
+      dst[i * 4 + ACOMP] = 1.0;
+   }
+}
+
+/**********************************************************************
+ * Functions for MESA_FORMAT_ALPHA_FLOAT32.
+ */
+static void
+get_row_a_float32(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                 GLuint count, GLint x, GLint y, void *values)
+{
+   const GLfloat *src = rb->GetPointer(ctx, rb, x, y);
+   GLfloat *dst = values;
+   GLuint i;
+
+   for (i = 0; i < count; i++) {
+      dst[i * 4 + RCOMP] = 0.0;
+      dst[i * 4 + GCOMP] = 0.0;
+      dst[i * 4 + BCOMP] = 0.0;
+      dst[i * 4 + ACOMP] = src[i];
+   }
+}
+
+static void
+get_values_a_float32(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                    GLuint count, const GLint x[], const GLint y[],
+                    void *values)
+{
+   GLfloat *dst = values;
+   GLuint i;
+
+   for (i = 0; i < count; i++) {
+      const GLfloat *src = rb->GetPointer(ctx, rb, x[i], y[i]);
+      dst[i * 4 + RCOMP] = 0.0;
+      dst[i * 4 + GCOMP] = 0.0;
+      dst[i * 4 + BCOMP] = 0.0;
+      dst[i * 4 + ACOMP] = src[0];
+   }
+}
+
+static void
+put_row_a_float32(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                 GLuint count, GLint x, GLint y,
+                 const void *values, const GLubyte *mask)
+{
+   float *dst = rb->GetPointer(ctx, rb, x, y);
+   const float *src = values;
+   unsigned int i;
+
+   if (mask) {
+      for (i = 0; i < count; i++) {
+         if (mask[i]) {
+           dst[i] = src[i * 4 + ACOMP];
+         }
+      }
+   }
+   else {
+      for (i = 0; i < count; i++) {
+        dst[i] = src[i * 4 + ACOMP];
+      }
+   }
+}
+
+static void
+put_mono_row_a_float32(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                      GLuint count, GLint x, GLint y,
+                      const void *value, const GLubyte *mask)
+{
+   float *dst = rb->GetPointer(ctx, rb, x, y);
+   const float *src = value;
+   unsigned int i;
+
+   if (mask) {
+      for (i = 0; i < count; i++) {
+         if (mask[i]) {
+           dst[i] = src[ACOMP];
+         }
+      }
+   }
+   else {
+      for (i = 0; i < count; i++) {
+        dst[i] = src[ACOMP];
+      }
+   }
+}
+
+static void
+put_values_a_float32(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                    GLuint count, const GLint x[], const GLint y[],
+                    const void *values, const GLubyte *mask)
+{
+   const float *src = values;
+   unsigned int i;
+
+   for (i = 0; i < count; i++) {
+      if (!mask || mask[i]) {
+        float *dst = rb->GetPointer(ctx, rb, x[i], y[i]);
+
+        *dst = src[i * 4 + ACOMP];
+      }
+   }
+}
+
+static void
+put_mono_values_a_float32(struct gl_context *ctx,
+                         struct gl_renderbuffer *rb,
+                         GLuint count, const GLint x[], const GLint y[],
+                         const void *value, const GLubyte *mask)
+{
+   const float *src = value;
+   unsigned int i;
+
+   for (i = 0; i < count; i++) {
+      if (!mask || mask[i]) {
+        float *dst = rb->GetPointer(ctx, rb, x[i], y[i]);
+        *dst = src[ACOMP];
+      }
+   }
+}
+
+/**********************************************************************
+ * Functions for MESA_FORMAT_R_FLOAT32.
+ */
+static void
+get_row_r_float32(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                 GLuint count, GLint x, GLint y, void *values)
+{
+   const GLfloat *src = rb->GetPointer(ctx, rb, x, y);
+   GLfloat *dst = values;
+   GLuint i;
+
+   for (i = 0; i < count; i++) {
+      dst[i * 4 + RCOMP] = src[i];
+      dst[i * 4 + GCOMP] = 0.0;
+      dst[i * 4 + BCOMP] = 0.0;
+      dst[i * 4 + ACOMP] = 1.0;
+   }
+}
+
+static void
+get_values_r_float32(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                    GLuint count, const GLint x[], const GLint y[],
+                    void *values)
+{
+   GLfloat *dst = values;
+   GLuint i;
+
+   for (i = 0; i < count; i++) {
+      const GLfloat *src = rb->GetPointer(ctx, rb, x[i], y[i]);
+      dst[i * 4 + RCOMP] = src[0];
+      dst[i * 4 + GCOMP] = 0.0;
+      dst[i * 4 + BCOMP] = 0.0;
+      dst[i * 4 + ACOMP] = 1.0;
+   }
+}
+
+/**********************************************************************
+ * Functions for MESA_FORMAT_RG_FLOAT32.
+ */
+static void
+get_row_rg_float32(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                  GLuint count, GLint x, GLint y, void *values)
+{
+   const GLfloat *src = rb->GetPointer(ctx, rb, x, y);
+   GLfloat *dst = values;
+   GLuint i;
+
+   for (i = 0; i < count; i++) {
+      dst[i * 4 + RCOMP] = src[i * 2 + 0];
+      dst[i * 4 + GCOMP] = src[i * 2 + 1];
+      dst[i * 4 + BCOMP] = 0.0;
+      dst[i * 4 + ACOMP] = 1.0;
+   }
+}
+
+static void
+get_values_rg_float32(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                     GLuint count, const GLint x[], const GLint y[],
+                     void *values)
+{
+   GLfloat *dst = values;
+   GLuint i;
+
+   for (i = 0; i < count; i++) {
+      const GLfloat *src = rb->GetPointer(ctx, rb, x[i], y[i]);
+      dst[i * 4 + RCOMP] = src[0];
+      dst[i * 4 + GCOMP] = src[1];
+      dst[i * 4 + BCOMP] = 0.0;
+      dst[i * 4 + ACOMP] = 1.0;
+   }
+}
+
+/**
+ * This is the default software fallback for gl_renderbuffer's span
+ * access functions.
+ *
+ * The assumptions are that rb->Data will be a pointer to (0,0), that pixels
+ * are packed in the type of rb->Format, and that subsequent rows appear
+ * rb->RowStride pixels later.
+ */
+void
+_mesa_set_renderbuffer_accessors(struct gl_renderbuffer *rb)
+{
+   rb->GetPointer = get_pointer_generic;
+   rb->GetRow = get_row_generic;
+
+   switch (rb->Format) {
+   case MESA_FORMAT_RGB888:
+      rb->DataType = GL_UNSIGNED_BYTE;
+      rb->GetPointer = get_pointer_ubyte3;
+      rb->GetRow = get_row_ubyte3;
+      rb->GetValues = get_values_ubyte3;
+      rb->PutRow = put_row_ubyte3;
+      rb->PutRowRGB = put_row_rgb_ubyte3;
+      rb->PutMonoRow = put_mono_row_ubyte3;
+      rb->PutValues = put_values_ubyte3;
+      rb->PutMonoValues = put_mono_values_ubyte3;
+      break;
+
+   case MESA_FORMAT_RGBA8888:
+      rb->DataType = GL_UNSIGNED_BYTE;
+      rb->GetValues = get_values_ubyte4;
+      rb->PutRow = put_row_ubyte4;
+      rb->PutRowRGB = put_row_rgb_ubyte4;
+      rb->PutMonoRow = put_mono_row_ubyte4;
+      rb->PutValues = put_values_ubyte4;
+      rb->PutMonoValues = put_mono_values_ubyte4;
+      break;
+
+   case MESA_FORMAT_R8:
+      rb->DataType = GL_UNSIGNED_BYTE;
+      rb->GetValues = get_values_r8;
+      rb->GetRow = get_row_r8;
+      rb->PutRow = put_row_generic;
+      rb->PutRowRGB = put_row_generic;
+      rb->PutMonoRow = put_mono_row_generic;
+      rb->PutValues = put_values_generic;
+      rb->PutMonoValues = put_mono_values_generic;
+      break;
+
+   case MESA_FORMAT_RG88:
+      rb->DataType = GL_UNSIGNED_BYTE;
+      rb->GetValues = get_values_rg88;
+      rb->GetRow = get_row_rg88;
+      rb->PutRow = put_row_generic;
+      rb->PutRowRGB = put_row_generic;
+      rb->PutMonoRow = put_mono_row_generic;
+      rb->PutValues = put_values_generic;
+      rb->PutMonoValues = put_mono_values_generic;
+      break;
+
+   case MESA_FORMAT_R16:
+      rb->DataType = GL_UNSIGNED_SHORT;
+      rb->GetValues = get_values_r16;
+      rb->GetRow = get_row_r16;
+      rb->PutRow = put_row_generic;
+      rb->PutRowRGB = put_row_generic;
+      rb->PutMonoRow = put_mono_row_generic;
+      rb->PutValues = put_values_generic;
+      rb->PutMonoValues = put_mono_values_generic;
+      break;
+
+   case MESA_FORMAT_RG1616:
+      rb->DataType = GL_UNSIGNED_SHORT;
+      rb->GetValues = get_values_rg1616;
+      rb->GetRow = get_row_rg1616;
+      rb->PutRow = put_row_generic;
+      rb->PutRowRGB = put_row_generic;
+      rb->PutMonoRow = put_mono_row_generic;
+      rb->PutValues = put_values_generic;
+      rb->PutMonoValues = put_mono_values_generic;
+      break;
+
+   case MESA_FORMAT_SIGNED_RGBA_16:
+      rb->DataType = GL_SHORT;
+      rb->GetValues = get_values_ushort4;
+      rb->PutRow = put_row_ushort4;
+      rb->PutRowRGB = put_row_rgb_ushort4;
+      rb->PutMonoRow = put_mono_row_ushort4;
+      rb->PutValues = put_values_ushort4;
+      rb->PutMonoValues = put_mono_values_ushort4;
+      break;
+
+#if 0
+   case MESA_FORMAT_A8:
+      rb->DataType = GL_UNSIGNED_BYTE;
+      rb->GetValues = get_values_alpha8;
+      rb->PutRow = put_row_alpha8;
+      rb->PutRowRGB = NULL;
+      rb->PutMonoRow = put_mono_row_alpha8;
+      rb->PutValues = put_values_alpha8;
+      rb->PutMonoValues = put_mono_values_alpha8;
+      break;
+#endif
+
+   case MESA_FORMAT_S8:
+      rb->DataType = GL_UNSIGNED_BYTE;
+      rb->GetValues = get_values_ubyte;
       rb->PutRow = put_row_ubyte;
       rb->PutRowRGB = NULL;
       rb->PutMonoRow = put_mono_row_ubyte;
       rb->PutValues = put_values_ubyte;
       rb->PutMonoValues = put_mono_values_ubyte;
-      pixelSize = sizeof(GLubyte);
       break;
-   case GL_DEPTH_COMPONENT:
-   case GL_DEPTH_COMPONENT16:
-      rb->Format = MESA_FORMAT_Z16;
+
+   case MESA_FORMAT_Z16:
       rb->DataType = GL_UNSIGNED_SHORT;
-      rb->GetPointer = get_pointer_ushort;
-      rb->GetRow = get_row_ushort;
       rb->GetValues = get_values_ushort;
       rb->PutRow = put_row_ushort;
       rb->PutRowRGB = NULL;
       rb->PutMonoRow = put_mono_row_ushort;
       rb->PutValues = put_values_ushort;
       rb->PutMonoValues = put_mono_values_ushort;
-      pixelSize = sizeof(GLushort);
       break;
-   case GL_DEPTH_COMPONENT24:
+
+   case MESA_FORMAT_Z32:
+   case MESA_FORMAT_X8_Z24:
+   case MESA_FORMAT_Z24_X8:
       rb->DataType = GL_UNSIGNED_INT;
-      rb->GetPointer = get_pointer_uint;
-      rb->GetRow = get_row_uint;
       rb->GetValues = get_values_uint;
       rb->PutRow = put_row_uint;
       rb->PutRowRGB = NULL;
       rb->PutMonoRow = put_mono_row_uint;
       rb->PutValues = put_values_uint;
       rb->PutMonoValues = put_mono_values_uint;
-      rb->Format = MESA_FORMAT_X8_Z24;
-      pixelSize = sizeof(GLuint);
       break;
-   case GL_DEPTH_COMPONENT32:
-      rb->DataType = GL_UNSIGNED_INT;
-      rb->GetPointer = get_pointer_uint;
-      rb->GetRow = get_row_uint;
+
+   case MESA_FORMAT_Z24_S8:
+   case MESA_FORMAT_S8_Z24:
+      rb->DataType = GL_UNSIGNED_INT_24_8_EXT;
       rb->GetValues = get_values_uint;
       rb->PutRow = put_row_uint;
       rb->PutRowRGB = NULL;
       rb->PutMonoRow = put_mono_row_uint;
       rb->PutValues = put_values_uint;
       rb->PutMonoValues = put_mono_values_uint;
+      break;
+
+   case MESA_FORMAT_RGBA_FLOAT32:
+      rb->GetRow = get_row_generic;
+      rb->GetValues = get_values_generic;
+      rb->PutRow = put_row_generic;
+      rb->PutRowRGB = NULL;
+      rb->PutMonoRow = put_mono_row_generic;
+      rb->PutValues = put_values_generic;
+      rb->PutMonoValues = put_mono_values_generic;
+      break;
+
+   case MESA_FORMAT_INTENSITY_FLOAT32:
+      rb->GetRow = get_row_i_float32;
+      rb->GetValues = get_values_i_float32;
+      rb->PutRow = put_row_generic;
+      rb->PutRowRGB = NULL;
+      rb->PutMonoRow = put_mono_row_generic;
+      rb->PutValues = put_values_generic;
+      rb->PutMonoValues = put_mono_values_generic;
+      break;
+
+   case MESA_FORMAT_LUMINANCE_FLOAT32:
+      rb->GetRow = get_row_l_float32;
+      rb->GetValues = get_values_l_float32;
+      rb->PutRow = put_row_generic;
+      rb->PutRowRGB = NULL;
+      rb->PutMonoRow = put_mono_row_generic;
+      rb->PutValues = put_values_generic;
+      rb->PutMonoValues = put_mono_values_generic;
+      break;
+
+   case MESA_FORMAT_ALPHA_FLOAT32:
+      rb->GetRow = get_row_a_float32;
+      rb->GetValues = get_values_a_float32;
+      rb->PutRow = put_row_a_float32;
+      rb->PutRowRGB = NULL;
+      rb->PutMonoRow = put_mono_row_a_float32;
+      rb->PutValues = put_values_a_float32;
+      rb->PutMonoValues = put_mono_values_a_float32;
+      break;
+
+   case MESA_FORMAT_RG_FLOAT32:
+      rb->GetRow = get_row_rg_float32;
+      rb->GetValues = get_values_rg_float32;
+      rb->PutRow = put_row_generic;
+      rb->PutRowRGB = NULL;
+      rb->PutMonoRow = put_mono_row_generic;
+      rb->PutValues = put_values_generic;
+      rb->PutMonoValues = put_mono_values_generic;
+      break;
+
+   case MESA_FORMAT_R_FLOAT32:
+      rb->GetRow = get_row_r_float32;
+      rb->GetValues = get_values_r_float32;
+      rb->PutRow = put_row_generic;
+      rb->PutRowRGB = NULL;
+      rb->PutMonoRow = put_mono_row_generic;
+      rb->PutValues = put_values_generic;
+      rb->PutMonoValues = put_mono_values_generic;
+      break;
+
+   default:
+      break;
+   }
+}
+
+/**
+ * This is a software fallback for the gl_renderbuffer->AllocStorage
+ * function.
+ * Device drivers will typically override this function for the buffers
+ * which it manages (typically color buffers, Z and stencil).
+ * Other buffers (like software accumulation and aux buffers) which the driver
+ * doesn't manage can be handled with this function.
+ *
+ * This one multi-purpose function can allocate stencil, depth, accum, color
+ * or color-index buffers!
+ *
+ * This function also plugs in the appropriate GetPointer, Get/PutRow and
+ * Get/PutValues functions.
+ */
+GLboolean
+_mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                                GLenum internalFormat,
+                                GLuint width, GLuint height)
+{
+   switch (internalFormat) {
+   case GL_RGB:
+   case GL_R3_G3_B2:
+   case GL_RGB4:
+   case GL_RGB5:
+   case GL_RGB8:
+   case GL_RGB10:
+   case GL_RGB12:
+   case GL_RGB16:
+      rb->Format = MESA_FORMAT_RGB888;
+      break;
+   case GL_RGBA:
+   case GL_RGBA2:
+   case GL_RGBA4:
+   case GL_RGB5_A1:
+   case GL_RGBA8:
+#if 1
+   case GL_RGB10_A2:
+   case GL_RGBA12:
+#endif
+      rb->Format = MESA_FORMAT_RGBA8888;
+      break;
+   case GL_RGBA16:
+   case GL_RGBA16_SNORM:
+      /* for accum buffer */
+      rb->Format = MESA_FORMAT_SIGNED_RGBA_16;
+      break;
+#if 0
+   case GL_ALPHA8:
+      rb->Format = MESA_FORMAT_A8;
+      break;
+#endif
+   case GL_STENCIL_INDEX:
+   case GL_STENCIL_INDEX1_EXT:
+   case GL_STENCIL_INDEX4_EXT:
+   case GL_STENCIL_INDEX8_EXT:
+   case GL_STENCIL_INDEX16_EXT:
+      rb->Format = MESA_FORMAT_S8;
+      break;
+   case GL_DEPTH_COMPONENT:
+   case GL_DEPTH_COMPONENT16:
+      rb->Format = MESA_FORMAT_Z16;
+      break;
+   case GL_DEPTH_COMPONENT24:
+      rb->Format = MESA_FORMAT_X8_Z24;
+      break;
+   case GL_DEPTH_COMPONENT32:
       rb->Format = MESA_FORMAT_Z32;
-      pixelSize = sizeof(GLuint);
       break;
    case GL_DEPTH_STENCIL_EXT:
    case GL_DEPTH24_STENCIL8_EXT:
       rb->Format = MESA_FORMAT_Z24_S8;
-      rb->DataType = GL_UNSIGNED_INT_24_8_EXT;
-      rb->GetPointer = get_pointer_uint;
-      rb->GetRow = get_row_uint;
-      rb->GetValues = get_values_uint;
-      rb->PutRow = put_row_uint;
-      rb->PutRowRGB = NULL;
-      rb->PutMonoRow = put_mono_row_uint;
-      rb->PutValues = put_values_uint;
-      rb->PutMonoValues = put_mono_values_uint;
-      pixelSize = sizeof(GLuint);
       break;
    default:
       /* unsupported format */
       return GL_FALSE;
    }
 
+   _mesa_set_renderbuffer_accessors(rb);
+
    ASSERT(rb->DataType);
    ASSERT(rb->GetPointer);
    ASSERT(rb->GetRow);
@@ -1105,16 +1674,19 @@ _mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *
       rb->Data = NULL;
    }
 
+   rb->RowStride = width;
+
    if (width > 0 && height > 0) {
       /* allocate new buffer storage */
-      rb->Data = malloc(width * height * pixelSize);
+      rb->Data = malloc(width * height * _mesa_get_format_bytes(rb->Format));
 
       if (rb->Data == NULL) {
          rb->Width = 0;
          rb->Height = 0;
+        rb->RowStride = 0;
          _mesa_error(ctx, GL_OUT_OF_MEMORY,
                      "software renderbuffer allocation (%d x %d x %d)",
-                     width, height, pixelSize);
+                     width, height, _mesa_get_format_bytes(rb->Format));
          return GL_FALSE;
       }
    }
@@ -1122,7 +1694,20 @@ _mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *
    rb->Width = width;
    rb->Height = height;
    rb->_BaseFormat = _mesa_base_fbo_format(ctx, internalFormat);
-   ASSERT(rb->_BaseFormat);
+
+   if (rb->Name == 0 &&
+       internalFormat == GL_RGBA16_SNORM &&
+       rb->_BaseFormat == 0) {
+      /* NOTE: This is a special case just for accumulation buffers.
+       * This is a very limited use case- there's no snorm texturing or
+       * rendering going on.
+       */
+      rb->_BaseFormat = GL_RGBA;
+   }
+   else {
+      /* the internalFormat should have been error checked long ago */
+      ASSERT(rb->_BaseFormat);
+   }
 
    return GL_TRUE;
 }
@@ -1172,6 +1757,7 @@ alloc_storage_alpha8(struct gl_context *ctx, struct gl_renderbuffer *arb,
 
    arb->Width = width;
    arb->Height = height;
+   arb->RowStride = width;
 
    return GL_TRUE;
 }
@@ -1207,7 +1793,7 @@ get_row_alpha8(struct gl_context *ctx, struct gl_renderbuffer *arb, GLuint count
                GLint x, GLint y, void *values)
 {
    /* NOTE: 'values' is RGBA format! */
-   const GLubyte *src = (const GLubyte *) arb->Data + y * arb->Width + x;
+   const GLubyte *src = (const GLubyte *) arb->Data + y * arb->RowStride + x;
    GLubyte *dst = (GLubyte *) values;
    GLuint i;
    ASSERT(arb != arb->Wrapped);
@@ -1233,7 +1819,7 @@ get_values_alpha8(struct gl_context *ctx, struct gl_renderbuffer *arb, GLuint co
    arb->Wrapped->GetValues(ctx, arb->Wrapped, count, x, y, values);
    /* second, fill in alpha values from this buffer! */
    for (i = 0; i < count; i++) {
-      const GLubyte *src = (GLubyte *) arb->Data + y[i] * arb->Width + x[i];
+      const GLubyte *src = (GLubyte *) arb->Data + y[i] * arb->RowStride + x[i];
       dst[i * 4 + 3] = *src;
    }
 }
@@ -1244,7 +1830,7 @@ put_row_alpha8(struct gl_context *ctx, struct gl_renderbuffer *arb, GLuint count
                GLint x, GLint y, const void *values, const GLubyte *mask)
 {
    const GLubyte *src = (const GLubyte *) values;
-   GLubyte *dst = (GLubyte *) arb->Data + y * arb->Width + x;
+   GLubyte *dst = (GLubyte *) arb->Data + y * arb->RowStride + x;
    GLuint i;
    ASSERT(arb != arb->Wrapped);
    ASSERT(arb->DataType == GL_UNSIGNED_BYTE);
@@ -1264,7 +1850,7 @@ put_row_rgb_alpha8(struct gl_context *ctx, struct gl_renderbuffer *arb, GLuint c
                    GLint x, GLint y, const void *values, const GLubyte *mask)
 {
    const GLubyte *src = (const GLubyte *) values;
-   GLubyte *dst = (GLubyte *) arb->Data + y * arb->Width + x;
+   GLubyte *dst = (GLubyte *) arb->Data + y * arb->RowStride + x;
    GLuint i;
    ASSERT(arb != arb->Wrapped);
    ASSERT(arb->DataType == GL_UNSIGNED_BYTE);
@@ -1284,7 +1870,7 @@ put_mono_row_alpha8(struct gl_context *ctx, struct gl_renderbuffer *arb, GLuint
                     GLint x, GLint y, const void *value, const GLubyte *mask)
 {
    const GLubyte val = ((const GLubyte *) value)[3];
-   GLubyte *dst = (GLubyte *) arb->Data + y * arb->Width + x;
+   GLubyte *dst = (GLubyte *) arb->Data + y * arb->RowStride + x;
    ASSERT(arb != arb->Wrapped);
    ASSERT(arb->DataType == GL_UNSIGNED_BYTE);
    /* first, pass the call to the wrapped RGB buffer */
@@ -1318,7 +1904,7 @@ put_values_alpha8(struct gl_context *ctx, struct gl_renderbuffer *arb, GLuint co
    /* second, store alpha in our buffer */
    for (i = 0; i < count; i++) {
       if (!mask || mask[i]) {
-         GLubyte *dst = (GLubyte *) arb->Data + y[i] * arb->Width + x[i];
+         GLubyte *dst = (GLubyte *) arb->Data + y[i] * arb->RowStride + x[i];
          *dst = src[i * 4 + 3];
       }
    }
@@ -1339,7 +1925,7 @@ put_mono_values_alpha8(struct gl_context *ctx, struct gl_renderbuffer *arb,
    /* second, store alpha in our buffer */
    for (i = 0; i < count; i++) {
       if (!mask || mask[i]) {
-         GLubyte *dst = (GLubyte *) arb->Data + y[i] * arb->Width + x[i];
+         GLubyte *dst = (GLubyte *) arb->Data + y[i] * arb->RowStride + x[i];
          *dst = val;
       }
    }
@@ -1353,8 +1939,9 @@ copy_buffer_alpha8(struct gl_renderbuffer* dst, struct gl_renderbuffer* src)
    ASSERT(src->Format == MESA_FORMAT_A8);
    ASSERT(dst->Width == src->Width);
    ASSERT(dst->Height == src->Height);
+   ASSERT(dst->RowStride == src->RowStride);
 
-   memcpy(dst->Data, src->Data, dst->Width * dst->Height * sizeof(GLubyte));
+   memcpy(dst->Data, src->Data, dst->RowStride * dst->Height * sizeof(GLubyte));
 }
 
 
@@ -1382,7 +1969,6 @@ _mesa_init_renderbuffer(struct gl_renderbuffer *rb, GLuint name)
 {
    _glthread_INIT_MUTEX(rb->Mutex);
 
-   rb->Magic = RB_MAGIC;
    rb->ClassID = 0;
    rb->Name = name;
    rb->RefCount = 0;
@@ -1957,9 +2543,7 @@ _mesa_reference_renderbuffer(struct gl_renderbuffer **ptr,
       GLboolean deleteFlag = GL_FALSE;
       struct gl_renderbuffer *oldRb = *ptr;
 
-      assert(oldRb->Magic == RB_MAGIC);
       _glthread_LOCK_MUTEX(oldRb->Mutex);
-      assert(oldRb->Magic == RB_MAGIC);
       ASSERT(oldRb->RefCount > 0);
       oldRb->RefCount--;
       /*printf("RB DECR %p (%d) to %d\n", (void*) oldRb, oldRb->Name, oldRb->RefCount);*/
@@ -1967,7 +2551,6 @@ _mesa_reference_renderbuffer(struct gl_renderbuffer **ptr,
       _glthread_UNLOCK_MUTEX(oldRb->Mutex);
 
       if (deleteFlag) {
-         oldRb->Magic = 0; /* now invalid memory! */
          oldRb->Delete(oldRb);
       }
 
@@ -1976,7 +2559,6 @@ _mesa_reference_renderbuffer(struct gl_renderbuffer **ptr,
    assert(!*ptr);
 
    if (rb) {
-      assert(rb->Magic == RB_MAGIC);
       /* reference new renderbuffer */
       _glthread_LOCK_MUTEX(rb->Mutex);
       rb->RefCount++;
index 4702a8e952a247f9ac25176153b4844f5d648639..39d9b3035e6c73ac9c4e54347d99c461f0aebefd 100644 (file)
@@ -46,6 +46,8 @@ _mesa_delete_renderbuffer(struct gl_renderbuffer *rb);
 extern struct gl_renderbuffer *
 _mesa_new_soft_renderbuffer(struct gl_context *ctx, GLuint name);
 
+extern void
+_mesa_set_renderbuffer_accessors(struct gl_renderbuffer *rb);
 
 extern GLboolean
 _mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *rb,
diff --git a/src/mesa/main/samplerobj.c b/src/mesa/main/samplerobj.c
new file mode 100644 (file)
index 0000000..4a28c91
--- /dev/null
@@ -0,0 +1,1355 @@
+/*
+ * Mesa 3-D graphics library
+ *
+ * Copyright (C) 2011  VMware, 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 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 samplerobj.c
+ * \brief Functions for the GL_ARB_sampler_objects extension.
+ * \author Brian Paul
+ */
+
+
+#include "main/glheader.h"
+#include "main/context.h"
+#include "main/dispatch.h"
+#include "main/enums.h"
+#include "main/hash.h"
+#include "main/macros.h"
+#include "main/mfeatures.h"
+#include "main/mtypes.h"
+#include "main/samplerobj.h"
+
+
+static struct gl_sampler_object *
+_mesa_lookup_samplerobj(struct gl_context *ctx, GLuint name)
+{
+   if (name == 0)
+      return NULL;
+   else
+      return (struct gl_sampler_object *)
+         _mesa_HashLookup(ctx->Shared->SamplerObjects, name);
+}
+
+
+/**
+ * Handle reference counting.
+ */
+void
+_mesa_reference_sampler_object(struct gl_context *ctx,
+                               struct gl_sampler_object **ptr,
+                               struct gl_sampler_object *samp)
+{
+   if (*ptr == samp)
+      return;
+
+   if (*ptr) {
+      /* Unreference the old sampler */
+      GLboolean deleteFlag = GL_FALSE;
+      struct gl_sampler_object *oldSamp = *ptr;
+
+      /*_glthread_LOCK_MUTEX(oldSamp->Mutex);*/
+      ASSERT(oldSamp->RefCount > 0);
+      oldSamp->RefCount--;
+#if 0
+      printf("SamplerObj %p %d DECR to %d\n",
+             (void *) oldSamp, oldSamp->Name, oldSamp->RefCount);
+#endif
+      deleteFlag = (oldSamp->RefCount == 0);
+      /*_glthread_UNLOCK_MUTEX(oldSamp->Mutex);*/
+
+      if (deleteFlag) {
+        ASSERT(ctx->Driver.DeleteSamplerObject);
+         ctx->Driver.DeleteSamplerObject(ctx, oldSamp);
+      }
+
+      *ptr = NULL;
+   }
+   ASSERT(!*ptr);
+
+   if (samp) {
+      /* reference new sampler */
+      /*_glthread_LOCK_MUTEX(samp->Mutex);*/
+      if (samp->RefCount == 0) {
+         /* this sampler's being deleted (look just above) */
+         /* Not sure this can every really happen.  Warn if it does. */
+         _mesa_problem(NULL, "referencing deleted sampler object");
+         *ptr = NULL;
+      }
+      else {
+         samp->RefCount++;
+#if 0
+         printf("SamplerObj %p %d INCR to %d\n",
+                (void *) samp, samp->Name, samp->RefCount);
+#endif
+         *ptr = samp;
+      }
+      /*_glthread_UNLOCK_MUTEX(samp->Mutex);*/
+   }
+}
+
+
+/**
+ * Initialize the fields of the given sampler object.
+ */
+void
+_mesa_init_sampler_object(struct gl_sampler_object *sampObj, GLuint name)
+{
+   sampObj->Name = name;
+   sampObj->RefCount = 1;
+   sampObj->WrapS = GL_REPEAT;
+   sampObj->WrapT = GL_REPEAT;
+   sampObj->WrapR = GL_REPEAT;
+   sampObj->MinFilter = GL_NEAREST_MIPMAP_LINEAR;
+   sampObj->MagFilter = GL_LINEAR;
+   sampObj->BorderColor.f[0] = 0.0;
+   sampObj->BorderColor.f[1] = 0.0;
+   sampObj->BorderColor.f[2] = 0.0;
+   sampObj->BorderColor.f[3] = 0.0;
+   sampObj->MinLod = -1000.0F;
+   sampObj->MaxLod = 1000.0F;
+   sampObj->LodBias = 0.0F;
+   sampObj->MaxAnisotropy = 1.0F;
+   sampObj->CompareMode = GL_NONE;
+   sampObj->CompareFunc = GL_LEQUAL;
+   sampObj->CompareFailValue = 0.0;
+   sampObj->sRGBDecode = GL_FALSE;
+   sampObj->DepthMode = 0;
+}
+
+
+/**
+ * Fallback for ctx->Driver.NewSamplerObject();
+ */
+struct gl_sampler_object *
+_mesa_new_sampler_object(struct gl_context *ctx, GLuint name)
+{
+   struct gl_sampler_object *sampObj = CALLOC_STRUCT(gl_sampler_object);
+   if (sampObj) {
+      _mesa_init_sampler_object(sampObj, name);
+   }
+   return sampObj;
+}
+
+
+/**
+ * Fallback for ctx->Driver.DeleteSamplerObject();
+ */
+void
+_mesa_delete_sampler_object(struct gl_context *ctx,
+                            struct gl_sampler_object *sampObj)
+{
+   FREE(sampObj);
+}
+
+
+static void GLAPIENTRY
+_mesa_GenSamplers(GLsizei count, GLuint *samplers)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   GLuint first;
+   GLint i;
+
+   ASSERT_OUTSIDE_BEGIN_END(ctx);
+
+   if (MESA_VERBOSE & VERBOSE_API)
+      _mesa_debug(ctx, "glGenSamplers(%d)\n", count);
+
+   if (count < 0) {
+      _mesa_error(ctx, GL_INVALID_VALUE, "glGenSamplers");
+      return;
+   }
+
+   if (!samplers)
+      return;
+
+   first = _mesa_HashFindFreeKeyBlock(ctx->Shared->SamplerObjects, count);
+
+   /* Insert the ID and pointer to new sampler object into hash table */
+   for (i = 0; i < count; i++) {
+      struct gl_sampler_object *sampObj =
+         ctx->Driver.NewSamplerObject(ctx, first + i);
+      _mesa_HashInsert(ctx->Shared->SamplerObjects, first + i, sampObj);
+      samplers[i] = first + i;
+   }
+}
+
+
+static void GLAPIENTRY
+_mesa_DeleteSamplers(GLsizei count, const GLuint *samplers)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   GLsizei i;
+
+   ASSERT_OUTSIDE_BEGIN_END(ctx);
+   FLUSH_VERTICES(ctx, 0);
+
+   if (count < 0) {
+      _mesa_error(ctx, GL_INVALID_VALUE, "glDeleteSamplers(count)");
+      return;
+   }
+
+   _glthread_LOCK_MUTEX(ctx->Shared->Mutex);
+
+   for (i = 0; i < count; i++) {
+      if (samplers[i]) {
+         struct gl_sampler_object *sampObj =
+            _mesa_lookup_samplerobj(ctx, samplers[i]);
+         if (sampObj) {
+            /* The ID is immediately freed for re-use */
+            _mesa_HashRemove(ctx->Shared->SamplerObjects, samplers[i]);
+            /* But the object exists until its reference count goes to zero */
+            _mesa_reference_sampler_object(ctx, &sampObj, NULL);
+         }
+      }
+   }
+
+   _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex);
+}
+
+
+static GLboolean GLAPIENTRY
+_mesa_IsSampler(GLuint sampler)
+{
+   struct gl_sampler_object *sampObj;
+   GET_CURRENT_CONTEXT(ctx);
+
+   ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE);
+
+   if (sampler == 0)
+      return GL_FALSE;
+
+   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
+
+   return sampObj != NULL;
+}
+
+
+static void GLAPIENTRY
+_mesa_BindSampler(GLuint unit, GLuint sampler)
+{
+   struct gl_sampler_object *sampObj;
+   GET_CURRENT_CONTEXT(ctx);
+
+   if (unit >= ctx->Const.MaxTextureImageUnits) {
+      _mesa_error(ctx, GL_INVALID_VALUE, "glBindSampler(unit %u)", unit);
+      return;
+   }
+
+   if (sampler == 0) {
+      /* Use the default sampler object, the one contained in the texture
+       * object.
+       */
+      sampObj = NULL;
+   }
+   else {
+      /* user-defined sampler object */
+      sampObj = _mesa_lookup_samplerobj(ctx, sampler);
+      if (!sampObj) {
+         _mesa_error(ctx, GL_INVALID_OPERATION, "glBindSampler(sampler)");
+         return;
+      }
+   }
+   
+   if (ctx->Texture.Unit[unit].Sampler != sampObj) {
+      FLUSH_VERTICES(ctx, _NEW_TEXTURE);
+   }
+
+   /* bind new sampler */
+   _mesa_reference_sampler_object(ctx, &ctx->Texture.Unit[unit].Sampler,
+                                  sampObj);
+}
+
+
+/**
+ * Check if a coordinate wrap mode is legal.
+ * \return GL_TRUE if legal, GL_FALSE otherwise
+ */
+static GLboolean 
+validate_texture_wrap_mode(struct gl_context *ctx, GLenum wrap)
+{
+   const struct gl_extensions * const e = &ctx->Extensions;
+
+   switch (wrap) {
+   case GL_CLAMP:
+   case GL_CLAMP_TO_EDGE:
+   case GL_REPEAT:
+      return GL_TRUE;
+   case GL_CLAMP_TO_BORDER:
+      return e->ARB_texture_border_clamp;
+   case GL_MIRRORED_REPEAT:
+      return e->ARB_texture_mirrored_repeat;
+   case GL_MIRROR_CLAMP_EXT:
+      return e->ATI_texture_mirror_once || e->EXT_texture_mirror_clamp;
+   case GL_MIRROR_CLAMP_TO_EDGE_EXT:
+      return e->ATI_texture_mirror_once || e->EXT_texture_mirror_clamp;
+   case GL_MIRROR_CLAMP_TO_BORDER_EXT:
+      return e->EXT_texture_mirror_clamp;
+   default:
+      return GL_FALSE;
+   }
+}
+
+
+/**
+ * This is called just prior to changing any sampler object state.
+ */
+static INLINE void
+flush(struct gl_context *ctx)
+{
+   FLUSH_VERTICES(ctx, _NEW_TEXTURE);
+}
+
+
+#define INVALID_PARAM 0x100
+#define INVALID_PNAME 0x101
+#define INVALID_VALUE 0x102
+
+static GLuint
+set_sampler_wrap_s(struct gl_context *ctx, struct gl_sampler_object *samp,
+                   GLint param)
+{
+   if (samp->WrapS == param)
+      return GL_FALSE;
+   if (validate_texture_wrap_mode(ctx, param)) {
+      flush(ctx);
+      samp->WrapS = param;
+      return GL_TRUE;
+   }
+   return INVALID_PARAM;
+}
+
+
+static GLuint
+set_sampler_wrap_t(struct gl_context *ctx, struct gl_sampler_object *samp,
+                   GLint param)
+{
+   if (samp->WrapT == param)
+      return GL_FALSE;
+   if (validate_texture_wrap_mode(ctx, param)) {
+      flush(ctx);
+      samp->WrapT = param;
+      return GL_TRUE;
+   }
+   return INVALID_PARAM;
+}
+
+
+static GLuint
+set_sampler_wrap_r(struct gl_context *ctx, struct gl_sampler_object *samp,
+                   GLint param)
+{
+   if (samp->WrapR == param)
+      return GL_FALSE;
+   if (validate_texture_wrap_mode(ctx, param)) {
+      flush(ctx);
+      samp->WrapR = param;
+      return GL_TRUE;
+   }
+   return INVALID_PARAM;
+}
+
+
+static GLuint
+set_sampler_min_filter(struct gl_context *ctx, struct gl_sampler_object *samp,
+                       GLint param)
+{
+   if (samp->MinFilter == param)
+      return GL_FALSE;
+
+   switch (param) {
+   case GL_NEAREST:
+   case GL_LINEAR:
+   case GL_NEAREST_MIPMAP_NEAREST:
+   case GL_LINEAR_MIPMAP_NEAREST:
+   case GL_NEAREST_MIPMAP_LINEAR:
+   case GL_LINEAR_MIPMAP_LINEAR:
+      flush(ctx);
+      samp->MinFilter = param;
+      return GL_TRUE;
+   default:
+      return INVALID_PARAM;
+   }
+}
+
+
+static GLuint
+set_sampler_mag_filter(struct gl_context *ctx, struct gl_sampler_object *samp,
+                       GLint param)
+{
+   if (samp->MagFilter == param)
+      return GL_FALSE;
+
+   switch (param) {
+   case GL_NEAREST:
+   case GL_LINEAR:
+      flush(ctx);
+      samp->MagFilter = param;
+      return GL_TRUE;
+   default:
+      return INVALID_PARAM;
+   }
+}
+
+
+static GLuint
+set_sampler_lod_bias(struct gl_context *ctx, struct gl_sampler_object *samp,
+                     GLfloat param)
+{
+   if (samp->LodBias == param)
+      return GL_FALSE;
+
+   flush(ctx);
+   samp->LodBias = param;
+   return GL_TRUE;
+}
+
+
+static GLuint
+set_sampler_border_colorf(struct gl_context *ctx,
+                          struct gl_sampler_object *samp,
+                          const GLfloat params[4])
+{
+   flush(ctx);
+   samp->BorderColor.f[RCOMP] = params[0];
+   samp->BorderColor.f[GCOMP] = params[1];
+   samp->BorderColor.f[BCOMP] = params[2];
+   samp->BorderColor.f[ACOMP] = params[3];
+   return GL_TRUE;
+}
+
+
+static GLuint
+set_sampler_border_colori(struct gl_context *ctx,
+                          struct gl_sampler_object *samp,
+                          const GLint params[4])
+{
+   flush(ctx);
+   samp->BorderColor.i[RCOMP] = params[0];
+   samp->BorderColor.i[GCOMP] = params[1];
+   samp->BorderColor.i[BCOMP] = params[2];
+   samp->BorderColor.i[ACOMP] = params[3];
+   return GL_TRUE;
+}
+
+
+static GLuint
+set_sampler_border_colorui(struct gl_context *ctx,
+                           struct gl_sampler_object *samp,
+                           const GLuint params[4])
+{
+   flush(ctx);
+   samp->BorderColor.ui[RCOMP] = params[0];
+   samp->BorderColor.ui[GCOMP] = params[1];
+   samp->BorderColor.ui[BCOMP] = params[2];
+   samp->BorderColor.ui[ACOMP] = params[3];
+   return GL_TRUE;
+}
+
+
+static GLuint
+set_sampler_min_lod(struct gl_context *ctx, struct gl_sampler_object *samp,
+                    GLfloat param)
+{
+   if (samp->MinLod == param)
+      return GL_FALSE;
+
+   flush(ctx);
+   samp->MinLod = param;
+   return GL_TRUE;
+}
+
+
+static GLuint
+set_sampler_max_lod(struct gl_context *ctx, struct gl_sampler_object *samp,
+                    GLfloat param)
+{
+   if (samp->MaxLod == param)
+      return GL_FALSE;
+
+   flush(ctx);
+   samp->MaxLod = param;
+   return GL_TRUE;
+}
+
+
+static GLuint
+set_sampler_compare_mode(struct gl_context *ctx,
+                         struct gl_sampler_object *samp, GLint param)
+{
+   if (!ctx->Extensions.ARB_shadow)
+      return INVALID_PNAME;
+
+   if (samp->CompareMode == param)
+      return GL_FALSE;
+
+   if (param == GL_NONE ||
+       param == GL_COMPARE_R_TO_TEXTURE_ARB) {
+      flush(ctx);
+      samp->CompareMode = param;
+      return GL_TRUE;
+   }
+
+   return INVALID_PARAM;
+}
+
+
+static GLuint
+set_sampler_compare_func(struct gl_context *ctx,
+                         struct gl_sampler_object *samp, GLint param)
+{
+   if (!ctx->Extensions.ARB_shadow)
+      return INVALID_PNAME;
+
+   if (samp->CompareFunc == param)
+      return GL_FALSE;
+
+   switch (param) {
+   case GL_LEQUAL:
+   case GL_GEQUAL:
+      flush(ctx);
+      samp->CompareFunc = param;
+      return GL_TRUE;
+   case GL_EQUAL:
+   case GL_NOTEQUAL:
+   case GL_LESS:
+   case GL_GREATER:
+   case GL_ALWAYS:
+   case GL_NEVER:
+      if (ctx->Extensions.EXT_shadow_funcs) {
+         flush(ctx);
+         samp->CompareFunc = param;
+         return GL_TRUE;
+      }
+      /* fall-through */
+   default:
+      return INVALID_PARAM;
+   }
+}
+
+
+static GLuint
+set_sampler_max_anisotropy(struct gl_context *ctx,
+                           struct gl_sampler_object *samp, GLfloat param)
+{
+   if (!ctx->Extensions.EXT_texture_filter_anisotropic)
+      return INVALID_PNAME;
+
+   if (samp->MaxAnisotropy == param)
+      return GL_FALSE;
+
+   if (param < 1.0)
+      return INVALID_VALUE;
+
+   flush(ctx);
+   /* clamp to max, that's what NVIDIA does */
+   samp->MaxAnisotropy = MIN2(param, ctx->Const.MaxTextureMaxAnisotropy);
+   return GL_TRUE;
+}
+
+
+static void GLAPIENTRY
+_mesa_SamplerParameteri(GLuint sampler, GLenum pname, GLint param)
+{
+   struct gl_sampler_object *sampObj;
+   GLuint res;
+   GET_CURRENT_CONTEXT(ctx);
+
+   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
+   if (!sampObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameteri(sampler %u)",
+                  sampler);
+      return;
+   }
+
+   switch (pname) {
+   case GL_TEXTURE_WRAP_S:
+      res = set_sampler_wrap_s(ctx, sampObj, param);
+      break;
+   case GL_TEXTURE_WRAP_T:
+      res = set_sampler_wrap_t(ctx, sampObj, param);
+      break;
+   case GL_TEXTURE_WRAP_R:
+      res = set_sampler_wrap_r(ctx, sampObj, param);
+      break;
+   case GL_TEXTURE_MIN_FILTER:
+      res = set_sampler_min_filter(ctx, sampObj, param);
+      break;
+   case GL_TEXTURE_MAG_FILTER:
+      res = set_sampler_mag_filter(ctx, sampObj, param);
+      break;
+   case GL_TEXTURE_MIN_LOD:
+      res = set_sampler_min_lod(ctx, sampObj, (GLfloat) param);
+      break;
+   case GL_TEXTURE_MAX_LOD:
+      res = set_sampler_max_lod(ctx, sampObj, (GLfloat) param);
+      break;
+   case GL_TEXTURE_LOD_BIAS:
+      res = set_sampler_lod_bias(ctx, sampObj, (GLfloat) param);
+      break;
+   case GL_TEXTURE_COMPARE_MODE:
+      res = set_sampler_compare_mode(ctx, sampObj, param);
+      break;
+   case GL_TEXTURE_COMPARE_FUNC:
+      res = set_sampler_compare_func(ctx, sampObj, param);
+      break;
+   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+      res = set_sampler_max_anisotropy(ctx, sampObj, (GLfloat) param);
+      break;
+   case GL_TEXTURE_BORDER_COLOR:
+      /* fall-through */
+   default:
+      res = INVALID_PNAME;
+   }
+
+   switch (res) {
+   case GL_FALSE:
+      /* no change */
+      break;
+   case GL_TRUE:
+      /* state change - we do nothing special at this time */
+      break;
+   case INVALID_PNAME:
+      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameteri(pname=%s)\n",
+                  _mesa_lookup_enum_by_nr(pname));
+      break;
+   case INVALID_PARAM:
+      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameteri(param=%d)\n",
+                  param);
+      break;
+   case INVALID_VALUE:
+      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameteri(param=%d)\n",
+                  param);
+      break;
+   default:
+      ;
+   }
+}
+
+
+static void GLAPIENTRY
+_mesa_SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
+{
+   struct gl_sampler_object *sampObj;
+   GLuint res;
+   GET_CURRENT_CONTEXT(ctx);
+
+   ASSERT_OUTSIDE_BEGIN_END(ctx);
+
+   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
+   if (!sampObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterf(sampler %u)",
+                  sampler);
+      return;
+   }
+
+   switch (pname) {
+   case GL_TEXTURE_WRAP_S:
+      res = set_sampler_wrap_s(ctx, sampObj, (GLint) param);
+      break;
+   case GL_TEXTURE_WRAP_T:
+      res = set_sampler_wrap_t(ctx, sampObj, (GLint) param);
+      break;
+   case GL_TEXTURE_WRAP_R:
+      res = set_sampler_wrap_r(ctx, sampObj, (GLint) param);
+      break;
+   case GL_TEXTURE_MIN_FILTER:
+      res = set_sampler_min_filter(ctx, sampObj, (GLint) param);
+      break;
+   case GL_TEXTURE_MAG_FILTER:
+      res = set_sampler_mag_filter(ctx, sampObj, (GLint) param);
+      break;
+   case GL_TEXTURE_MIN_LOD:
+      res = set_sampler_min_lod(ctx, sampObj, param);
+      break;
+   case GL_TEXTURE_MAX_LOD:
+      res = set_sampler_max_lod(ctx, sampObj, param);
+      break;
+   case GL_TEXTURE_LOD_BIAS:
+      res = set_sampler_lod_bias(ctx, sampObj, param);
+      break;
+   case GL_TEXTURE_COMPARE_MODE:
+      res = set_sampler_compare_mode(ctx, sampObj, (GLint) param);
+      break;
+   case GL_TEXTURE_COMPARE_FUNC:
+      res = set_sampler_compare_func(ctx, sampObj, (GLint) param);
+      break;
+   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+      res = set_sampler_max_anisotropy(ctx, sampObj, param);
+      break;
+   case GL_TEXTURE_BORDER_COLOR:
+      /* fall-through */
+   default:
+      res = INVALID_PNAME;
+   }
+
+   switch (res) {
+   case GL_FALSE:
+      /* no change */
+      break;
+   case GL_TRUE:
+      /* state change - we do nothing special at this time */
+      break;
+   case INVALID_PNAME:
+      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterf(pname=%s)\n",
+                  _mesa_lookup_enum_by_nr(pname));
+      break;
+   case INVALID_PARAM:
+      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterf(param=%f)\n",
+                  param);
+      break;
+   case INVALID_VALUE:
+      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterf(param=%f)\n",
+                  param);
+      break;
+   default:
+      ;
+   }
+}
+
+static void GLAPIENTRY
+_mesa_SamplerParameteriv(GLuint sampler, GLenum pname, const GLint *params)
+{
+   struct gl_sampler_object *sampObj;
+   GLuint res;
+   GET_CURRENT_CONTEXT(ctx);
+
+   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
+   if (!sampObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameteriv(sampler %u)",
+                  sampler);
+      return;
+   }
+
+   switch (pname) {
+   case GL_TEXTURE_WRAP_S:
+      res = set_sampler_wrap_s(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_WRAP_T:
+      res = set_sampler_wrap_t(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_WRAP_R:
+      res = set_sampler_wrap_r(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_MIN_FILTER:
+      res = set_sampler_min_filter(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_MAG_FILTER:
+      res = set_sampler_mag_filter(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_MIN_LOD:
+      res = set_sampler_min_lod(ctx, sampObj, (GLfloat) params[0]);
+      break;
+   case GL_TEXTURE_MAX_LOD:
+      res = set_sampler_max_lod(ctx, sampObj, (GLfloat) params[0]);
+      break;
+   case GL_TEXTURE_LOD_BIAS:
+      res = set_sampler_lod_bias(ctx, sampObj, (GLfloat) params[0]);
+      break;
+   case GL_TEXTURE_COMPARE_MODE:
+      res = set_sampler_compare_mode(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_COMPARE_FUNC:
+      res = set_sampler_compare_func(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+      res = set_sampler_max_anisotropy(ctx, sampObj, (GLfloat) params[0]);
+      break;
+   case GL_TEXTURE_BORDER_COLOR:
+      {
+         GLfloat c[4];
+         c[0] = INT_TO_FLOAT(params[0]);
+         c[1] = INT_TO_FLOAT(params[1]);
+         c[2] = INT_TO_FLOAT(params[2]);
+         c[3] = INT_TO_FLOAT(params[3]);
+         res = set_sampler_border_colorf(ctx, sampObj, c);
+      }
+      break;
+   default:
+      res = INVALID_PNAME;
+   }
+
+   switch (res) {
+   case GL_FALSE:
+      /* no change */
+      break;
+   case GL_TRUE:
+      /* state change - we do nothing special at this time */
+      break;
+   case INVALID_PNAME:
+      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameteriv(pname=%s)\n",
+                  _mesa_lookup_enum_by_nr(pname));
+      break;
+   case INVALID_PARAM:
+      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameteriv(param=%d)\n",
+                  params[0]);
+      break;
+   case INVALID_VALUE:
+      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameteriv(param=%d)\n",
+                  params[0]);
+      break;
+   default:
+      ;
+   }
+}
+
+static void GLAPIENTRY
+_mesa_SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *params)
+{
+   struct gl_sampler_object *sampObj;
+   GLuint res;
+   GET_CURRENT_CONTEXT(ctx);
+
+   ASSERT_OUTSIDE_BEGIN_END(ctx);
+
+   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
+   if (!sampObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterfv(sampler %u)",
+                  sampler);
+      return;
+   }
+
+   switch (pname) {
+   case GL_TEXTURE_WRAP_S:
+      res = set_sampler_wrap_s(ctx, sampObj, (GLint) params[0]);
+      break;
+   case GL_TEXTURE_WRAP_T:
+      res = set_sampler_wrap_t(ctx, sampObj, (GLint) params[0]);
+      break;
+   case GL_TEXTURE_WRAP_R:
+      res = set_sampler_wrap_r(ctx, sampObj, (GLint) params[0]);
+      break;
+   case GL_TEXTURE_MIN_FILTER:
+      res = set_sampler_min_filter(ctx, sampObj, (GLint) params[0]);
+      break;
+   case GL_TEXTURE_MAG_FILTER:
+      res = set_sampler_mag_filter(ctx, sampObj, (GLint) params[0]);
+      break;
+   case GL_TEXTURE_MIN_LOD:
+      res = set_sampler_min_lod(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_MAX_LOD:
+      res = set_sampler_max_lod(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_LOD_BIAS:
+      res = set_sampler_lod_bias(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_COMPARE_MODE:
+      res = set_sampler_compare_mode(ctx, sampObj, (GLint) params[0]);
+      break;
+   case GL_TEXTURE_COMPARE_FUNC:
+      res = set_sampler_compare_func(ctx, sampObj, (GLint) params[0]);
+      break;
+   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+      res = set_sampler_max_anisotropy(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_BORDER_COLOR:
+      res = set_sampler_border_colorf(ctx, sampObj, params);
+      break;
+   default:
+      res = INVALID_PNAME;
+   }
+
+   switch (res) {
+   case GL_FALSE:
+      /* no change */
+      break;
+   case GL_TRUE:
+      /* state change - we do nothing special at this time */
+      break;
+   case INVALID_PNAME:
+      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterfv(pname=%s)\n",
+                  _mesa_lookup_enum_by_nr(pname));
+      break;
+   case INVALID_PARAM:
+      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterfv(param=%f)\n",
+                  params[0]);
+      break;
+   case INVALID_VALUE:
+      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterfv(param=%f)\n",
+                  params[0]);
+      break;
+   default:
+      ;
+   }
+}
+
+static void GLAPIENTRY
+_mesa_SamplerParameterIiv(GLuint sampler, GLenum pname, const GLint *params)
+{
+   struct gl_sampler_object *sampObj;
+   GLuint res;
+   GET_CURRENT_CONTEXT(ctx);
+
+   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
+   if (!sampObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterIiv(sampler %u)",
+                  sampler);
+      return;
+   }
+
+   switch (pname) {
+   case GL_TEXTURE_WRAP_S:
+      res = set_sampler_wrap_s(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_WRAP_T:
+      res = set_sampler_wrap_t(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_WRAP_R:
+      res = set_sampler_wrap_r(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_MIN_FILTER:
+      res = set_sampler_min_filter(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_MAG_FILTER:
+      res = set_sampler_mag_filter(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_MIN_LOD:
+      res = set_sampler_min_lod(ctx, sampObj, (GLfloat) params[0]);
+      break;
+   case GL_TEXTURE_MAX_LOD:
+      res = set_sampler_max_lod(ctx, sampObj, (GLfloat) params[0]);
+      break;
+   case GL_TEXTURE_LOD_BIAS:
+      res = set_sampler_lod_bias(ctx, sampObj, (GLfloat) params[0]);
+      break;
+   case GL_TEXTURE_COMPARE_MODE:
+      res = set_sampler_compare_mode(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_COMPARE_FUNC:
+      res = set_sampler_compare_func(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+      res = set_sampler_max_anisotropy(ctx, sampObj, (GLfloat) params[0]);
+      break;
+   case GL_TEXTURE_BORDER_COLOR:
+      res = set_sampler_border_colori(ctx, sampObj, params);
+      break;
+   default:
+      res = INVALID_PNAME;
+   }
+
+   switch (res) {
+   case GL_FALSE:
+      /* no change */
+      break;
+   case GL_TRUE:
+      /* state change - we do nothing special at this time */
+      break;
+   case INVALID_PNAME:
+      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterIiv(pname=%s)\n",
+                  _mesa_lookup_enum_by_nr(pname));
+      break;
+   case INVALID_PARAM:
+      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterIiv(param=%d)\n",
+                  params[0]);
+      break;
+   case INVALID_VALUE:
+      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterIiv(param=%d)\n",
+                  params[0]);
+      break;
+   default:
+      ;
+   }
+}
+
+
+static void GLAPIENTRY
+_mesa_SamplerParameterIuiv(GLuint sampler, GLenum pname, const GLuint *params)
+{
+   struct gl_sampler_object *sampObj;
+   GLuint res;
+   GET_CURRENT_CONTEXT(ctx);
+
+   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
+   if (!sampObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterIuiv(sampler %u)",
+                  sampler);
+      return;
+   }
+
+   switch (pname) {
+   case GL_TEXTURE_WRAP_S:
+      res = set_sampler_wrap_s(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_WRAP_T:
+      res = set_sampler_wrap_t(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_WRAP_R:
+      res = set_sampler_wrap_r(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_MIN_FILTER:
+      res = set_sampler_min_filter(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_MAG_FILTER:
+      res = set_sampler_mag_filter(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_MIN_LOD:
+      res = set_sampler_min_lod(ctx, sampObj, (GLfloat) params[0]);
+      break;
+   case GL_TEXTURE_MAX_LOD:
+      res = set_sampler_max_lod(ctx, sampObj, (GLfloat) params[0]);
+      break;
+   case GL_TEXTURE_LOD_BIAS:
+      res = set_sampler_lod_bias(ctx, sampObj, (GLfloat) params[0]);
+      break;
+   case GL_TEXTURE_COMPARE_MODE:
+      res = set_sampler_compare_mode(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_COMPARE_FUNC:
+      res = set_sampler_compare_func(ctx, sampObj, params[0]);
+      break;
+   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+      res = set_sampler_max_anisotropy(ctx, sampObj, (GLfloat) params[0]);
+      break;
+   case GL_TEXTURE_BORDER_COLOR:
+      res = set_sampler_border_colorui(ctx, sampObj, params);
+      break;
+   default:
+      res = INVALID_PNAME;
+   }
+
+   switch (res) {
+   case GL_FALSE:
+      /* no change */
+      break;
+   case GL_TRUE:
+      /* state change - we do nothing special at this time */
+      break;
+   case INVALID_PNAME:
+      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterIuiv(pname=%s)\n",
+                  _mesa_lookup_enum_by_nr(pname));
+      break;
+   case INVALID_PARAM:
+      _mesa_error(ctx, GL_INVALID_ENUM, "glSamplerParameterIuiv(param=%u)\n",
+                  params[0]);
+      break;
+   case INVALID_VALUE:
+      _mesa_error(ctx, GL_INVALID_VALUE, "glSamplerParameterIuiv(param=%u)\n",
+                  params[0]);
+      break;
+   default:
+      ;
+   }
+}
+
+
+static void GLAPIENTRY
+_mesa_GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
+{
+   struct gl_sampler_object *sampObj;
+   GET_CURRENT_CONTEXT(ctx);
+
+   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
+   if (!sampObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE, "glGetSamplerParameteriv(sampler %u)",
+                  sampler);
+      return;
+   }
+
+   switch (pname) {
+   case GL_TEXTURE_WRAP_S:
+      *params = sampObj->WrapS;
+      break;
+   case GL_TEXTURE_WRAP_T:
+      *params = sampObj->WrapT;
+      break;
+   case GL_TEXTURE_WRAP_R:
+      *params = sampObj->WrapR;
+      break;
+   case GL_TEXTURE_MIN_FILTER:
+      *params = sampObj->MinFilter;
+      break;
+   case GL_TEXTURE_MAG_FILTER:
+      *params = sampObj->MagFilter;
+      break;
+   case GL_TEXTURE_MIN_LOD:
+      *params = (GLint) sampObj->MinLod;
+      break;
+   case GL_TEXTURE_MAX_LOD:
+      *params = (GLint) sampObj->MaxLod;
+      break;
+   case GL_TEXTURE_LOD_BIAS:
+      *params = (GLint) sampObj->LodBias;
+      break;
+   case GL_TEXTURE_COMPARE_MODE:
+      if (!ctx->Extensions.ARB_shadow)
+         goto invalid_pname;
+      *params = sampObj->CompareMode;
+      break;
+   case GL_TEXTURE_COMPARE_FUNC:
+      if (!ctx->Extensions.ARB_shadow)
+         goto invalid_pname;
+      *params = sampObj->CompareFunc;
+      break;
+   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+      *params = (GLint) sampObj->MaxAnisotropy;
+      break;
+   case GL_TEXTURE_BORDER_COLOR:
+      params[0] = FLOAT_TO_INT(sampObj->BorderColor.f[0]);
+      params[1] = FLOAT_TO_INT(sampObj->BorderColor.f[1]);
+      params[2] = FLOAT_TO_INT(sampObj->BorderColor.f[2]);
+      params[3] = FLOAT_TO_INT(sampObj->BorderColor.f[3]);
+      break;
+   default:
+      goto invalid_pname;
+   }
+   return;
+
+invalid_pname:
+   _mesa_error(ctx, GL_INVALID_ENUM, "glGetSamplerParameteriv(pname=%s)",
+               _mesa_lookup_enum_by_nr(pname));
+}
+
+
+static void GLAPIENTRY
+_mesa_GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params)
+{
+   struct gl_sampler_object *sampObj;
+   GET_CURRENT_CONTEXT(ctx);
+
+   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
+   if (!sampObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE, "glGetSamplerParameterfv(sampler %u)",
+                  sampler);
+      return;
+   }
+
+   switch (pname) {
+   case GL_TEXTURE_WRAP_S:
+      *params = (GLfloat) sampObj->WrapS;
+      break;
+   case GL_TEXTURE_WRAP_T:
+      *params = (GLfloat) sampObj->WrapT;
+      break;
+   case GL_TEXTURE_WRAP_R:
+      *params = (GLfloat) sampObj->WrapR;
+      break;
+   case GL_TEXTURE_MIN_FILTER:
+      *params = (GLfloat) sampObj->MinFilter;
+      break;
+   case GL_TEXTURE_MAG_FILTER:
+      *params = (GLfloat) sampObj->MagFilter;
+      break;
+   case GL_TEXTURE_MIN_LOD:
+      *params = sampObj->MinLod;
+      break;
+   case GL_TEXTURE_MAX_LOD:
+      *params = sampObj->MaxLod;
+      break;
+   case GL_TEXTURE_LOD_BIAS:
+      *params = sampObj->LodBias;
+      break;
+   case GL_TEXTURE_COMPARE_MODE:
+      if (!ctx->Extensions.ARB_shadow)
+         goto invalid_pname;
+      *params = (GLfloat) sampObj->CompareMode;
+      break;
+   case GL_TEXTURE_COMPARE_FUNC:
+      if (!ctx->Extensions.ARB_shadow)
+         goto invalid_pname;
+      *params = (GLfloat) sampObj->CompareFunc;
+      break;
+   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+      *params = sampObj->MaxAnisotropy;
+      break;
+   case GL_TEXTURE_BORDER_COLOR:
+      params[0] = sampObj->BorderColor.f[0];
+      params[1] = sampObj->BorderColor.f[1];
+      params[2] = sampObj->BorderColor.f[2];
+      params[3] = sampObj->BorderColor.f[3];
+      break;
+   default:
+      goto invalid_pname;
+   }
+   return;
+
+invalid_pname:
+   _mesa_error(ctx, GL_INVALID_ENUM, "glGetSamplerParameterfv(pname=%s)",
+               _mesa_lookup_enum_by_nr(pname));
+}
+
+
+static void GLAPIENTRY
+_mesa_GetSamplerParameterIiv(GLuint sampler, GLenum pname, GLint *params)
+{
+   struct gl_sampler_object *sampObj;
+   GET_CURRENT_CONTEXT(ctx);
+
+   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
+   if (!sampObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE,
+                  "glGetSamplerParameterIiv(sampler %u)",
+                  sampler);
+      return;
+   }
+
+   switch (pname) {
+   case GL_TEXTURE_WRAP_S:
+      *params = sampObj->WrapS;
+      break;
+   case GL_TEXTURE_WRAP_T:
+      *params = sampObj->WrapT;
+      break;
+   case GL_TEXTURE_WRAP_R:
+      *params = sampObj->WrapR;
+      break;
+   case GL_TEXTURE_MIN_FILTER:
+      *params = sampObj->MinFilter;
+      break;
+   case GL_TEXTURE_MAG_FILTER:
+      *params = sampObj->MagFilter;
+      break;
+   case GL_TEXTURE_MIN_LOD:
+      *params = (GLint) sampObj->MinLod;
+      break;
+   case GL_TEXTURE_MAX_LOD:
+      *params = (GLint) sampObj->MaxLod;
+      break;
+   case GL_TEXTURE_LOD_BIAS:
+      *params = (GLint) sampObj->LodBias;
+      break;
+   case GL_TEXTURE_COMPARE_MODE:
+      if (!ctx->Extensions.ARB_shadow)
+         goto invalid_pname;
+      *params = sampObj->CompareMode;
+      break;
+   case GL_TEXTURE_COMPARE_FUNC:
+      if (!ctx->Extensions.ARB_shadow)
+         goto invalid_pname;
+      *params = sampObj->CompareFunc;
+      break;
+   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+      *params = (GLint) sampObj->MaxAnisotropy;
+      break;
+   case GL_TEXTURE_BORDER_COLOR:
+      params[0] = sampObj->BorderColor.i[0];
+      params[1] = sampObj->BorderColor.i[1];
+      params[2] = sampObj->BorderColor.i[2];
+      params[3] = sampObj->BorderColor.i[3];
+      break;
+   default:
+      goto invalid_pname;
+   }
+   return;
+
+invalid_pname:
+   _mesa_error(ctx, GL_INVALID_ENUM, "glGetSamplerParameterIiv(pname=%s)",
+               _mesa_lookup_enum_by_nr(pname));
+}
+
+
+static void GLAPIENTRY
+_mesa_GetSamplerParameterIuiv(GLuint sampler, GLenum pname, GLuint *params)
+{
+   struct gl_sampler_object *sampObj;
+   GET_CURRENT_CONTEXT(ctx);
+
+   sampObj = _mesa_lookup_samplerobj(ctx, sampler);
+   if (!sampObj) {
+      _mesa_error(ctx, GL_INVALID_VALUE,
+                  "glGetSamplerParameterIuiv(sampler %u)",
+                  sampler);
+      return;
+   }
+
+   switch (pname) {
+   case GL_TEXTURE_WRAP_S:
+      *params = sampObj->WrapS;
+      break;
+   case GL_TEXTURE_WRAP_T:
+      *params = sampObj->WrapT;
+      break;
+   case GL_TEXTURE_WRAP_R:
+      *params = sampObj->WrapR;
+      break;
+   case GL_TEXTURE_MIN_FILTER:
+      *params = sampObj->MinFilter;
+      break;
+   case GL_TEXTURE_MAG_FILTER:
+      *params = sampObj->MagFilter;
+      break;
+   case GL_TEXTURE_MIN_LOD:
+      *params = (GLuint) sampObj->MinLod;
+      break;
+   case GL_TEXTURE_MAX_LOD:
+      *params = (GLuint) sampObj->MaxLod;
+      break;
+   case GL_TEXTURE_LOD_BIAS:
+      *params = (GLuint) sampObj->LodBias;
+      break;
+   case GL_TEXTURE_COMPARE_MODE:
+      if (!ctx->Extensions.ARB_shadow)
+         goto invalid_pname;
+      *params = sampObj->CompareMode;
+      break;
+   case GL_TEXTURE_COMPARE_FUNC:
+      if (!ctx->Extensions.ARB_shadow)
+         goto invalid_pname;
+      *params = sampObj->CompareFunc;
+      break;
+   case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+      *params = (GLuint) sampObj->MaxAnisotropy;
+      break;
+   case GL_TEXTURE_BORDER_COLOR:
+      params[0] = sampObj->BorderColor.ui[0];
+      params[1] = sampObj->BorderColor.ui[1];
+      params[2] = sampObj->BorderColor.ui[2];
+      params[3] = sampObj->BorderColor.ui[3];
+      break;
+   default:
+      goto invalid_pname;
+   }
+   return;
+
+invalid_pname:
+   _mesa_error(ctx, GL_INVALID_ENUM, "glGetSamplerParameterIuiv(pname=%s)",
+               _mesa_lookup_enum_by_nr(pname));
+}
+
+
+void
+_mesa_init_sampler_object_functions(struct dd_function_table *driver)
+{
+   driver->NewSamplerObject = _mesa_new_sampler_object;
+   driver->DeleteSamplerObject = _mesa_delete_sampler_object;
+}
+
+
+void
+_mesa_init_sampler_object_dispatch(struct _glapi_table *disp)
+{
+   SET_GenSamplers(disp, _mesa_GenSamplers);
+   SET_DeleteSamplers(disp, _mesa_DeleteSamplers);
+   SET_IsSampler(disp, _mesa_IsSampler);
+   SET_BindSampler(disp, _mesa_BindSampler);
+   SET_SamplerParameteri(disp, _mesa_SamplerParameteri);
+   SET_SamplerParameterf(disp, _mesa_SamplerParameterf);
+   SET_SamplerParameteriv(disp, _mesa_SamplerParameteriv);
+   SET_SamplerParameterfv(disp, _mesa_SamplerParameterfv);
+   SET_SamplerParameterIiv(disp, _mesa_SamplerParameterIiv);
+   SET_SamplerParameterIuiv(disp, _mesa_SamplerParameterIuiv);
+   SET_GetSamplerParameteriv(disp, _mesa_GetSamplerParameteriv);
+   SET_GetSamplerParameterfv(disp, _mesa_GetSamplerParameterfv);
+   SET_GetSamplerParameterIiv(disp, _mesa_GetSamplerParameterIiv);
+   SET_GetSamplerParameterIuiv(disp, _mesa_GetSamplerParameterIuiv);
+}
diff --git a/src/mesa/main/samplerobj.h b/src/mesa/main/samplerobj.h
new file mode 100644 (file)
index 0000000..ed495c3
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Mesa 3-D graphics library
+ *
+ * Copyright (C) 2011  VMware, 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 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 SAMPLEROBJ_H
+#define SAMPLEROBJ_H
+
+struct dd_function_table;
+
+
+extern void
+_mesa_reference_sampler_object(struct gl_context *ctx,
+                               struct gl_sampler_object **ptr,
+                               struct gl_sampler_object *samp);
+
+extern void
+_mesa_init_sampler_object(struct gl_sampler_object *sampObj, GLuint name);
+
+extern struct gl_sampler_object *
+_mesa_new_sampler_object(struct gl_context *ctx, GLuint name);
+
+extern void
+_mesa_delete_sampler_object(struct gl_context *ctx,
+                            struct gl_sampler_object *sampObj);
+
+extern void
+_mesa_init_sampler_object_functions(struct dd_function_table *driver);
+
+extern void
+_mesa_init_sampler_object_dispatch(struct _glapi_table *disp);
+
+
+#endif /* SAMPLEROBJ_H */
index 2c5f2a147ce5984719b6984d71b35bb6af12a5b0..451735faf76b4e50902a97ae73d835705de20641 100644 (file)
@@ -1029,6 +1029,7 @@ static GLboolean
 validate_samplers(const struct gl_program *prog, char *errMsg)
 {
    static const char *targetName[] = {
+      "TEXTURE_BUFFER",
       "TEXTURE_2D_ARRAY",
       "TEXTURE_1D_ARRAY",
       "TEXTURE_CUBE",
index ce9fc4de327474b61e8f5f0b8d5e41b02532670f..d84f59690c5b705da2c806894ad67b90f7698cd6 100644 (file)
@@ -27,8 +27,6 @@
  * Shared-context state
  */
 
-
-
 #include "imports.h"
 #include "mfeatures.h"
 #include "mtypes.h"
 #include "shared.h"
 #include "program/program.h"
 #include "dlist.h"
+#if FEATURE_ARB_sampler_objects
+#include "samplerobj.h"
+#endif
 #include "shaderobj.h"
 #include "syncobj.h"
 
+
 /**
  * Allocate and initialize a shared context state structure.
  * Initializes the display list, texture objects and vertex programs hash
@@ -91,6 +93,11 @@ _mesa_alloc_shared_state(struct gl_context *ctx)
    shared->BufferObjects = _mesa_NewHashTable();
 #endif
 
+#if FEATURE_ARB_sampler_objects
+   /* GL_ARB_sampler_objects */
+   shared->SamplerObjects = _mesa_NewHashTable();
+#endif
+
    /* Allocate the default buffer object */
    shared->NullBufferObj = ctx->Driver.NewBufferObject(ctx, 0, 0);
 
@@ -98,6 +105,7 @@ _mesa_alloc_shared_state(struct gl_context *ctx)
    for (i = 0; i < NUM_TEXTURE_TARGETS; i++) {
       /* NOTE: the order of these enums matches the TEXTURE_x_INDEX values */
       static const GLenum targets[NUM_TEXTURE_TARGETS] = {
+         GL_TEXTURE_BUFFER,
          GL_TEXTURE_2D_ARRAY_EXT,
          GL_TEXTURE_1D_ARRAY_EXT,
          GL_TEXTURE_CUBE_MAP,
@@ -106,6 +114,7 @@ _mesa_alloc_shared_state(struct gl_context *ctx)
          GL_TEXTURE_2D,
          GL_TEXTURE_1D
       };
+      assert(Elements(targets) == NUM_TEXTURE_TARGETS);
       shared->DefaultTex[i] = ctx->Driver.NewTextureObject(ctx, 0, targets[i]);
    }
 
@@ -268,6 +277,20 @@ delete_renderbuffer_cb(GLuint id, void *data, void *userData)
 }
 
 
+#if FEATURE_ARB_sampler_objects
+/**
+ * Callback for deleting a sampler object. Called by _mesa_HashDeleteAll()
+ */
+static void
+delete_sampler_object_cb(GLuint id, void *data, void *userData)
+{
+   struct gl_context *ctx = (struct gl_context *) userData;
+   struct gl_sampler_object *sampObj = (struct gl_sampler_object *) data;
+   _mesa_reference_sampler_object(ctx, &sampObj, NULL);
+}
+#endif
+
+
 /**
  * Deallocate a shared state object and all children structures.
  *
@@ -343,6 +366,11 @@ free_shared_state(struct gl_context *ctx, struct gl_shared_state *shared)
       }
    }
 
+#if FEATURE_ARB_sampler_objects
+   _mesa_HashDeleteAll(shared->SamplerObjects, delete_sampler_object_cb, ctx);
+   _mesa_DeleteHashTable(shared->SamplerObjects);
+#endif
+
    /*
     * Free texture objects (after FBOs since some textures might have
     * been bound to FBOs).
@@ -374,7 +402,8 @@ free_shared_state(struct gl_context *ctx, struct gl_shared_state *shared)
  * \sa free_shared_state().
  */
 void
-_mesa_release_shared_state(struct gl_context *ctx, struct gl_shared_state *shared)
+_mesa_release_shared_state(struct gl_context *ctx,
+                           struct gl_shared_state *shared)
 {
    GLint RefCount;
 
index 768d69f6942e08f35d9351668720405793b5eeba..55516a8c37c0c1a98e31231d8c2b32e71e3a0b34 100644 (file)
@@ -32,7 +32,8 @@ _mesa_alloc_shared_state(struct gl_context *ctx);
 
 
 void
-_mesa_release_shared_state(struct gl_context *ctx, struct gl_shared_state *shared);
+_mesa_release_shared_state(struct gl_context *ctx,
+                           struct gl_shared_state *shared);
 
 
 #endif
index 19c9bbabda2fc20015334c49899f6c6e1213d465..4696dbb526fbbd7591695a487c397eb80960fd78 100644 (file)
@@ -48,6 +48,7 @@
 #include "texenvprogram.h"
 #include "texobj.h"
 #include "texstate.h"
+#include "varray.h"
 
 
 static void
@@ -60,36 +61,6 @@ update_separate_specular(struct gl_context *ctx)
 }
 
 
-/**
- * Compute the index of the last array element that can be safely accessed
- * in a vertex array.  We can really only do this when the array lives in
- * a VBO.
- * The array->_MaxElement field will be updated.
- * Later in glDrawArrays/Elements/etc we can do some bounds checking.
- */
-static void
-compute_max_element(struct gl_client_array *array)
-{
-   assert(array->Enabled);
-   if (array->BufferObj->Name) {
-      GLsizeiptrARB offset = (GLsizeiptrARB) array->Ptr;
-      GLsizeiptrARB obj_size = (GLsizeiptrARB) array->BufferObj->Size;
-
-      if (offset < obj_size) {
-        array->_MaxElement = (obj_size - offset +
-                              array->StrideB -
-                              array->_ElementSize) / array->StrideB;
-      } else {
-        array->_MaxElement = 0;
-      }
-   }
-   else {
-      /* user-space array, no idea how big it is */
-      array->_MaxElement = 2 * 1000 * 1000 * 1000; /* just a big number */
-   }
-}
-
-
 /**
  * Helper for update_arrays().
  * \return  min(current min, array->_MaxElement).
@@ -97,7 +68,7 @@ compute_max_element(struct gl_client_array *array)
 static GLuint
 update_min(GLuint min, struct gl_client_array *array)
 {
-   compute_max_element(array);
+   _mesa_update_array_max_element(array);
    return MIN2(min, array->_MaxElement);
 }
 
@@ -445,6 +416,35 @@ update_color(struct gl_context *ctx)
    ctx->Color._LogicOpEnabled = _mesa_rgba_logicop_enabled(ctx);
 }
 
+static void
+update_clamp_fragment_color(struct gl_context *ctx)
+{
+   if(ctx->Color.ClampFragmentColor == GL_FIXED_ONLY_ARB)
+      ctx->Color._ClampFragmentColor = !ctx->DrawBuffer || !ctx->DrawBuffer->Visual.floatMode;
+   else
+      ctx->Color._ClampFragmentColor = ctx->Color.ClampFragmentColor;
+}
+
+static void
+update_clamp_vertex_color(struct gl_context *ctx)
+{
+   if(ctx->Light.ClampVertexColor == GL_FIXED_ONLY_ARB)
+      ctx->Light._ClampVertexColor = !ctx->DrawBuffer || !ctx->DrawBuffer->Visual.floatMode;
+   else
+      ctx->Light._ClampVertexColor = ctx->Light.ClampVertexColor;
+}
+
+static void
+update_clamp_read_color(struct gl_context *ctx)
+{
+   if(ctx->Color.ClampReadColor == GL_FIXED_ONLY_ARB)
+      ctx->Color._ClampReadColor = !ctx->ReadBuffer || !ctx->ReadBuffer->Visual.floatMode;
+   else
+      ctx->Color._ClampReadColor = ctx->Color.ClampReadColor;
+}
+
+
+
 
 /*
  * Check polygon state and set DD_TRI_CULL_FRONT_BACK and/or DD_TRI_OFFSET
@@ -565,7 +565,7 @@ _mesa_update_state_locked( struct gl_context *ctx )
    if (ctx->FragmentProgram._MaintainTexEnvProgram) {
       prog_flags |= (_NEW_BUFFERS | _NEW_TEXTURE | _NEW_FOG |
                     _NEW_ARRAY | _NEW_LIGHT | _NEW_POINT | _NEW_RENDERMODE |
-                    _NEW_PROGRAM);
+                    _NEW_PROGRAM | _NEW_FRAG_CLAMP);
    }
    if (ctx->VertexProgram._MaintainTnlProgram) {
       prog_flags |= (_NEW_ARRAY | _NEW_TEXTURE | _NEW_TEXTURE_MATRIX |
@@ -599,10 +599,13 @@ _mesa_update_state_locked( struct gl_context *ctx )
    if (new_state & _NEW_LIGHT)
       _mesa_update_lighting( ctx );
 
+   if (new_state & (_NEW_LIGHT | _NEW_BUFFERS))
+      update_clamp_vertex_color(ctx);
+
    if (new_state & (_NEW_STENCIL | _NEW_BUFFERS))
       _mesa_update_stencil( ctx );
 
-   if (new_state & _MESA_NEW_TRANSFER_STATE)
+   if (new_state & _NEW_PIXEL)
       _mesa_update_pixel( ctx, new_state );
 
    if (new_state & _DD_NEW_SEPARATE_SPECULAR)
@@ -617,6 +620,12 @@ _mesa_update_state_locked( struct gl_context *ctx )
    if (new_state & _NEW_COLOR)
       update_color( ctx );
 
+   if (new_state & (_NEW_COLOR | _NEW_BUFFERS))
+      update_clamp_read_color(ctx);
+
+   if(new_state & (_NEW_FRAG_CLAMP | _NEW_BUFFERS))
+      update_clamp_fragment_color(ctx);
+
 #if 0
    if (new_state & (_NEW_POINT | _NEW_LINE | _NEW_POLYGON | _NEW_LIGHT
                     | _NEW_STENCIL | _DD_NEW_SEPARATE_SPECULAR))
index c50df19c5d8426195990c7ea96b8e7767161dc04..d9de9bec3d161e561035bac16dd7ea1212f8f75f 100644 (file)
@@ -121,7 +121,7 @@ _mesa_texstore_red_rgtc1(TEXSTORE_PARAMS)
                                         texWidth, (GLubyte *) dstAddr);
 
    blkaddr = dst;
-   dstRowDiff = dstRowStride >= (srcWidth * 4) ? dstRowStride - (((srcWidth + 3) & ~3) * 4) : 0;
+   dstRowDiff = dstRowStride >= (srcWidth * 2) ? dstRowStride - (((srcWidth + 3) & ~3) * 2) : 0;
    for (j = 0; j < srcHeight; j+=4) {
       if (srcHeight > j + 3) numypixels = 4;
       else numypixels = srcHeight - j;
@@ -176,7 +176,7 @@ _mesa_texstore_signed_red_rgtc1(TEXSTORE_PARAMS)
                                                  texWidth, (GLubyte *) dstAddr);
 
    blkaddr = dst;
-   dstRowDiff = dstRowStride >= (srcWidth * 4) ? dstRowStride - (((srcWidth + 3) & ~3) * 4) : 0;
+   dstRowDiff = dstRowStride >= (srcWidth * 2) ? dstRowStride - (((srcWidth + 3) & ~3) * 2) : 0;
    for (j = 0; j < srcHeight; j+=4) {
       if (srcHeight > j + 3) numypixels = 4;
       else numypixels = srcHeight - j;
@@ -232,7 +232,7 @@ _mesa_texstore_rg_rgtc2(TEXSTORE_PARAMS)
                                         texWidth, (GLubyte *) dstAddr);
 
    blkaddr = dst;
-   dstRowDiff = dstRowStride >= (srcWidth * 8) ? dstRowStride - (((srcWidth + 7) & ~7) * 8) : 0;
+   dstRowDiff = dstRowStride >= (srcWidth * 4) ? dstRowStride - (((srcWidth + 3) & ~3) * 4) : 0;
    for (j = 0; j < srcHeight; j+=4) {
       if (srcHeight > j + 3) numypixels = 4;
       else numypixels = srcHeight - j;
@@ -294,7 +294,7 @@ _mesa_texstore_signed_rg_rgtc2(TEXSTORE_PARAMS)
                                                  texWidth, (GLubyte *) dstAddr);
 
    blkaddr = dst;
-   dstRowDiff = dstRowStride >= (srcWidth * 8) ? dstRowStride - (((srcWidth + 7) & ~7) * 8) : 0;
+   dstRowDiff = dstRowStride >= (srcWidth * 4) ? dstRowStride - (((srcWidth + 3) & ~3) * 4) : 0;
    for (j = 0; j < srcHeight; j += 4) {
       if (srcHeight > j + 3) numypixels = 4;
       else numypixels = srcHeight - j;
index 45a2e195e98d280817b3284916f0f8383663e754..9228e354a4dbc74c4f10bb93837a7174a5fa47cb 100644 (file)
@@ -35,6 +35,7 @@
 #include "main/enums.h"
 #include "main/macros.h"
 #include "main/mtypes.h"
+#include "main/state.h"
 #include "main/texenv.h"
 #include "main/texstate.h"
 
@@ -94,15 +95,14 @@ set_env_color(struct gl_context *ctx,
               struct gl_texture_unit *texUnit,
               const GLfloat *color)
 {
-   GLfloat tmp[4];
-   tmp[0] = CLAMP(color[0], 0.0F, 1.0F);
-   tmp[1] = CLAMP(color[1], 0.0F, 1.0F);
-   tmp[2] = CLAMP(color[2], 0.0F, 1.0F);
-   tmp[3] = CLAMP(color[3], 0.0F, 1.0F);
-   if (TEST_EQ_4V(tmp, texUnit->EnvColor))
+   if (TEST_EQ_4V(color, texUnit->EnvColorUnclamped))
       return;
    FLUSH_VERTICES(ctx, _NEW_TEXTURE);
-   COPY_4FV(texUnit->EnvColor, tmp);
+   COPY_4FV(texUnit->EnvColorUnclamped, color);
+   texUnit->EnvColor[0] = CLAMP(color[0], 0.0F, 1.0F);
+   texUnit->EnvColor[1] = CLAMP(color[1], 0.0F, 1.0F);
+   texUnit->EnvColor[2] = CLAMP(color[2], 0.0F, 1.0F);
+   texUnit->EnvColor[3] = CLAMP(color[3], 0.0F, 1.0F);
 }
 
 
@@ -758,7 +758,12 @@ _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
 
    if (target == GL_TEXTURE_ENV) {
       if (pname == GL_TEXTURE_ENV_COLOR) {
-         COPY_4FV( params, texUnit->EnvColor );
+         if(ctx->NewState & (_NEW_BUFFERS | _NEW_FRAG_CLAMP))
+            _mesa_update_state(ctx);
+         if(ctx->Color._ClampFragmentColor)
+            COPY_4FV( params, texUnit->EnvColor );
+         else
+            COPY_4FV( params, texUnit->EnvColorUnclamped );
       }
       else {
          GLint val = get_texenvi(ctx, texUnit, pname);
index 988a7e054686491e56d5745a55d2bce847fa8d86..d091789ff164961cbe7aa674a051e266d8e91cb0 100644 (file)
@@ -631,6 +631,34 @@ texfetch_funcs[MESA_FORMAT_COUNT] =
       fetch_texel_3d_f_intensity_f16,
       store_texel_intensity_f16
    },
+   {
+      MESA_FORMAT_R_FLOAT32,
+      fetch_texel_1d_f_r_f32,
+      fetch_texel_2d_f_r_f32,
+      fetch_texel_3d_f_r_f32,
+      store_texel_r_f32
+   },
+   {
+      MESA_FORMAT_R_FLOAT16,
+      fetch_texel_1d_f_r_f16,
+      fetch_texel_2d_f_r_f16,
+      fetch_texel_3d_f_r_f16,
+      store_texel_r_f16
+   },
+   {
+      MESA_FORMAT_RG_FLOAT32,
+      fetch_texel_1d_f_rg_f32,
+      fetch_texel_2d_f_rg_f32,
+      fetch_texel_3d_f_rg_f32,
+      store_texel_rg_f32
+   },
+   {
+      MESA_FORMAT_RG_FLOAT16,
+      fetch_texel_1d_f_rg_f16,
+      fetch_texel_2d_f_rg_f16,
+      fetch_texel_3d_f_rg_f16,
+      store_texel_rg_f16
+   },
 
    /* non-normalized, signed int */
    {
@@ -696,11 +724,11 @@ texfetch_funcs[MESA_FORMAT_COUNT] =
       store_texel_signed_r8
    },
    {
-      MESA_FORMAT_SIGNED_RG88,
-      fetch_texel_1d_signed_rg88,
-      fetch_texel_2d_signed_rg88,
-      fetch_texel_3d_signed_rg88,
-      store_texel_signed_rg88
+      MESA_FORMAT_SIGNED_RG88_REV,
+      fetch_texel_1d_signed_rg88_rev,
+      fetch_texel_2d_signed_rg88_rev,
+      fetch_texel_3d_signed_rg88_rev,
+      store_texel_signed_rg88_rev
    },
    {
       MESA_FORMAT_SIGNED_RGBX8888,
@@ -724,18 +752,18 @@ texfetch_funcs[MESA_FORMAT_COUNT] =
       store_texel_signed_rgba8888_rev
    },
    {
-      MESA_FORMAT_SIGNED_R_16,
-      fetch_texel_1d_signed_r_16,
-      fetch_texel_2d_signed_r_16,
-      fetch_texel_3d_signed_r_16,
-      store_texel_signed_r_16
+      MESA_FORMAT_SIGNED_R16,
+      fetch_texel_1d_signed_r16,
+      fetch_texel_2d_signed_r16,
+      fetch_texel_3d_signed_r16,
+      store_texel_signed_r16
    },
    {
-      MESA_FORMAT_SIGNED_RG_16,
-      fetch_texel_1d_signed_rg_16,
-      fetch_texel_2d_signed_rg_16,
-      fetch_texel_3d_signed_rg_16,
-      store_texel_signed_rg_16
+      MESA_FORMAT_SIGNED_GR1616,
+      fetch_texel_1d_signed_rg1616,
+      fetch_texel_2d_signed_rg1616,
+      fetch_texel_3d_signed_rg1616,
+      store_texel_signed_rg1616
    },
    {
       MESA_FORMAT_SIGNED_RGB_16,
@@ -814,6 +842,62 @@ texfetch_funcs[MESA_FORMAT_COUNT] =
       NULL,
       NULL
    },
+   {
+      MESA_FORMAT_SIGNED_A8,
+      fetch_texel_1d_signed_a8,
+      fetch_texel_2d_signed_a8,
+      fetch_texel_3d_signed_a8,
+      store_texel_signed_a8
+   },
+   {
+      MESA_FORMAT_SIGNED_L8,
+      fetch_texel_1d_signed_l8,
+      fetch_texel_2d_signed_l8,
+      fetch_texel_3d_signed_l8,
+      store_texel_signed_l8
+   },
+   {
+      MESA_FORMAT_SIGNED_AL88,
+      fetch_texel_1d_signed_al88,
+      fetch_texel_2d_signed_al88,
+      fetch_texel_3d_signed_al88,
+      store_texel_signed_al88
+   },
+   {
+      MESA_FORMAT_SIGNED_I8,
+      fetch_texel_1d_signed_i8,
+      fetch_texel_2d_signed_i8,
+      fetch_texel_3d_signed_i8,
+      store_texel_signed_i8
+   },
+   {
+      MESA_FORMAT_SIGNED_A16,
+      fetch_texel_1d_signed_a16,
+      fetch_texel_2d_signed_a16,
+      fetch_texel_3d_signed_a16,
+      store_texel_signed_a16
+   },
+   {
+      MESA_FORMAT_SIGNED_L16,
+      fetch_texel_1d_signed_l16,
+      fetch_texel_2d_signed_l16,
+      fetch_texel_3d_signed_l16,
+      store_texel_signed_l16
+   },
+   {
+      MESA_FORMAT_SIGNED_AL1616,
+      fetch_texel_1d_signed_al1616,
+      fetch_texel_2d_signed_al1616,
+      fetch_texel_3d_signed_al1616,
+      store_texel_signed_al1616
+   },
+   {
+      MESA_FORMAT_SIGNED_I16,
+      fetch_texel_1d_signed_i16,
+      fetch_texel_2d_signed_i16,
+      fetch_texel_3d_signed_i16,
+      store_texel_signed_i16
+   },
 };
 
 
@@ -919,7 +1003,7 @@ _mesa_set_fetch_functions(struct gl_texture_image *texImage, GLuint dims)
 
    ASSERT(dims == 1 || dims == 2 || dims == 3);
 
-   if (texImage->TexObject->sRGBDecode == GL_SKIP_DECODE_EXT &&
+   if (texImage->TexObject->Sampler.sRGBDecode == GL_SKIP_DECODE_EXT &&
        _mesa_get_format_color_encoding(format) == GL_SRGB) {
       format = _mesa_get_srgb_format_linear(format);
    }
index 36dede57f002eb8a005f4a78258791583a83c915..0b9d5da07e82dbcda1ac3706746f3aa9951605ef 100644 (file)
@@ -438,6 +438,110 @@ static void store_texel_intensity_f16(struct gl_texture_image *texImage,
 #endif
 
 
+/* MESA_FORMAT_R_FLOAT32 *****************************************************/
+
+/* Fetch texel from 1D, 2D or 3D R_FLOAT32 texture,
+ * returning 4 GLfloats.
+ */
+static void FETCH(f_r_f32)( const struct gl_texture_image *texImage,
+                            GLint i, GLint j, GLint k, GLfloat *texel )
+{
+   const GLfloat *src = TEXEL_ADDR(GLfloat, texImage, i, j, k, 1);
+   texel[RCOMP] = src[0];
+   texel[GCOMP] = 0.0F;
+   texel[BCOMP] = 0.0F;
+   texel[ACOMP] = 1.0F;
+}
+
+#if DIM == 3
+static void store_texel_r_f32(struct gl_texture_image *texImage,
+                              GLint i, GLint j, GLint k, const void *texel)
+{
+   const GLfloat *rgba = (const GLfloat *) texel;
+   GLfloat *dst = TEXEL_ADDR(GLfloat, texImage, i, j, k, 1);
+   dst[0] = rgba[RCOMP];
+}
+#endif
+
+
+/* MESA_FORMAT_R_FLOAT16 *****************************************************/
+
+/* Fetch texel from 1D, 2D or 3D R_FLOAT16 texture,
+ * returning 4 GLfloats.
+ */
+static void FETCH(f_r_f16)( const struct gl_texture_image *texImage,
+                            GLint i, GLint j, GLint k, GLfloat *texel )
+{
+   const GLhalfARB *src = TEXEL_ADDR(GLhalfARB, texImage, i, j, k, 1);
+   texel[RCOMP] = _mesa_half_to_float(src[0]);
+   texel[GCOMP] = 0.0F;
+   texel[BCOMP] = 0.0F;
+   texel[ACOMP] = 1.0F;
+}
+
+#if DIM == 3
+static void store_texel_r_f16(struct gl_texture_image *texImage,
+                              GLint i, GLint j, GLint k, const void *texel)
+{
+   const GLfloat *rgba = (const GLfloat *) texel;
+   GLhalfARB *dst = TEXEL_ADDR(GLhalfARB, texImage, i, j, k, 1);
+   dst[0] = _mesa_float_to_half(rgba[RCOMP]);
+}
+#endif
+
+
+/* MESA_FORMAT_RG_FLOAT32 ****************************************************/
+
+/* Fetch texel from 1D, 2D or 3D RG_FLOAT32 texture,
+ * returning 4 GLfloats.
+ */
+static void FETCH(f_rg_f32)( const struct gl_texture_image *texImage,
+                             GLint i, GLint j, GLint k, GLfloat *texel )
+{
+   const GLfloat *src = TEXEL_ADDR(GLfloat, texImage, i, j, k, 2);
+   texel[RCOMP] = src[0];
+   texel[GCOMP] = src[1];
+   texel[BCOMP] = 0.0F;
+   texel[ACOMP] = 1.0F;
+}
+
+#if DIM == 3
+static void store_texel_rg_f32(struct gl_texture_image *texImage,
+                               GLint i, GLint j, GLint k, const void *texel)
+{
+   const GLfloat *rgba = (const GLfloat *) texel;
+   GLfloat *dst = TEXEL_ADDR(GLfloat, texImage, i, j, k, 2);
+   dst[0] = rgba[RCOMP];
+   dst[1] = rgba[GCOMP];
+}
+#endif
+
+
+/* MESA_FORMAT_RG_FLOAT16 ****************************************************/
+
+/* Fetch texel from 1D, 2D or 3D RG_FLOAT16 texture,
+ * returning 4 GLfloats.
+ */
+static void FETCH(f_rg_f16)( const struct gl_texture_image *texImage,
+                             GLint i, GLint j, GLint k, GLfloat *texel )
+{
+   const GLhalfARB *src = TEXEL_ADDR(GLhalfARB, texImage, i, j, k, 2);
+   texel[RCOMP] = _mesa_half_to_float(src[0]);
+   texel[GCOMP] = _mesa_half_to_float(src[1]);
+   texel[BCOMP] = 0.0F;
+   texel[ACOMP] = 1.0F;
+}
+
+#if DIM == 3
+static void store_texel_rg_f16(struct gl_texture_image *texImage,
+                               GLint i, GLint j, GLint k, const void *texel)
+{
+   const GLfloat *rgba = (const GLfloat *) texel;
+   GLhalfARB *dst = TEXEL_ADDR(GLhalfARB, texImage, i, j, k, 2);
+   dst[0] = _mesa_float_to_half(rgba[RCOMP]);
+   dst[1] = _mesa_float_to_half(rgba[GCOMP]);
+}
+#endif
 
 
 /*
@@ -1673,25 +1777,117 @@ static void store_texel_signed_r8(struct gl_texture_image *texImage,
 #endif
 
 
-/* MESA_FORMAT_SIGNED_RG88 ***********************************************/
+/* MESA_FORMAT_SIGNED_A8 ***********************************************/
 
-static void FETCH(signed_rg88)( const struct gl_texture_image *texImage,
-                                GLint i, GLint j, GLint k, GLfloat *texel )
+static void FETCH(signed_a8)( const struct gl_texture_image *texImage,
+                              GLint i, GLint j, GLint k, GLfloat *texel )
+{
+   const GLbyte s = *TEXEL_ADDR(GLbyte, texImage, i, j, k, 1);
+   texel[RCOMP] = 0.0F;
+   texel[GCOMP] = 0.0F;
+   texel[BCOMP] = 0.0F;
+   texel[ACOMP] = BYTE_TO_FLOAT_TEX( s );
+}
+
+#if DIM == 3
+static void store_texel_signed_a8(struct gl_texture_image *texImage,
+                                  GLint i, GLint j, GLint k, const void *texel)
+{
+   const GLbyte *rgba = (const GLbyte *) texel;
+   GLbyte *dst = TEXEL_ADDR(GLbyte, texImage, i, j, k, 1);
+   *dst = rgba[ACOMP];
+}
+#endif
+
+
+/* MESA_FORMAT_SIGNED_L8 ***********************************************/
+
+static void FETCH(signed_l8)( const struct gl_texture_image *texImage,
+                              GLint i, GLint j, GLint k, GLfloat *texel )
+{
+   const GLbyte s = *TEXEL_ADDR(GLbyte, texImage, i, j, k, 1);
+   texel[RCOMP] =
+   texel[GCOMP] =
+   texel[BCOMP] = BYTE_TO_FLOAT_TEX( s );
+   texel[ACOMP] = 1.0F;
+}
+
+#if DIM == 3
+static void store_texel_signed_l8(struct gl_texture_image *texImage,
+                                  GLint i, GLint j, GLint k, const void *texel)
+{
+   const GLbyte *rgba = (const GLbyte *) texel;
+   GLbyte *dst = TEXEL_ADDR(GLbyte, texImage, i, j, k, 1);
+   *dst = rgba[RCOMP];
+}
+#endif
+
+
+/* MESA_FORMAT_SIGNED_I8 ***********************************************/
+
+static void FETCH(signed_i8)( const struct gl_texture_image *texImage,
+                              GLint i, GLint j, GLint k, GLfloat *texel )
+{
+   const GLbyte s = *TEXEL_ADDR(GLbyte, texImage, i, j, k, 1);
+   texel[RCOMP] =
+   texel[GCOMP] =
+   texel[BCOMP] =
+   texel[ACOMP] = BYTE_TO_FLOAT_TEX( s );
+}
+
+#if DIM == 3
+static void store_texel_signed_i8(struct gl_texture_image *texImage,
+                                  GLint i, GLint j, GLint k, const void *texel)
+{
+   const GLbyte *rgba = (const GLbyte *) texel;
+   GLbyte *dst = TEXEL_ADDR(GLbyte, texImage, i, j, k, 1);
+   *dst = rgba[RCOMP];
+}
+#endif
+
+
+/* MESA_FORMAT_SIGNED_RG88_REV ***********************************************/
+
+static void FETCH(signed_rg88_rev)( const struct gl_texture_image *texImage,
+                                    GLint i, GLint j, GLint k, GLfloat *texel )
 {
    const GLushort s = *TEXEL_ADDR(GLshort, texImage, i, j, k, 1);
-   texel[RCOMP] = BYTE_TO_FLOAT_TEX( (GLbyte) (s >> 8) );
-   texel[GCOMP] = BYTE_TO_FLOAT_TEX( (GLbyte) (s & 0xff) );
+   texel[RCOMP] = BYTE_TO_FLOAT_TEX( (GLbyte) (s & 0xff) );
+   texel[GCOMP] = BYTE_TO_FLOAT_TEX( (GLbyte) (s >> 8) );
    texel[BCOMP] = 0.0F;
    texel[ACOMP] = 1.0F;
 }
 
 #if DIM == 3
-static void store_texel_signed_rg88(struct gl_texture_image *texImage,
+static void store_texel_signed_rg88_rev(struct gl_texture_image *texImage,
+                                        GLint i, GLint j, GLint k, const void *texel)
+{
+   const GLbyte *rg = (const GLbyte *) texel;
+   GLushort *dst = TEXEL_ADDR(GLushort, texImage, i, j, k, 1);
+   dst[0] = PACK_COLOR_88(rg[GCOMP], rg[RCOMP]);
+}
+#endif
+
+
+/* MESA_FORMAT_SIGNED_AL88 ***********************************************/
+
+static void FETCH(signed_al88)( const struct gl_texture_image *texImage,
+                                GLint i, GLint j, GLint k, GLfloat *texel )
+{
+   const GLushort s = *TEXEL_ADDR(GLshort, texImage, i, j, k, 1);
+   texel[RCOMP] =
+   texel[GCOMP] =
+   texel[BCOMP] = BYTE_TO_FLOAT_TEX( (GLbyte) (s & 0xff) );
+   texel[ACOMP] = BYTE_TO_FLOAT_TEX( (GLbyte) (s >> 8) );
+}
+
+#if DIM == 3
+static void store_texel_signed_al88(struct gl_texture_image *texImage,
                                     GLint i, GLint j, GLint k, const void *texel)
 {
    const GLbyte *rg = (const GLbyte *) texel;
-   GLushort *dst = TEXEL_ADDR(GLushort, texImage, i, j, k, 2);
-   *dst = PACK_COLOR_88(rg[RCOMP], rg[GCOMP]);
+   GLushort *dst = TEXEL_ADDR(GLushort, texImage, i, j, k, 1);
+   dst[0] = PACK_COLOR_88(rg[ACOMP], rg[RCOMP]);
 }
 #endif
 
@@ -1763,11 +1959,11 @@ static void store_texel_signed_rgba8888_rev(struct gl_texture_image *texImage,
 
 
 
-/* MESA_FORMAT_SIGNED_R_16 ***********************************************/
+/* MESA_FORMAT_SIGNED_R16 ***********************************************/
 
 static void
-FETCH(signed_r_16)(const struct gl_texture_image *texImage,
-                   GLint i, GLint j, GLint k, GLfloat *texel)
+FETCH(signed_r16)(const struct gl_texture_image *texImage,
+                  GLint i, GLint j, GLint k, GLfloat *texel)
 {
    const GLshort s = *TEXEL_ADDR(GLshort, texImage, i, j, k, 1);
    texel[RCOMP] = SHORT_TO_FLOAT_TEX( s );
@@ -1778,8 +1974,8 @@ FETCH(signed_r_16)(const struct gl_texture_image *texImage,
 
 #if DIM == 3
 static void
-store_texel_signed_r_16(struct gl_texture_image *texImage,
-                        GLint i, GLint j, GLint k, const void *texel)
+store_texel_signed_r16(struct gl_texture_image *texImage,
+                       GLint i, GLint j, GLint k, const void *texel)
 {
    const GLshort *rgba = (const GLshort *) texel;
    GLshort *dst = TEXEL_ADDR(GLshort, texImage, i, j, k, 1);
@@ -1788,10 +1984,85 @@ store_texel_signed_r_16(struct gl_texture_image *texImage,
 #endif
 
 
-/* MESA_FORMAT_SIGNED_RG_16 ***********************************************/
+/* MESA_FORMAT_SIGNED_A16 ***********************************************/
+
+static void
+FETCH(signed_a16)(const struct gl_texture_image *texImage,
+                  GLint i, GLint j, GLint k, GLfloat *texel)
+{
+   const GLshort s = *TEXEL_ADDR(GLshort, texImage, i, j, k, 1);
+   texel[RCOMP] = 0.0F;
+   texel[GCOMP] = 0.0F;
+   texel[BCOMP] = 0.0F;
+   texel[ACOMP] = SHORT_TO_FLOAT_TEX( s );
+}
+
+#if DIM == 3
+static void
+store_texel_signed_a16(struct gl_texture_image *texImage,
+                       GLint i, GLint j, GLint k, const void *texel)
+{
+   const GLshort *rgba = (const GLshort *) texel;
+   GLshort *dst = TEXEL_ADDR(GLshort, texImage, i, j, k, 1);
+   *dst = rgba[ACOMP];
+}
+#endif
+
+
+/* MESA_FORMAT_SIGNED_L16 ***********************************************/
+
+static void
+FETCH(signed_l16)(const struct gl_texture_image *texImage,
+                  GLint i, GLint j, GLint k, GLfloat *texel)
+{
+   const GLshort s = *TEXEL_ADDR(GLshort, texImage, i, j, k, 1);
+   texel[RCOMP] =
+   texel[GCOMP] =
+   texel[BCOMP] = SHORT_TO_FLOAT_TEX( s );
+   texel[ACOMP] = 1.0F;
+}
+
+#if DIM == 3
+static void
+store_texel_signed_l16(struct gl_texture_image *texImage,
+                       GLint i, GLint j, GLint k, const void *texel)
+{
+   const GLshort *rgba = (const GLshort *) texel;
+   GLshort *dst = TEXEL_ADDR(GLshort, texImage, i, j, k, 1);
+   *dst = rgba[RCOMP];
+}
+#endif
+
+
+/* MESA_FORMAT_SIGNED_I16 ***********************************************/
 
 static void
-FETCH(signed_rg_16)(const struct gl_texture_image *texImage,
+FETCH(signed_i16)(const struct gl_texture_image *texImage,
+                  GLint i, GLint j, GLint k, GLfloat *texel)
+{
+   const GLshort s = *TEXEL_ADDR(GLshort, texImage, i, j, k, 1);
+   texel[RCOMP] =
+   texel[GCOMP] =
+   texel[BCOMP] =
+   texel[ACOMP] = SHORT_TO_FLOAT_TEX( s );
+}
+
+#if DIM == 3
+static void
+store_texel_signed_i16(struct gl_texture_image *texImage,
+                       GLint i, GLint j, GLint k, const void *texel)
+{
+   const GLshort *rgba = (const GLshort *) texel;
+   GLshort *dst = TEXEL_ADDR(GLshort, texImage, i, j, k, 1);
+   *dst = rgba[RCOMP];
+}
+#endif
+
+
+/* MESA_FORMAT_SIGNED_RG1616 ***********************************************/
+
+static void
+FETCH(signed_rg1616)(const struct gl_texture_image *texImage,
                     GLint i, GLint j, GLint k, GLfloat *texel)
 {
    const GLshort *s = TEXEL_ADDR(GLshort, texImage, i, j, k, 2);
@@ -1803,7 +2074,7 @@ FETCH(signed_rg_16)(const struct gl_texture_image *texImage,
 
 #if DIM == 3
 static void
-store_texel_signed_rg_16(struct gl_texture_image *texImage,
+store_texel_signed_rg1616(struct gl_texture_image *texImage,
                          GLint i, GLint j, GLint k, const void *texel)
 {
    const GLshort *rgba = (const GLshort *) texel;
@@ -1814,7 +2085,33 @@ store_texel_signed_rg_16(struct gl_texture_image *texImage,
 #endif
 
 
-/* MESA_FORMAT_SIGNED_RGBA_16 ***********************************************/
+/* MESA_FORMAT_SIGNED_AL1616 ***********************************************/
+
+static void
+FETCH(signed_al1616)(const struct gl_texture_image *texImage,
+                    GLint i, GLint j, GLint k, GLfloat *texel)
+{
+   const GLshort *s = TEXEL_ADDR(GLshort, texImage, i, j, k, 2);
+   texel[RCOMP] =
+   texel[GCOMP] =
+   texel[BCOMP] = SHORT_TO_FLOAT_TEX( s[0] );
+   texel[ACOMP] = SHORT_TO_FLOAT_TEX( s[1] );
+}
+
+#if DIM == 3
+static void
+store_texel_signed_al1616(struct gl_texture_image *texImage,
+                         GLint i, GLint j, GLint k, const void *texel)
+{
+   const GLshort *rgba = (const GLshort *) texel;
+   GLshort *dst = TEXEL_ADDR(GLshort, texImage, i, j, k, 2);
+   dst[0] = rgba[RCOMP];
+   dst[1] = rgba[ACOMP];
+}
+#endif
+
+
+/* MESA_FORMAT_SIGNED_RGB_16 ***********************************************/
 
 static void 
 FETCH(signed_rgb_16)(const struct gl_texture_image *texImage,
index 5eabf2aa527325ea5cb48c01e0f1cbd7f686a830..c85a7c0503024e2bfa37b53849206c54840dfcb5 100644 (file)
@@ -327,36 +327,52 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
       switch (internalFormat) {
          case GL_ALPHA16F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
            break;
          case GL_ALPHA32F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
            break;
          case GL_LUMINANCE16F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
            break;
          case GL_LUMINANCE32F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
            break;
          case GL_LUMINANCE_ALPHA16F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
            break;
          case GL_LUMINANCE_ALPHA32F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
            break;
          case GL_INTENSITY16F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
            break;
          case GL_INTENSITY32F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
            break;
          case GL_RGB16F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
            break;
          case GL_RGB32F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
            break;
          case GL_RGBA16F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
            break;
          case GL_RGBA32F_ARB:
            RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
@@ -389,19 +405,7 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
       }
    }
 
-   if (ctx->Extensions.MESA_texture_signed_rgba) {
-      switch (internalFormat) {
-         case GL_RGBA_SNORM:
-         case GL_RGBA8_SNORM:
-           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
-           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
-           break;
-         default:
-            ; /* fallthrough */
-      }
-   }
-
-   if (ctx->VersionMajor * 10 + ctx->VersionMinor >= 31) {
+   if (ctx->Extensions.EXT_texture_snorm) {
       switch (internalFormat) {
          case GL_RED_SNORM:
          case GL_R8_SNORM:
@@ -409,28 +413,77 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
            break;
          case GL_RG_SNORM:
          case GL_RG8_SNORM:
-           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG88);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG88_REV);
            break;
          case GL_RGB_SNORM:
          case GL_RGB8_SNORM:
            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888);
-           break;
+           /* FALLTHROUGH */
          case GL_RGBA_SNORM:
          case GL_RGBA8_SNORM:
            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
            break;
+         case GL_ALPHA_SNORM:
+         case GL_ALPHA8_SNORM:
+            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A8);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
+            break;
+         case GL_LUMINANCE_SNORM:
+         case GL_LUMINANCE8_SNORM:
+            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L8);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
+            break;
+         case GL_LUMINANCE_ALPHA_SNORM:
+         case GL_LUMINANCE8_ALPHA8_SNORM:
+            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL88);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
+            break;
+         case GL_INTENSITY_SNORM:
+         case GL_INTENSITY8_SNORM:
+            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I8);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
+            break;
          case GL_R16_SNORM:
-           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R_16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R16);
            break;
          case GL_RG16_SNORM:
-           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG_16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_GR1616);
            break;
          case GL_RGB16_SNORM:
            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGB_16);
-           break;
+           /* FALLTHROUGH */
          case GL_RGBA16_SNORM:
            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
            break;
+         case GL_ALPHA16_SNORM:
+            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
+            break;
+         case GL_LUMINANCE16_SNORM:
+            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L16);
+           /* FALLTHROUGH */
+         case GL_LUMINANCE16_ALPHA16_SNORM:
+            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL1616);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
+            break;
+         case GL_INTENSITY16_SNORM:
+            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
+            break;
          default:
             ; /* fall-through */
       }
@@ -591,6 +644,32 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
       }
    }
 
+   if (ctx->Extensions.ARB_texture_rg && ctx->Extensions.ARB_texture_float) {
+      switch (internalFormat) {
+      case GL_R16F:
+        RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+        break;
+      case GL_R32F:
+        RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+        break;
+      case GL_RG16F:
+        RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+        break;
+      case GL_RG32F:
+        RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
+        break;
+
+      default:
+         ; /* fallthrough */
+      }
+   }
+
    if (ctx->Extensions.EXT_texture_format_BGRA8888) {
       switch (internalFormat) {
       case GL_BGRA:
index 21d9140c5507d48fc8b490ef8c4a82b171c00fa2..7070a29fb9d21b9664ce4967201c18ac02bebb69 100644 (file)
@@ -74,6 +74,7 @@ get_tex_color_index(struct gl_context *ctx, GLuint dimensions,
    const GLint width = texImage->Width;
    const GLint height = texImage->Height;
    const GLint depth = texImage->Depth;
+   const GLint rowstride = texImage->RowStride;
    const GLuint indexBits =
       _mesa_get_format_bits(texImage->TexFormat, GL_TEXTURE_INDEX_SIZE_EXT);
    const GLbitfield transferOps = 0x0;
@@ -89,14 +90,14 @@ get_tex_color_index(struct gl_context *ctx, GLuint dimensions,
 
          if (indexBits == 8) {
             const GLubyte *src = (const GLubyte *) texImage->Data;
-            src += width * (img * texImage->Height + row);
+            src += rowstride * (img * height + row);
             for (col = 0; col < width; col++) {
                indexRow[col] = src[col];
             }
          }
          else if (indexBits == 16) {
             const GLushort *src = (const GLushort *) texImage->Data;
-            src += width * (img * texImage->Height + row);
+            src += rowstride * (img * height + row);
             for (col = 0; col < width; col++) {
                indexRow[col] = src[col];
             }
@@ -159,6 +160,7 @@ get_tex_depth_stencil(struct gl_context *ctx, GLuint dimensions,
    const GLint width = texImage->Width;
    const GLint height = texImage->Height;
    const GLint depth = texImage->Depth;
+   const GLint rowstride = texImage->RowStride;
    const GLuint *src = (const GLuint *) texImage->Data;
    GLint img, row;
 
@@ -172,7 +174,7 @@ get_tex_depth_stencil(struct gl_context *ctx, GLuint dimensions,
             _mesa_swap4((GLuint *) dest, width);
          }
 
-         src += width * row + width * height * img;
+         src += rowstride;
       }
    }
 }
index 2a3037f6189c27ff75b67c3efc0122c4c753c81a..8fb54c693e065ab4b635443aac106e09e15bcc52 100644 (file)
@@ -55,9 +55,7 @@
  * In particular, we care about pixel transfer state and buffer state
  * (such as glReadBuffer to make sure we read from the right renderbuffer).
  */
-#define NEW_COPY_TEX_STATE (_MESA_NEW_TRANSFER_STATE | \
-                            _NEW_BUFFERS | \
-                            _NEW_PIXEL)
+#define NEW_COPY_TEX_STATE (_NEW_BUFFERS | _NEW_PIXEL)
 
 
 
@@ -313,11 +311,40 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat )
       }
    }
 
-   if (ctx->Extensions.MESA_texture_signed_rgba) {
+   if (ctx->Extensions.EXT_texture_snorm) {
       switch (internalFormat) {
+         case GL_RED_SNORM:
+         case GL_R8_SNORM:
+         case GL_R16_SNORM:
+            return GL_RED;
+         case GL_RG_SNORM:
+         case GL_RG8_SNORM:
+         case GL_RG16_SNORM:
+            return GL_RG;
+         case GL_RGB_SNORM:
+         case GL_RGB8_SNORM:
+         case GL_RGB16_SNORM:
+            return GL_RGB;
          case GL_RGBA_SNORM:
          case GL_RGBA8_SNORM:
+         case GL_RGBA16_SNORM:
             return GL_RGBA;
+         case GL_ALPHA_SNORM:
+         case GL_ALPHA8_SNORM:
+         case GL_ALPHA16_SNORM:
+            return GL_ALPHA;
+         case GL_LUMINANCE_SNORM:
+         case GL_LUMINANCE8_SNORM:
+         case GL_LUMINANCE16_SNORM:
+            return GL_LUMINANCE;
+         case GL_LUMINANCE_ALPHA_SNORM:
+         case GL_LUMINANCE8_ALPHA8_SNORM:
+         case GL_LUMINANCE16_ALPHA16_SNORM:
+            return GL_LUMINANCE_ALPHA;
+         case GL_INTENSITY_SNORM:
+         case GL_INTENSITY8_SNORM:
+         case GL_INTENSITY16_SNORM:
+            return GL_INTENSITY;
          default:
             ; /* fallthrough */
       }
@@ -654,8 +681,10 @@ _mesa_delete_texture_image(struct gl_context *ctx,
 GLboolean
 _mesa_is_proxy_texture(GLenum target)
 {
-   /* NUM_TEXTURE_TARGETS should match number of terms below */
-   assert(NUM_TEXTURE_TARGETS == 7);
+   /* NUM_TEXTURE_TARGETS should match number of terms below,
+    * except there's no proxy for GL_TEXTURE_BUFFER.
+    */
+   assert(NUM_TEXTURE_TARGETS == 8);
 
    return (target == GL_PROXY_TEXTURE_1D ||
            target == GL_PROXY_TEXTURE_2D ||
@@ -767,6 +796,9 @@ _mesa_select_tex_object(struct gl_context *ctx,
          return arrayTex ? texUnit->CurrentTex[TEXTURE_2D_ARRAY_INDEX] : NULL;
       case GL_PROXY_TEXTURE_2D_ARRAY_EXT:
          return arrayTex ? ctx->Texture.ProxyTex[TEXTURE_2D_ARRAY_INDEX] : NULL;
+      case GL_TEXTURE_BUFFER:
+         return ctx->Extensions.ARB_texture_buffer_object
+            ? texUnit->CurrentTex[TEXTURE_BUFFER_INDEX] : NULL;
       default:
          _mesa_problem(NULL, "bad target in _mesa_select_tex_object()");
          return NULL;
@@ -954,6 +986,8 @@ _mesa_max_texture_levels(struct gl_context *ctx, GLenum target)
       return (ctx->Extensions.MESA_texture_array ||
               ctx->Extensions.EXT_texture_array)
          ? ctx->Const.MaxTextureLevels : 0;
+   case GL_TEXTURE_BUFFER:
+      /* fall-through */
    default:
       return 0; /* bad target */
    }
@@ -990,6 +1024,8 @@ _mesa_get_texture_dimensions(GLenum target)
    case GL_TEXTURE_2D_ARRAY:
    case GL_PROXY_TEXTURE_2D_ARRAY:
       return 3;
+   case GL_TEXTURE_BUFFER:
+      /* fall-through */
    default:
       _mesa_problem(NULL, "invalid target 0x%x in get_texture_dimensions()",
                     target);
@@ -2224,7 +2260,7 @@ check_rtt_cb(GLuint key, void *data, void *userData)
              att->Texture == texObj &&
              att->TextureLevel == level &&
              att->CubeMapFace == face) {
-            ASSERT(att->Texture->Image[att->CubeMapFace][att->TextureLevel]);
+            ASSERT(_mesa_get_attachment_teximage(att));
             /* Tell driver about the new renderbuffer texture */
             ctx->Driver.RenderTexture(ctx, ctx->DrawBuffer, att);
             /* Mark fb status as indeterminate to force re-validation */
@@ -2434,7 +2470,7 @@ teximage(struct gl_context *ctx, GLuint dims,
          return;   /* error was recorded */
       }
 
-      if (ctx->NewState & _MESA_NEW_TRANSFER_STATE)
+      if (ctx->NewState & _NEW_PIXEL)
         _mesa_update_state(ctx);
 
       texObj = _mesa_get_current_tex_object(ctx, target);
@@ -2580,7 +2616,7 @@ _mesa_EGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image)
       return;
    }
 
-   if (ctx->NewState & _MESA_NEW_TRANSFER_STATE)
+   if (ctx->NewState & _NEW_PIXEL)
       _mesa_update_state(ctx);
 
    texObj = _mesa_get_current_tex_object(ctx, target);
@@ -2637,7 +2673,7 @@ texsubimage(struct gl_context *ctx, GLuint dims, GLenum target, GLint level,
       return;
    }       
 
-   if (ctx->NewState & _MESA_NEW_TRANSFER_STATE)
+   if (ctx->NewState & _NEW_PIXEL)
       _mesa_update_state(ctx);
 
    if (subtexture_error_check(ctx, dims, target, level, xoffset, yoffset, zoffset,
@@ -2997,6 +3033,7 @@ get_compressed_block_size(GLenum glformat, GLuint *bw, GLuint *bh)
 
 /**
  * Error checking for glCompressedTexImage[123]D().
+ * \param reason  returns reason for error, if any
  * \return error code or GL_NO_ERROR.
  */
 static GLenum
@@ -3004,36 +3041,49 @@ compressed_texture_error_check(struct gl_context *ctx, GLint dimensions,
                                GLenum target, GLint level,
                                GLenum internalFormat, GLsizei width,
                                GLsizei height, GLsizei depth, GLint border,
-                               GLsizei imageSize)
+                               GLsizei imageSize, char **reason)
 {
    const GLenum proxyTarget = get_proxy_target(target);
    const GLint maxLevels = _mesa_max_texture_levels(ctx, target);
    GLint expectedSize;
 
+   *reason = ""; /* no error */
+
    /* check level */
-   if (level < 0 || level >= maxLevels)
+   if (level < 0 || level >= maxLevels) {
+      *reason = "level";
       return GL_INVALID_VALUE;
+   }
 
    if (!target_can_be_compressed(ctx, target, internalFormat)) {
+      *reason = "target";
       return GL_INVALID_ENUM;
    }
 
    /* This will detect any invalid internalFormat value */
-   if (!_mesa_is_compressed_format(ctx, internalFormat))
+   if (!_mesa_is_compressed_format(ctx, internalFormat)) {
+      *reason = "internalFormat";
       return GL_INVALID_ENUM;
+   }
 
    /* This should really never fail */
-   if (_mesa_base_tex_format(ctx, internalFormat) < 0)
+   if (_mesa_base_tex_format(ctx, internalFormat) < 0) {
+      *reason = "internalFormat";
       return GL_INVALID_ENUM;
+   }
 
    /* No compressed formats support borders at this time */
-   if (border != 0)
+   if (border != 0) {
+      *reason = "border != 0";
       return GL_INVALID_VALUE;
+   }
 
    /* For cube map, width must equal height */
    if (target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB &&
-       target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB && width != height)
+       target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB && width != height) {
+      *reason = "width != height";
       return GL_INVALID_VALUE;
+   }
 
    /* check image size against compression block size */
    {
@@ -3050,6 +3100,7 @@ compressed_texture_error_check(struct gl_context *ctx, GLint dimensions,
           * generated [...] if any parameter combinations are not
           * supported by the specific compressed internal format. 
           */
+         *reason = "invalid width or height for compression format";
          return GL_INVALID_OPERATION;
       }
    }
@@ -3059,6 +3110,7 @@ compressed_texture_error_check(struct gl_context *ctx, GLint dimensions,
                                       internalFormat, GL_NONE, GL_NONE,
                                       width, height, depth, border)) {
       /* See error comment above */
+      *reason = "invalid width, height or format";
       return GL_INVALID_OPERATION;
    }
 
@@ -3069,6 +3121,7 @@ compressed_texture_error_check(struct gl_context *ctx, GLint dimensions,
        * if <imageSize> is not consistent with the format, dimensions, and
        * contents of the specified image.
        */
+      *reason = "imageSize inconsistant with width/height/format";
       return GL_INVALID_VALUE;
    }
 
@@ -3223,6 +3276,7 @@ compressedteximage(struct gl_context *ctx, GLuint dims,
                    GLsizei imageSize, const GLvoid *data)
 {
    GLenum error;
+   char *reason = "";
 
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
 
@@ -3243,15 +3297,15 @@ compressedteximage(struct gl_context *ctx, GLuint dims,
 
    error = compressed_texture_error_check(ctx, dims, target, level,
                                           internalFormat, width, height, depth,
-                                          border, imageSize);
+                                          border, imageSize, &reason);
 
-#if FEATURE_ES
-   /* XXX this is kind of a hack */
    if (error) {
-      _mesa_error(ctx, error, "glTexImage2D");
+      _mesa_error(ctx, error, "glTexImage2D(%s)", reason);
       return;
    }
 
+#if FEATURE_ES
+   /* XXX this is kind of a hack */
    if (dims == 2) {
       switch (internalFormat) {
       case GL_PALETTE4_RGB8_OES:
@@ -3524,3 +3578,272 @@ _mesa_CompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset,
    compressed_tex_sub_image(3, target, level, xoffset, yoffset, zoffset,
                             width, height, depth, format, imageSize, data);
 }
+
+
+/**
+ * Helper for glTexBuffer().  Check if internalFormat is legal.  If so,
+ * return the basic data type and number of components for the format.
+ * \param return  GL_TRUE if internalFormat is legal, GL_FALSE otherwise
+ */
+static GLboolean
+get_sized_format_info(const struct gl_context *ctx, GLenum internalFormat,
+                      GLenum *datatype, GLuint *components)
+{
+   switch (internalFormat) {
+   case GL_ALPHA8:
+      *datatype = GL_UNSIGNED_BYTE;
+      *components = 1;
+      break;
+   case GL_ALPHA16:
+      *datatype = GL_UNSIGNED_SHORT;
+      *components = 1;
+      break;
+   case GL_ALPHA16F_ARB:
+      *datatype = GL_HALF_FLOAT;
+      *components = 1;
+      break;
+   case GL_ALPHA32F_ARB:
+      *datatype = GL_FLOAT;
+      *components = 1;
+      break;
+   case GL_ALPHA8I_EXT:
+      *datatype = GL_BYTE;
+      *components = 1;
+      break;
+   case GL_ALPHA16I_EXT:
+      *datatype = GL_SHORT;
+      *components = 1;
+      break;
+   case GL_ALPHA32I_EXT:
+      *datatype = GL_INT;
+      *components = 1;
+      break;
+   case GL_ALPHA8UI_EXT:
+      *datatype = GL_UNSIGNED_BYTE;
+      *components = 1;
+      break;
+   case GL_ALPHA16UI_EXT:
+      *datatype = GL_UNSIGNED_SHORT;
+      *components = 1;
+      break;
+   case GL_ALPHA32UI_EXT:
+      *datatype = GL_UNSIGNED_INT;
+      *components = 1;
+      break;
+   case GL_LUMINANCE8:
+      *datatype = GL_UNSIGNED_BYTE;
+      *components = 1;
+      break;
+   case GL_LUMINANCE16:
+      *datatype = GL_UNSIGNED_SHORT;
+      *components = 1;
+      break;
+   case GL_LUMINANCE16F_ARB:
+      *datatype = GL_HALF_FLOAT;
+      *components = 1;
+      break;
+   case GL_LUMINANCE32F_ARB:
+      *datatype = GL_FLOAT;
+      *components = 1;
+      break;
+   case GL_LUMINANCE8I_EXT:
+      *datatype = GL_BYTE;
+      *components = 1;
+      break;
+   case GL_LUMINANCE16I_EXT:
+      *datatype = GL_SHORT;
+      *components = 1;
+      break;
+   case GL_LUMINANCE32I_EXT:
+      *datatype = GL_INT;
+      *components = 1;
+      break;
+   case GL_LUMINANCE8UI_EXT:
+      *datatype = GL_UNSIGNED_BYTE;
+      *components = 1;
+      break;
+   case GL_LUMINANCE16UI_EXT:
+      *datatype = GL_UNSIGNED_SHORT;
+      *components = 1;
+      break;
+   case GL_LUMINANCE32UI_EXT:
+      *datatype = GL_UNSIGNED_INT;
+      *components = 1;
+      break;
+   case GL_LUMINANCE8_ALPHA8:
+      *datatype = GL_UNSIGNED_BYTE;
+      *components = 2;
+      break;
+   case GL_LUMINANCE16_ALPHA16:
+      *datatype = GL_UNSIGNED_SHORT;
+      *components = 2;
+      break;
+   case GL_LUMINANCE_ALPHA16F_ARB:
+      *datatype = GL_HALF_FLOAT;
+      *components = 2;
+      break;
+   case GL_LUMINANCE_ALPHA32F_ARB:
+      *datatype = GL_FLOAT;
+      *components = 2;
+      break;
+   case GL_LUMINANCE_ALPHA8I_EXT:
+      *datatype = GL_BYTE;
+      *components = 2;
+      break;
+   case GL_LUMINANCE_ALPHA16I_EXT:
+      *datatype = GL_SHORT;
+      *components = 2;
+      break;
+   case GL_LUMINANCE_ALPHA32I_EXT:
+      *datatype = GL_INT;
+      *components = 2;
+      break;
+   case GL_LUMINANCE_ALPHA8UI_EXT:
+      *datatype = GL_UNSIGNED_BYTE;
+      *components = 2;
+      break;
+   case GL_LUMINANCE_ALPHA16UI_EXT:
+      *datatype = GL_UNSIGNED_SHORT;
+      *components = 2;
+      break;
+   case GL_LUMINANCE_ALPHA32UI_EXT:
+      *datatype = GL_UNSIGNED_INT;
+      *components = 2;
+      break;
+   case GL_INTENSITY8:
+      *datatype = GL_UNSIGNED_BYTE;
+      *components = 1;
+      break;
+   case GL_INTENSITY16:
+      *datatype = GL_UNSIGNED_SHORT;
+      *components = 1;
+      break;
+   case GL_INTENSITY16F_ARB:
+      *datatype = GL_HALF_FLOAT;
+      *components = 1;
+      break;
+   case GL_INTENSITY32F_ARB:
+      *datatype = GL_FLOAT;
+      *components = 1;
+      break;
+   case GL_INTENSITY8I_EXT:
+      *datatype = GL_BYTE;
+      *components = 1;
+      break;
+   case GL_INTENSITY16I_EXT:
+      *datatype = GL_SHORT;
+      *components = 1;
+      break;
+   case GL_INTENSITY32I_EXT:
+      *datatype = GL_INT;
+      *components = 1;
+      break;
+   case GL_INTENSITY8UI_EXT:
+      *datatype = GL_UNSIGNED_BYTE;
+      *components = 1;
+      break;
+   case GL_INTENSITY16UI_EXT:
+      *datatype = GL_UNSIGNED_SHORT;
+      *components = 1;
+      break;
+   case GL_INTENSITY32UI_EXT:
+      *datatype = GL_UNSIGNED_INT;
+      *components = 1;
+      break;
+   case GL_RGBA8:
+      *datatype = GL_UNSIGNED_BYTE;
+      *components = 4;
+      break;
+   case GL_RGBA16:
+      *datatype = GL_UNSIGNED_SHORT;
+      *components = 4;
+      break;
+   case GL_RGBA16F_ARB:
+      *datatype = GL_HALF_FLOAT;
+      *components = 4;
+      break;
+   case GL_RGBA32F_ARB:
+      *datatype = GL_FLOAT;
+      *components = 4;
+      break;
+   case GL_RGBA8I_EXT:
+      *datatype = GL_BYTE;
+      *components = 4;
+      break;
+   case GL_RGBA16I_EXT:
+      *datatype = GL_SHORT;
+      *components = 4;
+      break;
+   case GL_RGBA32I_EXT:
+      *datatype = GL_INT;
+      *components = 4;
+      break;
+   case GL_RGBA8UI_EXT:
+      *datatype = GL_UNSIGNED_BYTE;
+      *components = 4;
+      break;
+   case GL_RGBA16UI_EXT:
+      *datatype = GL_UNSIGNED_SHORT;
+      *components = 4;
+      break;
+   case GL_RGBA32UI_EXT:
+      *datatype = GL_UNSIGNED_INT;
+      *components = 4;
+      break;
+   default:
+      return GL_FALSE;
+   }
+
+   if (*datatype == GL_FLOAT && !ctx->Extensions.ARB_texture_float)
+      return GL_FALSE;
+
+   if (*datatype == GL_HALF_FLOAT && !ctx->Extensions.ARB_half_float_pixel)
+      return GL_FALSE;
+
+   return GL_TRUE;
+}
+
+
+/** GL_ARB_texture_buffer_object */
+void GLAPIENTRY
+_mesa_TexBuffer(GLenum target, GLenum internalFormat, GLuint buffer)
+{
+   struct gl_texture_object *texObj;
+   struct gl_buffer_object *bufObj;
+   GLenum dataType;
+   GLuint comps;
+
+   GET_CURRENT_CONTEXT(ctx);
+   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
+
+   if (!ctx->Extensions.ARB_texture_buffer_object) {
+      _mesa_error(ctx, GL_INVALID_OPERATION, "glTexBuffer");
+      return;
+   }
+
+   if (target != GL_TEXTURE_BUFFER_ARB) {
+      _mesa_error(ctx, GL_INVALID_ENUM, "glTexBuffer(target)");
+      return;
+   }
+
+   if (!get_sized_format_info(ctx, internalFormat, &dataType, &comps)) {
+      _mesa_error(ctx, GL_INVALID_ENUM, "glTexBuffer(internalFormat 0x%x)",
+                  internalFormat);
+      return;
+   }
+
+   bufObj = _mesa_lookup_bufferobj(ctx, buffer);
+   if (buffer && !bufObj) {
+      _mesa_error(ctx, GL_INVALID_OPERATION, "glTexBuffer(buffer %u)", buffer);
+      return;
+   }
+
+   texObj = _mesa_get_current_tex_object(ctx, target);
+
+   _mesa_lock_texture(ctx, texObj);
+   {
+      _mesa_reference_buffer_object(ctx, &texObj->BufferObject, bufObj);
+      texObj->BufferObjectFormat = internalFormat;
+   }
+   _mesa_unlock_texture(ctx, texObj);
+}
index bb5509e5be679d67f376a270250ca0184d9f6baf..19abc649898f80bef37bf4341d3f705dce345ed5 100644 (file)
@@ -59,7 +59,8 @@ _mesa_new_texture_image( struct gl_context *ctx );
 
 
 extern void
-_mesa_delete_texture_image( struct gl_context *ctx, struct gl_texture_image *teximage );
+_mesa_delete_texture_image( struct gl_context *ctx,
+                            struct gl_texture_image *teximage );
 
 extern void
 _mesa_free_texture_image_data( struct gl_context *ctx, 
@@ -82,7 +83,8 @@ _mesa_choose_texture_format(struct gl_context *ctx,
 
 
 extern void
-_mesa_clear_texture_image(struct gl_context *ctx, struct gl_texture_image *texImage);
+_mesa_clear_texture_image(struct gl_context *ctx,
+                          struct gl_texture_image *texImage);
 
 
 extern void
@@ -92,7 +94,8 @@ _mesa_set_tex_image(struct gl_texture_object *tObj,
 
 
 extern struct gl_texture_object *
-_mesa_select_tex_object(struct gl_context *ctx, const struct gl_texture_unit *texUnit,
+_mesa_select_tex_object(struct gl_context *ctx,
+                        const struct gl_texture_unit *texUnit,
                         GLenum target);
 
 extern struct gl_texture_object *
@@ -100,7 +103,8 @@ _mesa_get_current_tex_object(struct gl_context *ctx, GLenum target);
 
 
 extern struct gl_texture_image *
-_mesa_select_tex_image(struct gl_context *ctx, const struct gl_texture_object *texObj,
+_mesa_select_tex_image(struct gl_context *ctx,
+                       const struct gl_texture_object *texObj,
                        GLenum target, GLint level);
 
 
@@ -271,6 +275,11 @@ _mesa_CompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset,
                                  GLsizei height, GLsizei depth, GLenum format,
                                  GLsizei imageSize, const GLvoid *data);
 
+
+extern void GLAPIENTRY
+_mesa_TexBuffer(GLenum target, GLenum internalFormat, GLuint buffer);
+
+
 /*@}*/
 
 #endif
index c1e3e4dec7931476af3c6465c9b58899393c3fb7..43d6e52dfe9b137f4f0507ca13ef55de11631de6 100644 (file)
@@ -29,6 +29,7 @@
 
 
 #include "mfeatures.h"
+#include "bufferobj.h"
 #include "colortab.h"
 #include "context.h"
 #include "enums.h"
@@ -105,7 +106,8 @@ _mesa_initialize_texture_object( struct gl_texture_object *obj,
           target == GL_TEXTURE_CUBE_MAP_ARB ||
           target == GL_TEXTURE_RECTANGLE_NV ||
           target == GL_TEXTURE_1D_ARRAY_EXT ||
-          target == GL_TEXTURE_2D_ARRAY_EXT);
+          target == GL_TEXTURE_2D_ARRAY_EXT ||
+          target == GL_TEXTURE_BUFFER);
 
    memset(obj, 0, sizeof(*obj));
    /* init the non-zero fields */
@@ -114,35 +116,37 @@ _mesa_initialize_texture_object( struct gl_texture_object *obj,
    obj->Name = name;
    obj->Target = target;
    obj->Priority = 1.0F;
+   obj->BaseLevel = 0;
+   obj->MaxLevel = 1000;
+
+   /* sampler state */
    if (target == GL_TEXTURE_RECTANGLE_NV) {
-      obj->WrapS = GL_CLAMP_TO_EDGE;
-      obj->WrapT = GL_CLAMP_TO_EDGE;
-      obj->WrapR = GL_CLAMP_TO_EDGE;
-      obj->MinFilter = GL_LINEAR;
+      obj->Sampler.WrapS = GL_CLAMP_TO_EDGE;
+      obj->Sampler.WrapT = GL_CLAMP_TO_EDGE;
+      obj->Sampler.WrapR = GL_CLAMP_TO_EDGE;
+      obj->Sampler.MinFilter = GL_LINEAR;
    }
    else {
-      obj->WrapS = GL_REPEAT;
-      obj->WrapT = GL_REPEAT;
-      obj->WrapR = GL_REPEAT;
-      obj->MinFilter = GL_NEAREST_MIPMAP_LINEAR;
+      obj->Sampler.WrapS = GL_REPEAT;
+      obj->Sampler.WrapT = GL_REPEAT;
+      obj->Sampler.WrapR = GL_REPEAT;
+      obj->Sampler.MinFilter = GL_NEAREST_MIPMAP_LINEAR;
    }
-   obj->MagFilter = GL_LINEAR;
-   obj->MinLod = -1000.0;
-   obj->MaxLod = 1000.0;
-   obj->LodBias = 0.0;
-   obj->BaseLevel = 0;
-   obj->MaxLevel = 1000;
-   obj->MaxAnisotropy = 1.0;
-   obj->CompareMode = GL_NONE;         /* ARB_shadow */
-   obj->CompareFunc = GL_LEQUAL;       /* ARB_shadow */
-   obj->CompareFailValue = 0.0F;       /* ARB_shadow_ambient */
-   obj->DepthMode = GL_LUMINANCE;      /* ARB_depth_texture */
+   obj->Sampler.MagFilter = GL_LINEAR;
+   obj->Sampler.MinLod = -1000.0;
+   obj->Sampler.MaxLod = 1000.0;
+   obj->Sampler.LodBias = 0.0;
+   obj->Sampler.MaxAnisotropy = 1.0;
+   obj->Sampler.CompareMode = GL_NONE;         /* ARB_shadow */
+   obj->Sampler.CompareFunc = GL_LEQUAL;       /* ARB_shadow */
+   obj->Sampler.CompareFailValue = 0.0F;       /* ARB_shadow_ambient */
+   obj->Sampler.DepthMode = GL_LUMINANCE;      /* ARB_depth_texture */
    obj->Swizzle[0] = GL_RED;
    obj->Swizzle[1] = GL_GREEN;
    obj->Swizzle[2] = GL_BLUE;
    obj->Swizzle[3] = GL_ALPHA;
    obj->_Swizzle = SWIZZLE_NOOP;
-   obj->sRGBDecode = GL_DECODE_EXT;
+   obj->Sampler.sRGBDecode = GL_DECODE_EXT;
 }
 
 
@@ -158,10 +162,10 @@ finish_texture_init(struct gl_context *ctx, GLenum target,
 
    if (target == GL_TEXTURE_RECTANGLE_NV) {
       /* have to init wrap and filter state here - kind of klunky */
-      obj->WrapS = GL_CLAMP_TO_EDGE;
-      obj->WrapT = GL_CLAMP_TO_EDGE;
-      obj->WrapR = GL_CLAMP_TO_EDGE;
-      obj->MinFilter = GL_LINEAR;
+      obj->Sampler.WrapS = GL_CLAMP_TO_EDGE;
+      obj->Sampler.WrapT = GL_CLAMP_TO_EDGE;
+      obj->Sampler.WrapR = GL_CLAMP_TO_EDGE;
+      obj->Sampler.MinFilter = GL_LINEAR;
       if (ctx->Driver.TexParameter) {
          static const GLfloat fparam_wrap[1] = {(GLfloat) GL_CLAMP_TO_EDGE};
          static const GLfloat fparam_filter[1] = {(GLfloat) GL_LINEAR};
@@ -204,6 +208,8 @@ _mesa_delete_texture_object(struct gl_context *ctx,
       }
    }
 
+   _mesa_reference_buffer_object(ctx, &texObj->BufferObject, NULL);
+
    /* destroy the mutex -- it may have allocated memory (eg on bsd) */
    _glthread_DESTROY_MUTEX(texObj->Mutex);
 
@@ -227,25 +233,25 @@ _mesa_copy_texture_object( struct gl_texture_object *dest,
    dest->Target = src->Target;
    dest->Name = src->Name;
    dest->Priority = src->Priority;
-   dest->BorderColor.f[0] = src->BorderColor.f[0];
-   dest->BorderColor.f[1] = src->BorderColor.f[1];
-   dest->BorderColor.f[2] = src->BorderColor.f[2];
-   dest->BorderColor.f[3] = src->BorderColor.f[3];
-   dest->WrapS = src->WrapS;
-   dest->WrapT = src->WrapT;
-   dest->WrapR = src->WrapR;
-   dest->MinFilter = src->MinFilter;
-   dest->MagFilter = src->MagFilter;
-   dest->MinLod = src->MinLod;
-   dest->MaxLod = src->MaxLod;
-   dest->LodBias = src->LodBias;
+   dest->Sampler.BorderColor.f[0] = src->Sampler.BorderColor.f[0];
+   dest->Sampler.BorderColor.f[1] = src->Sampler.BorderColor.f[1];
+   dest->Sampler.BorderColor.f[2] = src->Sampler.BorderColor.f[2];
+   dest->Sampler.BorderColor.f[3] = src->Sampler.BorderColor.f[3];
+   dest->Sampler.WrapS = src->Sampler.WrapS;
+   dest->Sampler.WrapT = src->Sampler.WrapT;
+   dest->Sampler.WrapR = src->Sampler.WrapR;
+   dest->Sampler.MinFilter = src->Sampler.MinFilter;
+   dest->Sampler.MagFilter = src->Sampler.MagFilter;
+   dest->Sampler.MinLod = src->Sampler.MinLod;
+   dest->Sampler.MaxLod = src->Sampler.MaxLod;
+   dest->Sampler.LodBias = src->Sampler.LodBias;
    dest->BaseLevel = src->BaseLevel;
    dest->MaxLevel = src->MaxLevel;
-   dest->MaxAnisotropy = src->MaxAnisotropy;
-   dest->CompareMode = src->CompareMode;
-   dest->CompareFunc = src->CompareFunc;
-   dest->CompareFailValue = src->CompareFailValue;
-   dest->DepthMode = src->DepthMode;
+   dest->Sampler.MaxAnisotropy = src->Sampler.MaxAnisotropy;
+   dest->Sampler.CompareMode = src->Sampler.CompareMode;
+   dest->Sampler.CompareFunc = src->Sampler.CompareFunc;
+   dest->Sampler.CompareFailValue = src->Sampler.CompareFailValue;
+   dest->Sampler.DepthMode = src->Sampler.DepthMode;
    dest->_MaxLevel = src->_MaxLevel;
    dest->_MaxLambda = src->_MaxLambda;
    dest->GenerateMipmap = src->GenerateMipmap;
@@ -299,6 +305,7 @@ valid_texture_object(const struct gl_texture_object *tex)
    case GL_TEXTURE_RECTANGLE_NV:
    case GL_TEXTURE_1D_ARRAY_EXT:
    case GL_TEXTURE_2D_ARRAY_EXT:
+   case GL_TEXTURE_BUFFER:
       return GL_TRUE;
    case 0x99:
       _mesa_problem(NULL, "invalid reference to a deleted texture object");
@@ -501,7 +508,7 @@ _mesa_test_texobj_completeness( const struct gl_context *ctx,
    }
 
    /* extra checking for mipmaps */
-   if (t->MinFilter != GL_NEAREST && t->MinFilter != GL_LINEAR) {
+   if (t->Sampler.MinFilter != GL_NEAREST && t->Sampler.MinFilter != GL_LINEAR) {
       /*
        * Mipmapping: determine if we have a complete set of mipmaps
        */
@@ -756,8 +763,8 @@ _mesa_get_fallback_texture(struct gl_context *ctx)
       /* create texture object */
       texObj = ctx->Driver.NewTextureObject(ctx, 0, GL_TEXTURE_2D);
       assert(texObj->RefCount == 1);
-      texObj->MinFilter = GL_NEAREST;
-      texObj->MagFilter = GL_NEAREST;
+      texObj->Sampler.MinFilter = GL_NEAREST;
+      texObj->Sampler.MagFilter = GL_NEAREST;
 
       /* create level[0] texture image */
       texImage = _mesa_get_tex_image(ctx, texObj, GL_TEXTURE_2D, 0);
@@ -989,6 +996,8 @@ target_enum_to_index(GLenum target)
       return TEXTURE_1D_ARRAY_INDEX;
    case GL_TEXTURE_2D_ARRAY_EXT:
       return TEXTURE_2D_ARRAY_INDEX;
+   case GL_TEXTURE_BUFFER_ARB:
+      return TEXTURE_BUFFER_INDEX;
    default:
       return -1;
    }
index 2461b063efdc97a9676ba67d6c8e63839e0890bd..476a17537a30d397db6f8023e4905880e5405730 100644 (file)
@@ -52,14 +52,16 @@ _mesa_initialize_texture_object( struct gl_texture_object *obj,
                                  GLuint name, GLenum target );
 
 extern void
-_mesa_delete_texture_object( struct gl_context *ctx, struct gl_texture_object *obj );
+_mesa_delete_texture_object( struct gl_context *ctx,
+                             struct gl_texture_object *obj );
 
 extern void
 _mesa_copy_texture_object( struct gl_texture_object *dest,
                            const struct gl_texture_object *src );
 
 extern void
-_mesa_clear_texture_object(struct gl_context *ctx, struct gl_texture_object *obj);
+_mesa_clear_texture_object(struct gl_context *ctx,
+                           struct gl_texture_object *obj);
 
 extern void
 _mesa_reference_texobj(struct gl_texture_object **ptr,
index 6e14face4dd35b43532ed5c4da23c4e17c54d808..3d56dac3f91b8b9ea226cd49ca000b044d19257f 100644 (file)
@@ -38,6 +38,7 @@
 #include "main/macros.h"
 #include "main/mfeatures.h"
 #include "main/mtypes.h"
+#include "main/state.h"
 #include "main/texcompress.h"
 #include "main/texparam.h"
 #include "main/teximage.h"
@@ -215,13 +216,13 @@ set_tex_parameteri(struct gl_context *ctx,
 {
    switch (pname) {
    case GL_TEXTURE_MIN_FILTER:
-      if (texObj->MinFilter == params[0])
+      if (texObj->Sampler.MinFilter == params[0])
          return GL_FALSE;
       switch (params[0]) {
       case GL_NEAREST:
       case GL_LINEAR:
          incomplete(ctx, texObj);
-         texObj->MinFilter = params[0];
+         texObj->Sampler.MinFilter = params[0];
          return GL_TRUE;
       case GL_NEAREST_MIPMAP_NEAREST:
       case GL_LINEAR_MIPMAP_NEAREST:
@@ -229,7 +230,7 @@ set_tex_parameteri(struct gl_context *ctx,
       case GL_LINEAR_MIPMAP_LINEAR:
          if (texObj->Target != GL_TEXTURE_RECTANGLE_NV) {
             incomplete(ctx, texObj);
-            texObj->MinFilter = params[0];
+            texObj->Sampler.MinFilter = params[0];
             return GL_TRUE;
          }
          /* fall-through */
@@ -239,13 +240,13 @@ set_tex_parameteri(struct gl_context *ctx,
       return GL_FALSE;
 
    case GL_TEXTURE_MAG_FILTER:
-      if (texObj->MagFilter == params[0])
+      if (texObj->Sampler.MagFilter == params[0])
          return GL_FALSE;
       switch (params[0]) {
       case GL_NEAREST:
       case GL_LINEAR:
          flush(ctx); /* does not effect completeness */
-         texObj->MagFilter = params[0];
+         texObj->Sampler.MagFilter = params[0];
          return GL_TRUE;
       default:
          goto invalid_param;
@@ -253,31 +254,31 @@ set_tex_parameteri(struct gl_context *ctx,
       return GL_FALSE;
 
    case GL_TEXTURE_WRAP_S:
-      if (texObj->WrapS == params[0])
+      if (texObj->Sampler.WrapS == params[0])
          return GL_FALSE;
       if (validate_texture_wrap_mode(ctx, texObj->Target, params[0])) {
          flush(ctx);
-         texObj->WrapS = params[0];
+         texObj->Sampler.WrapS = params[0];
          return GL_TRUE;
       }
       return GL_FALSE;
 
    case GL_TEXTURE_WRAP_T:
-      if (texObj->WrapT == params[0])
+      if (texObj->Sampler.WrapT == params[0])
          return GL_FALSE;
       if (validate_texture_wrap_mode(ctx, texObj->Target, params[0])) {
          flush(ctx);
-         texObj->WrapT = params[0];
+         texObj->Sampler.WrapT = params[0];
          return GL_TRUE;
       }
       return GL_FALSE;
 
    case GL_TEXTURE_WRAP_R:
-      if (texObj->WrapR == params[0])
+      if (texObj->Sampler.WrapR == params[0])
          return GL_FALSE;
       if (validate_texture_wrap_mode(ctx, texObj->Target, params[0])) {
          flush(ctx);
-         texObj->WrapR = params[0];
+         texObj->Sampler.WrapR = params[0];
          return GL_TRUE;
       }
       return GL_FALSE;
@@ -317,12 +318,12 @@ set_tex_parameteri(struct gl_context *ctx,
 
    case GL_TEXTURE_COMPARE_MODE_ARB:
       if (ctx->Extensions.ARB_shadow) {
-         if (texObj->CompareMode == params[0])
+         if (texObj->Sampler.CompareMode == params[0])
             return GL_FALSE;
          if (params[0] == GL_NONE ||
              params[0] == GL_COMPARE_R_TO_TEXTURE_ARB) {
             flush(ctx);
-            texObj->CompareMode = params[0];
+            texObj->Sampler.CompareMode = params[0];
             return GL_TRUE;
          }
          goto invalid_param;
@@ -331,13 +332,13 @@ set_tex_parameteri(struct gl_context *ctx,
 
    case GL_TEXTURE_COMPARE_FUNC_ARB:
       if (ctx->Extensions.ARB_shadow) {
-         if (texObj->CompareFunc == params[0])
+         if (texObj->Sampler.CompareFunc == params[0])
             return GL_FALSE;
          switch (params[0]) {
          case GL_LEQUAL:
          case GL_GEQUAL:
             flush(ctx);
-            texObj->CompareFunc = params[0];
+            texObj->Sampler.CompareFunc = params[0];
             return GL_TRUE;
          case GL_EQUAL:
          case GL_NOTEQUAL:
@@ -347,7 +348,7 @@ set_tex_parameteri(struct gl_context *ctx,
          case GL_NEVER:
             if (ctx->Extensions.EXT_shadow_funcs) {
                flush(ctx);
-               texObj->CompareFunc = params[0];
+               texObj->Sampler.CompareFunc = params[0];
                return GL_TRUE;
             }
             /* fall-through */
@@ -359,14 +360,14 @@ set_tex_parameteri(struct gl_context *ctx,
 
    case GL_DEPTH_TEXTURE_MODE_ARB:
       if (ctx->Extensions.ARB_depth_texture) {
-         if (texObj->DepthMode == params[0])
+         if (texObj->Sampler.DepthMode == params[0])
             return GL_FALSE;
          if (params[0] == GL_LUMINANCE ||
              params[0] == GL_INTENSITY ||
              params[0] == GL_ALPHA ||
              (ctx->Extensions.ARB_texture_rg && params[0] == GL_RED)) {
             flush(ctx);
-            texObj->DepthMode = params[0];
+            texObj->Sampler.DepthMode = params[0];
             return GL_TRUE;
          }
          goto invalid_param;
@@ -428,9 +429,9 @@ set_tex_parameteri(struct gl_context *ctx,
       if (ctx->Extensions.EXT_texture_sRGB_decode) {
         GLenum decode = params[0];
         if (decode == GL_DECODE_EXT || decode == GL_SKIP_DECODE_EXT) {
-           if (texObj->sRGBDecode != decode) {
+           if (texObj->Sampler.sRGBDecode != decode) {
               flush(ctx);
-              texObj->sRGBDecode = decode;
+              texObj->Sampler.sRGBDecode = decode;
               _mesa_update_fetch_functions(texObj);
            }
            return GL_TRUE;
@@ -465,17 +466,17 @@ set_tex_parameterf(struct gl_context *ctx,
 {
    switch (pname) {
    case GL_TEXTURE_MIN_LOD:
-      if (texObj->MinLod == params[0])
+      if (texObj->Sampler.MinLod == params[0])
          return GL_FALSE;
       flush(ctx);
-      texObj->MinLod = params[0];
+      texObj->Sampler.MinLod = params[0];
       return GL_TRUE;
 
    case GL_TEXTURE_MAX_LOD:
-      if (texObj->MaxLod == params[0])
+      if (texObj->Sampler.MaxLod == params[0])
          return GL_FALSE;
       flush(ctx);
-      texObj->MaxLod = params[0];
+      texObj->Sampler.MaxLod = params[0];
       return GL_TRUE;
 
    case GL_TEXTURE_PRIORITY:
@@ -485,7 +486,7 @@ set_tex_parameterf(struct gl_context *ctx,
 
    case GL_TEXTURE_MAX_ANISOTROPY_EXT:
       if (ctx->Extensions.EXT_texture_filter_anisotropic) {
-         if (texObj->MaxAnisotropy == params[0])
+         if (texObj->Sampler.MaxAnisotropy == params[0])
             return GL_FALSE;
          if (params[0] < 1.0) {
             _mesa_error(ctx, GL_INVALID_VALUE, "glTexParameter(param)" );
@@ -493,7 +494,7 @@ set_tex_parameterf(struct gl_context *ctx,
          }
          flush(ctx);
          /* clamp to max, that's what NVIDIA does */
-         texObj->MaxAnisotropy = MIN2(params[0],
+         texObj->Sampler.MaxAnisotropy = MIN2(params[0],
                                       ctx->Const.MaxTextureMaxAnisotropy);
          return GL_TRUE;
       }
@@ -507,9 +508,9 @@ set_tex_parameterf(struct gl_context *ctx,
 
    case GL_TEXTURE_COMPARE_FAIL_VALUE_ARB:
       if (ctx->Extensions.ARB_shadow_ambient) {
-         if (texObj->CompareFailValue != params[0]) {
+         if (texObj->Sampler.CompareFailValue != params[0]) {
             flush(ctx);
-            texObj->CompareFailValue = CLAMP(params[0], 0.0F, 1.0F);
+            texObj->Sampler.CompareFailValue = CLAMP(params[0], 0.0F, 1.0F);
             return GL_TRUE;
          }
       }
@@ -522,9 +523,9 @@ set_tex_parameterf(struct gl_context *ctx,
    case GL_TEXTURE_LOD_BIAS:
       /* NOTE: this is really part of OpenGL 1.4, not EXT_texture_lod_bias */
       if (ctx->Extensions.EXT_texture_lod_bias) {
-         if (texObj->LodBias != params[0]) {
+         if (texObj->Sampler.LodBias != params[0]) {
             flush(ctx);
-            texObj->LodBias = params[0];
+            texObj->Sampler.LodBias = params[0];
             return GL_TRUE;
          }
          return GL_FALSE;
@@ -533,10 +534,18 @@ set_tex_parameterf(struct gl_context *ctx,
 
    case GL_TEXTURE_BORDER_COLOR:
       flush(ctx);
-      texObj->BorderColor.f[RCOMP] = params[0];
-      texObj->BorderColor.f[GCOMP] = params[1];
-      texObj->BorderColor.f[BCOMP] = params[2];
-      texObj->BorderColor.f[ACOMP] = params[3];
+      /* ARB_texture_float disables clamping */
+      if (ctx->Extensions.ARB_texture_float) {
+         texObj->Sampler.BorderColor.f[RCOMP] = params[0];
+         texObj->Sampler.BorderColor.f[GCOMP] = params[1];
+         texObj->Sampler.BorderColor.f[BCOMP] = params[2];
+         texObj->Sampler.BorderColor.f[ACOMP] = params[3];
+      } else {
+         texObj->Sampler.BorderColor.f[RCOMP] = CLAMP(params[0], 0.0F, 1.0F);
+         texObj->Sampler.BorderColor.f[GCOMP] = CLAMP(params[1], 0.0F, 1.0F);
+         texObj->Sampler.BorderColor.f[BCOMP] = CLAMP(params[2], 0.0F, 1.0F);
+         texObj->Sampler.BorderColor.f[ACOMP] = CLAMP(params[3], 0.0F, 1.0F);
+      }
       return GL_TRUE;
 
    default:
@@ -775,7 +784,7 @@ _mesa_TexParameterIiv(GLenum target, GLenum pname, const GLint *params)
    case GL_TEXTURE_BORDER_COLOR:
       FLUSH_VERTICES(ctx, _NEW_TEXTURE);
       /* set the integer-valued border color */
-      COPY_4V(texObj->BorderColor.i, params);
+      COPY_4V(texObj->Sampler.BorderColor.i, params);
       break;
    default:
       _mesa_TexParameteriv(target, pname, params);
@@ -805,7 +814,7 @@ _mesa_TexParameterIuiv(GLenum target, GLenum pname, const GLuint *params)
    case GL_TEXTURE_BORDER_COLOR:
       FLUSH_VERTICES(ctx, _NEW_TEXTURE);
       /* set the unsigned integer-valued border color */
-      COPY_4V(texObj->BorderColor.ui, params);
+      COPY_4V(texObj->Sampler.BorderColor.ui, params);
       break;
    default:
       _mesa_TexParameteriv(target, pname, (const GLint *) params);
@@ -1092,25 +1101,37 @@ _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
    _mesa_lock_texture(ctx, obj);
    switch (pname) {
       case GL_TEXTURE_MAG_FILTER:
-        *params = ENUM_TO_FLOAT(obj->MagFilter);
+        *params = ENUM_TO_FLOAT(obj->Sampler.MagFilter);
         break;
       case GL_TEXTURE_MIN_FILTER:
-         *params = ENUM_TO_FLOAT(obj->MinFilter);
+         *params = ENUM_TO_FLOAT(obj->Sampler.MinFilter);
          break;
       case GL_TEXTURE_WRAP_S:
-         *params = ENUM_TO_FLOAT(obj->WrapS);
+         *params = ENUM_TO_FLOAT(obj->Sampler.WrapS);
          break;
       case GL_TEXTURE_WRAP_T:
-         *params = ENUM_TO_FLOAT(obj->WrapT);
+         *params = ENUM_TO_FLOAT(obj->Sampler.WrapT);
          break;
       case GL_TEXTURE_WRAP_R:
-         *params = ENUM_TO_FLOAT(obj->WrapR);
+         *params = ENUM_TO_FLOAT(obj->Sampler.WrapR);
          break;
       case GL_TEXTURE_BORDER_COLOR:
-         params[0] = CLAMP(obj->BorderColor.f[0], 0.0F, 1.0F);
-         params[1] = CLAMP(obj->BorderColor.f[1], 0.0F, 1.0F);
-         params[2] = CLAMP(obj->BorderColor.f[2], 0.0F, 1.0F);
-         params[3] = CLAMP(obj->BorderColor.f[3], 0.0F, 1.0F);
+         if(ctx->NewState & (_NEW_BUFFERS | _NEW_FRAG_CLAMP))
+            _mesa_update_state_locked(ctx);
+         if(ctx->Color._ClampFragmentColor)
+         {
+            params[0] = CLAMP(obj->Sampler.BorderColor.f[0], 0.0F, 1.0F);
+            params[1] = CLAMP(obj->Sampler.BorderColor.f[1], 0.0F, 1.0F);
+            params[2] = CLAMP(obj->Sampler.BorderColor.f[2], 0.0F, 1.0F);
+            params[3] = CLAMP(obj->Sampler.BorderColor.f[3], 0.0F, 1.0F);
+         }
+         else
+         {
+            params[0] = obj->Sampler.BorderColor.f[0];
+            params[1] = obj->Sampler.BorderColor.f[1];
+            params[2] = obj->Sampler.BorderColor.f[2];
+            params[3] = obj->Sampler.BorderColor.f[3];
+         }
          break;
       case GL_TEXTURE_RESIDENT:
          {
@@ -1126,10 +1147,10 @@ _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
          *params = obj->Priority;
          break;
       case GL_TEXTURE_MIN_LOD:
-         *params = obj->MinLod;
+         *params = obj->Sampler.MinLod;
          break;
       case GL_TEXTURE_MAX_LOD:
-         *params = obj->MaxLod;
+         *params = obj->Sampler.MaxLod;
          break;
       case GL_TEXTURE_BASE_LEVEL:
          *params = (GLfloat) obj->BaseLevel;
@@ -1139,14 +1160,14 @@ _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
          break;
       case GL_TEXTURE_MAX_ANISOTROPY_EXT:
          if (ctx->Extensions.EXT_texture_filter_anisotropic) {
-            *params = obj->MaxAnisotropy;
+            *params = obj->Sampler.MaxAnisotropy;
          }
         else
            error = GL_TRUE;
          break;
       case GL_TEXTURE_COMPARE_FAIL_VALUE_ARB:
          if (ctx->Extensions.ARB_shadow_ambient) {
-            *params = obj->CompareFailValue;
+            *params = obj->Sampler.CompareFailValue;
          }
         else 
            error = GL_TRUE;
@@ -1156,28 +1177,28 @@ _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
          break;
       case GL_TEXTURE_COMPARE_MODE_ARB:
          if (ctx->Extensions.ARB_shadow) {
-            *params = (GLfloat) obj->CompareMode;
+            *params = (GLfloat) obj->Sampler.CompareMode;
          }
         else 
            error = GL_TRUE;
          break;
       case GL_TEXTURE_COMPARE_FUNC_ARB:
          if (ctx->Extensions.ARB_shadow) {
-            *params = (GLfloat) obj->CompareFunc;
+            *params = (GLfloat) obj->Sampler.CompareFunc;
          }
         else 
            error = GL_TRUE;
          break;
       case GL_DEPTH_TEXTURE_MODE_ARB:
          if (ctx->Extensions.ARB_depth_texture) {
-            *params = (GLfloat) obj->DepthMode;
+            *params = (GLfloat) obj->Sampler.DepthMode;
          }
         else 
            error = GL_TRUE;
          break;
       case GL_TEXTURE_LOD_BIAS:
          if (ctx->Extensions.EXT_texture_lod_bias) {
-            *params = obj->LodBias;
+            *params = obj->Sampler.LodBias;
          }
         else 
            error = GL_TRUE;
@@ -1244,27 +1265,27 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
    _mesa_lock_texture(ctx, obj);
    switch (pname) {
       case GL_TEXTURE_MAG_FILTER:
-         *params = (GLint) obj->MagFilter;
+         *params = (GLint) obj->Sampler.MagFilter;
          break;;
       case GL_TEXTURE_MIN_FILTER:
-         *params = (GLint) obj->MinFilter;
+         *params = (GLint) obj->Sampler.MinFilter;
          break;;
       case GL_TEXTURE_WRAP_S:
-         *params = (GLint) obj->WrapS;
+         *params = (GLint) obj->Sampler.WrapS;
          break;;
       case GL_TEXTURE_WRAP_T:
-         *params = (GLint) obj->WrapT;
+         *params = (GLint) obj->Sampler.WrapT;
          break;;
       case GL_TEXTURE_WRAP_R:
-         *params = (GLint) obj->WrapR;
+         *params = (GLint) obj->Sampler.WrapR;
          break;;
       case GL_TEXTURE_BORDER_COLOR:
          {
             GLfloat b[4];
-            b[0] = CLAMP(obj->BorderColor.f[0], 0.0F, 1.0F);
-            b[1] = CLAMP(obj->BorderColor.f[1], 0.0F, 1.0F);
-            b[2] = CLAMP(obj->BorderColor.f[2], 0.0F, 1.0F);
-            b[3] = CLAMP(obj->BorderColor.f[3], 0.0F, 1.0F);
+            b[0] = CLAMP(obj->Sampler.BorderColor.f[0], 0.0F, 1.0F);
+            b[1] = CLAMP(obj->Sampler.BorderColor.f[1], 0.0F, 1.0F);
+            b[2] = CLAMP(obj->Sampler.BorderColor.f[2], 0.0F, 1.0F);
+            b[3] = CLAMP(obj->Sampler.BorderColor.f[3], 0.0F, 1.0F);
             params[0] = FLOAT_TO_INT(b[0]);
             params[1] = FLOAT_TO_INT(b[1]);
             params[2] = FLOAT_TO_INT(b[2]);
@@ -1285,10 +1306,10 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
          *params = FLOAT_TO_INT(obj->Priority);
          break;;
       case GL_TEXTURE_MIN_LOD:
-         *params = (GLint) obj->MinLod;
+         *params = (GLint) obj->Sampler.MinLod;
          break;;
       case GL_TEXTURE_MAX_LOD:
-         *params = (GLint) obj->MaxLod;
+         *params = (GLint) obj->Sampler.MaxLod;
          break;;
       case GL_TEXTURE_BASE_LEVEL:
          *params = obj->BaseLevel;
@@ -1298,7 +1319,7 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
          break;;
       case GL_TEXTURE_MAX_ANISOTROPY_EXT:
          if (ctx->Extensions.EXT_texture_filter_anisotropic) {
-            *params = (GLint) obj->MaxAnisotropy;
+            *params = (GLint) obj->Sampler.MaxAnisotropy;
          }
          else {
             error = GL_TRUE;
@@ -1306,7 +1327,7 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
          break;
       case GL_TEXTURE_COMPARE_FAIL_VALUE_ARB:
          if (ctx->Extensions.ARB_shadow_ambient) {
-            *params = (GLint) FLOAT_TO_INT(obj->CompareFailValue);
+            *params = (GLint) FLOAT_TO_INT(obj->Sampler.CompareFailValue);
          }
          else {
             error = GL_TRUE;
@@ -1317,7 +1338,7 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
          break;
       case GL_TEXTURE_COMPARE_MODE_ARB:
          if (ctx->Extensions.ARB_shadow) {
-            *params = (GLint) obj->CompareMode;
+            *params = (GLint) obj->Sampler.CompareMode;
          }
          else {
             error = GL_TRUE;
@@ -1325,7 +1346,7 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
          break;
       case GL_TEXTURE_COMPARE_FUNC_ARB:
          if (ctx->Extensions.ARB_shadow) {
-            *params = (GLint) obj->CompareFunc;
+            *params = (GLint) obj->Sampler.CompareFunc;
          }
          else {
             error = GL_TRUE;
@@ -1333,7 +1354,7 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
          break;
       case GL_DEPTH_TEXTURE_MODE_ARB:
          if (ctx->Extensions.ARB_depth_texture) {
-            *params = (GLint) obj->DepthMode;
+            *params = (GLint) obj->Sampler.DepthMode;
          }
          else {
             error = GL_TRUE;
@@ -1341,7 +1362,7 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
          break;
       case GL_TEXTURE_LOD_BIAS:
          if (ctx->Extensions.EXT_texture_lod_bias) {
-            *params = (GLint) obj->LodBias;
+            *params = (GLint) obj->Sampler.LodBias;
          }
          else {
             error = GL_TRUE;
@@ -1401,7 +1422,7 @@ _mesa_GetTexParameterIiv(GLenum target, GLenum pname, GLint *params)
    
    switch (pname) {
    case GL_TEXTURE_BORDER_COLOR:
-      COPY_4V(params, texObj->BorderColor.i);
+      COPY_4V(params, texObj->Sampler.BorderColor.i);
       break;
    default:
       _mesa_GetTexParameteriv(target, pname, params);
@@ -1421,7 +1442,7 @@ _mesa_GetTexParameterIuiv(GLenum target, GLenum pname, GLuint *params)
    
    switch (pname) {
    case GL_TEXTURE_BORDER_COLOR:
-      COPY_4V(params, texObj->BorderColor.i);
+      COPY_4V(params, texObj->Sampler.BorderColor.i);
       break;
    default:
       {
index 8cec24c3e247ccae5a9ad7d6068ba791cdc55fca..a7641a5f9a49b69f66e0af5953cfdf093c6cab26 100644 (file)
@@ -1,6 +1,7 @@
 
 #include "context.h"
 #include "colormac.h"
+#include "fbobject.h"
 #include "macros.h"
 #include "texfetch.h"
 #include "teximage.h"
@@ -525,7 +526,7 @@ wrap_texture(struct gl_context *ctx, struct gl_renderbuffer_attachment *att)
  * update the internal format info, etc.
  */
 static void
-update_wrapper(struct gl_context *ctx, const struct gl_renderbuffer_attachment *att)
+update_wrapper(struct gl_context *ctx, struct gl_renderbuffer_attachment *att)
 {
    struct texture_renderbuffer *trb
       = (struct texture_renderbuffer *) att->Renderbuffer;
@@ -533,7 +534,7 @@ update_wrapper(struct gl_context *ctx, const struct gl_renderbuffer_attachment *
    (void) ctx;
    ASSERT(trb);
 
-   trb->TexImage = att->Texture->Image[att->CubeMapFace][att->TextureLevel];
+   trb->TexImage = _mesa_get_attachment_teximage(att);
    ASSERT(trb->TexImage);
 
    trb->Store = _mesa_get_texel_store_func(trb->TexImage->TexFormat);
index 41d531f5976245f476723cf55f2f90352ec16747..1810b88b2bf0161516dd965c021f18b8464ac575 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "glheader.h"
 #include "mfeatures.h"
+#include "bufferobj.h"
 #include "colormac.h"
 #include "colortab.h"
 #include "context.h"
@@ -406,7 +407,7 @@ update_tex_combine(struct gl_context *ctx, struct gl_texture_unit *texUnit)
       }
       else if (format == GL_DEPTH_COMPONENT ||
                format == GL_DEPTH_STENCIL_EXT) {
-         format = texObj->DepthMode;
+         format = texObj->Sampler.DepthMode;
       }
       calculate_derived_texenv(&texUnit->_EnvMode, texUnit->EnvMode, format);
       texUnit->_CurrentCombine = & texUnit->_EnvMode;
@@ -692,7 +693,8 @@ alloc_proxy_textures( struct gl_context *ctx )
       GL_TEXTURE_CUBE_MAP_ARB,
       GL_TEXTURE_RECTANGLE_NV,
       GL_TEXTURE_1D_ARRAY_EXT,
-      GL_TEXTURE_2D_ARRAY_EXT
+      GL_TEXTURE_2D_ARRAY_EXT,
+      GL_TEXTURE_BUFFER
    };
    GLint tgt;
 
@@ -793,6 +795,10 @@ _mesa_init_texture(struct gl_context *ctx)
    if (!alloc_proxy_textures( ctx ))
       return GL_FALSE;
 
+   /* GL_ARB_texture_buffer_object */
+   _mesa_reference_buffer_object(ctx, &ctx->Texture.BufferObject,
+                                 ctx->Shared->NullBufferObj);
+
    return GL_TRUE;
 }
 
@@ -818,6 +824,15 @@ _mesa_free_texture_data(struct gl_context *ctx)
    /* Free proxy texture objects */
    for (tgt = 0; tgt < NUM_TEXTURE_TARGETS; tgt++)
       ctx->Driver.DeleteTexture(ctx, ctx->Texture.ProxyTex[tgt]);
+
+   /* GL_ARB_texture_buffer_object */
+   _mesa_reference_buffer_object(ctx, &ctx->Texture.BufferObject, NULL);
+
+#if FEATURE_sampler_objects
+   for (u = 0; u < Elements(ctx->Texture.Unit); u++) {
+      _mesa_reference_sampler_object(ctx, &ctx->Texture.Unit[u].Sampler, NULL);
+   }
+#endif
 }
 
 
index 591759149ad86de92c25e7f3a6859fca27a5a4d6..9a690529a83407103812356a42041beadddc1c4d 100644 (file)
@@ -2186,8 +2186,11 @@ _mesa_texstore_unorm88(TEXSTORE_PARAMS)
 
    if (!ctx->_ImageTransferState &&
        !srcPacking->SwapBytes &&
-       (dstFormat == MESA_FORMAT_AL88 || dstFormat == MESA_FORMAT_RG88) &&
-       baseInternalFormat == srcFormat &&
+       ((dstFormat == MESA_FORMAT_AL88 &&
+         baseInternalFormat == GL_LUMINANCE_ALPHA &&
+         srcFormat == GL_LUMINANCE_ALPHA) ||
+        (dstFormat == MESA_FORMAT_RG88 &&
+         baseInternalFormat == srcFormat)) &&
        srcType == GL_UNSIGNED_BYTE &&
        littleEndian) {
       /* simple memcpy path */
@@ -2305,8 +2308,11 @@ _mesa_texstore_unorm1616(TEXSTORE_PARAMS)
 
    if (!ctx->_ImageTransferState &&
        !srcPacking->SwapBytes &&
-       (dstFormat == MESA_FORMAT_AL1616 || dstFormat == MESA_FORMAT_RG1616) &&
-       baseInternalFormat == srcFormat &&
+       ((dstFormat == MESA_FORMAT_AL1616 &&
+         baseInternalFormat == GL_LUMINANCE_ALPHA &&
+         srcFormat == GL_LUMINANCE_ALPHA) ||
+        (dstFormat == MESA_FORMAT_RG1616 &&
+         baseInternalFormat == srcFormat)) &&
        srcType == GL_UNSIGNED_SHORT &&
        littleEndian) {
       /* simple memcpy path */
@@ -2500,9 +2506,7 @@ _mesa_texstore_signed_rgba_16(TEXSTORE_PARAMS)
    const GLuint texelBytes = _mesa_get_format_bytes(dstFormat);
    const GLenum baseFormat = _mesa_get_format_base_format(dstFormat);
 
-   ASSERT(dstFormat == MESA_FORMAT_SIGNED_R_16 ||
-          dstFormat == MESA_FORMAT_SIGNED_RG_16 ||
-          dstFormat == MESA_FORMAT_SIGNED_RGB_16 ||
+   ASSERT(dstFormat == MESA_FORMAT_SIGNED_RGB_16 ||
           dstFormat == MESA_FORMAT_SIGNED_RGBA_16);
 
    if (!ctx->_ImageTransferState &&
@@ -2545,16 +2549,29 @@ _mesa_texstore_signed_rgba_16(TEXSTORE_PARAMS)
             + dstXoffset * texelBytes;
          for (row = 0; row < srcHeight; row++) {
             GLshort *dstRowS = (GLshort *) dstRow;
-            for (col = 0; col < srcWidth; col++) {
-               GLuint c;
-               for (c = 0; c < comps; c++) {
-                  GLshort p;
-                  UNCLAMPED_FLOAT_TO_SHORT(p, src[col * 4 + c]);
-                  dstRowS[col * comps + c] = p;
+            if (dstFormat == MESA_FORMAT_SIGNED_RGBA_16) {
+               for (col = 0; col < srcWidth; col++) {
+                  GLuint c;
+                  for (c = 0; c < comps; c++) {
+                     GLshort p;
+                     UNCLAMPED_FLOAT_TO_SHORT(p, src[col * 4 + c]);
+                     dstRowS[col * comps + c] = p;
+                  }
+               }
+               dstRow += dstRowStride;
+               src += 4 * srcWidth;
+            } else {
+               for (col = 0; col < srcWidth; col++) {
+                  GLuint c;
+                  for (c = 0; c < comps; c++) {
+                     GLshort p;
+                     UNCLAMPED_FLOAT_TO_SHORT(p, src[col * 3 + c]);
+                     dstRowS[col * comps + c] = p;
+                  }
                }
+               dstRow += dstRowStride;
+               src += 3 * srcWidth;
             }
-            dstRow += dstRowStride;
-            src += 4 * srcWidth;
          }
       }
       free((void *) tempImage);
@@ -2889,19 +2906,33 @@ _mesa_texstore_dudv8(TEXSTORE_PARAMS)
 
 
 /**
- * Store a texture in MESA_FORMAT_SIGNED_R8 format.
+ * Store a texture in a signed normalized 8-bit format.
  */
 static GLboolean
-_mesa_texstore_signed_r8(TEXSTORE_PARAMS)
+_mesa_texstore_snorm8(TEXSTORE_PARAMS)
 {
    const GLuint texelBytes = _mesa_get_format_bytes(dstFormat);
    const GLenum baseFormat = _mesa_get_format_base_format(dstFormat);
 
-   ASSERT(dstFormat == MESA_FORMAT_SIGNED_R8);
+   ASSERT(dstFormat == MESA_FORMAT_SIGNED_A8 ||
+          dstFormat == MESA_FORMAT_SIGNED_L8 ||
+          dstFormat == MESA_FORMAT_SIGNED_I8 ||
+          dstFormat == MESA_FORMAT_SIGNED_R8);
    ASSERT(texelBytes == 1);
 
-   /* XXX look at adding optimized paths */
-   {
+   if (!ctx->_ImageTransferState &&
+       !srcPacking->SwapBytes &&
+       baseInternalFormat == srcFormat &&
+       srcType == GL_BYTE) {
+      /* simple memcpy path */
+      memcpy_texture(ctx, dims,
+                     dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset,
+                     dstRowStride,
+                     dstImageOffsets,
+                     srcWidth, srcHeight, srcDepth, srcFormat, srcType,
+                     srcAddr, srcPacking);
+   }
+   else {
       /* general path */
       const GLfloat *tempImage = _mesa_make_temp_float_image(ctx, dims,
                                                  baseInternalFormat,
@@ -2910,21 +2941,21 @@ _mesa_texstore_signed_r8(TEXSTORE_PARAMS)
                                                  srcFormat, srcType, srcAddr,
                                                  srcPacking,
                                                  ctx->_ImageTransferState);
-      const GLfloat *srcRow = tempImage;
+      const GLfloat *src = tempImage;
       GLint img, row, col;
       if (!tempImage)
          return GL_FALSE;
       for (img = 0; img < srcDepth; img++) {
-         GLubyte *dstRow = (GLubyte *) dstAddr
+         GLbyte *dstRow = (GLbyte *) dstAddr
             + dstImageOffsets[dstZoffset + img] * texelBytes
             + dstYoffset * dstRowStride
             + dstXoffset * texelBytes;
          for (row = 0; row < srcHeight; row++) {
-            GLubyte *dstB = (GLubyte *) dstRow;
             for (col = 0; col < srcWidth; col++) {
-               dstB[col] = FLOAT_TO_BYTE_TEX(srcRow[RCOMP]);
+               dstRow[col] = FLOAT_TO_BYTE_TEX(src[col]);
             }
             dstRow += dstRowStride;
+            src += srcWidth;
          }
       }
       free((void *) tempImage);
@@ -2934,19 +2965,33 @@ _mesa_texstore_signed_r8(TEXSTORE_PARAMS)
 
 
 /**
- * Store a texture in MESA_FORMAT_SIGNED_RG88 format.
+ * Store a texture in a signed normalized two-channel 16-bit format.
  */
 static GLboolean
-_mesa_texstore_signed_rg88(TEXSTORE_PARAMS)
+_mesa_texstore_snorm88(TEXSTORE_PARAMS)
 {
+   const GLboolean littleEndian = _mesa_little_endian();
    const GLuint texelBytes = _mesa_get_format_bytes(dstFormat);
    const GLenum baseFormat = _mesa_get_format_base_format(dstFormat);
 
-   ASSERT(dstFormat == MESA_FORMAT_SIGNED_RG88);
-   ASSERT(texelBytes == 1);
+   ASSERT(dstFormat == MESA_FORMAT_SIGNED_AL88 ||
+          dstFormat == MESA_FORMAT_SIGNED_RG88_REV);
+   ASSERT(texelBytes == 2);
 
-   /* XXX look at adding optimized paths */
-   {
+   if (!ctx->_ImageTransferState &&
+       !srcPacking->SwapBytes &&
+       baseInternalFormat == srcFormat &&
+       srcType == GL_BYTE &&
+       littleEndian) {
+      /* simple memcpy path */
+      memcpy_texture(ctx, dims,
+                     dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset,
+                     dstRowStride,
+                     dstImageOffsets,
+                     srcWidth, srcHeight, srcDepth, srcFormat, srcType,
+                     srcAddr, srcPacking);
+   }
+   else {
       /* general path */
       const GLfloat *tempImage = _mesa_make_temp_float_image(ctx, dims,
                                                  baseInternalFormat,
@@ -2955,20 +3000,22 @@ _mesa_texstore_signed_rg88(TEXSTORE_PARAMS)
                                                  srcFormat, srcType, srcAddr,
                                                  srcPacking,
                                                  ctx->_ImageTransferState);
-      const GLfloat *srcRow = tempImage;
+      const GLfloat *src = tempImage;
       GLint img, row, col;
       if (!tempImage)
          return GL_FALSE;
       for (img = 0; img < srcDepth; img++) {
-         GLubyte *dstRow = (GLubyte *) dstAddr
+         GLbyte *dstRow = (GLbyte *) dstAddr
             + dstImageOffsets[dstZoffset + img] * texelBytes
             + dstYoffset * dstRowStride
             + dstXoffset * texelBytes;
          for (row = 0; row < srcHeight; row++) {
-            GLushort *dstUS = (GLushort *) dstRow;
+            GLbyte *dst = dstRow;
             for (col = 0; col < srcWidth; col++) {
-               dstUS[col] = PACK_COLOR_88(FLOAT_TO_BYTE_TEX(srcRow[RCOMP]),
-                                          FLOAT_TO_BYTE_TEX(srcRow[GCOMP]));
+               dst[0] = FLOAT_TO_BYTE_TEX(src[0]);
+               dst[1] = FLOAT_TO_BYTE_TEX(src[1]);
+               src += 2;
+               dst += 2;
             }
             dstRow += dstRowStride;
          }
@@ -2978,6 +3025,132 @@ _mesa_texstore_signed_rg88(TEXSTORE_PARAMS)
    return GL_TRUE;
 }
 
+/* Texstore for signed R16, A16, L16, I16. */
+static GLboolean
+_mesa_texstore_snorm16(TEXSTORE_PARAMS)
+{
+   const GLboolean littleEndian = _mesa_little_endian();
+   const GLuint texelBytes = _mesa_get_format_bytes(dstFormat);
+   const GLenum baseFormat = _mesa_get_format_base_format(dstFormat);
+
+   ASSERT(dstFormat == MESA_FORMAT_SIGNED_R16 ||
+          dstFormat == MESA_FORMAT_SIGNED_A16 ||
+          dstFormat == MESA_FORMAT_SIGNED_L16 ||
+          dstFormat == MESA_FORMAT_SIGNED_I16);
+   ASSERT(texelBytes == 2);
+
+   if (!ctx->_ImageTransferState &&
+       !srcPacking->SwapBytes &&
+       baseInternalFormat == srcFormat &&
+       srcType == GL_SHORT &&
+       littleEndian) {
+      /* simple memcpy path */
+      memcpy_texture(ctx, dims,
+                     dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset,
+                     dstRowStride,
+                     dstImageOffsets,
+                     srcWidth, srcHeight, srcDepth, srcFormat, srcType,
+                     srcAddr, srcPacking);
+   }
+   else {
+      /* general path */
+      const GLfloat *tempImage = _mesa_make_temp_float_image(ctx, dims,
+                                                 baseInternalFormat,
+                                                 baseFormat,
+                                                 srcWidth, srcHeight, srcDepth,
+                                                 srcFormat, srcType, srcAddr,
+                                                 srcPacking,
+                                                 ctx->_ImageTransferState);
+      const GLfloat *src = tempImage;
+      GLint img, row, col;
+      if (!tempImage)
+         return GL_FALSE;
+      for (img = 0; img < srcDepth; img++) {
+         GLubyte *dstRow = (GLubyte *) dstAddr
+            + dstImageOffsets[dstZoffset + img] * texelBytes
+            + dstYoffset * dstRowStride
+            + dstXoffset * texelBytes;
+         for (row = 0; row < srcHeight; row++) {
+            GLshort *dstUS = (GLshort *) dstRow;
+           for (col = 0; col < srcWidth; col++) {
+              GLushort r;
+
+              UNCLAMPED_FLOAT_TO_SHORT(r, src[0]);
+              dstUS[col] = r;
+              src += 1;
+           }
+            dstRow += dstRowStride;
+         }
+      }
+      free((void *) tempImage);
+   }
+   return GL_TRUE;
+}
+
+/**
+ * Do texstore for 2-channel, 16-bit/channel, signed normalized formats.
+ */
+static GLboolean
+_mesa_texstore_snorm1616(TEXSTORE_PARAMS)
+{
+   const GLboolean littleEndian = _mesa_little_endian();
+   const GLuint texelBytes = _mesa_get_format_bytes(dstFormat);
+   const GLenum baseFormat = _mesa_get_format_base_format(dstFormat);
+
+   ASSERT(dstFormat == MESA_FORMAT_SIGNED_AL1616 ||
+          dstFormat == MESA_FORMAT_SIGNED_GR1616);
+   ASSERT(texelBytes == 4);
+
+   if (!ctx->_ImageTransferState &&
+       !srcPacking->SwapBytes &&
+       baseInternalFormat == srcFormat &&
+       srcType == GL_SHORT &&
+       littleEndian) {
+      /* simple memcpy path */
+      memcpy_texture(ctx, dims,
+                     dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset,
+                     dstRowStride,
+                     dstImageOffsets,
+                     srcWidth, srcHeight, srcDepth, srcFormat, srcType,
+                     srcAddr, srcPacking);
+   }
+   else {
+      /* general path */
+      const GLfloat *tempImage = _mesa_make_temp_float_image(ctx, dims,
+                                                 baseInternalFormat,
+                                                 baseFormat,
+                                                 srcWidth, srcHeight, srcDepth,
+                                                 srcFormat, srcType, srcAddr,
+                                                 srcPacking,
+                                                 ctx->_ImageTransferState);
+      const GLfloat *src = tempImage;
+      GLint img, row, col;
+      if (!tempImage)
+         return GL_FALSE;
+      for (img = 0; img < srcDepth; img++) {
+         GLubyte *dstRow = (GLubyte *) dstAddr
+            + dstImageOffsets[dstZoffset + img] * texelBytes
+            + dstYoffset * dstRowStride
+            + dstXoffset * texelBytes;
+         for (row = 0; row < srcHeight; row++) {
+            GLshort *dst = (GLshort *) dstRow;
+            for (col = 0; col < srcWidth; col++) {
+               GLushort l, a;
+
+               UNCLAMPED_FLOAT_TO_SHORT(l, src[0]);
+               UNCLAMPED_FLOAT_TO_SHORT(a, src[1]);
+               dst[0] = l;
+               dst[1] = a;
+               src += 2;
+               dst += 2;
+            }
+            dstRow += dstRowStride;
+         }
+      }
+      free((void *) tempImage);
+   }
+   return GL_TRUE;
+}
 
 /**
  * Store a texture in MESA_FORMAT_SIGNED_RGBX8888.
@@ -3005,18 +3178,19 @@ _mesa_texstore_signed_rgbx8888(TEXSTORE_PARAMS)
       if (!tempImage)
          return GL_FALSE;
       for (img = 0; img < srcDepth; img++) {
-         GLubyte *dstRow = (GLubyte *) dstAddr
+         GLbyte *dstRow = (GLbyte *) dstAddr
             + dstImageOffsets[dstZoffset + img] * texelBytes
             + dstYoffset * dstRowStride
             + dstXoffset * texelBytes;
          for (row = 0; row < srcHeight; row++) {
-            GLuint *dstUI = (GLuint *) dstRow;
+            GLbyte *dst = dstRow;
             for (col = 0; col < srcWidth; col++) {
-               dstUI[col] = PACK_COLOR_8888( FLOAT_TO_BYTE_TEX(srcRow[RCOMP]),
-                                             FLOAT_TO_BYTE_TEX(srcRow[GCOMP]),
-                                             FLOAT_TO_BYTE_TEX(srcRow[BCOMP]),
-                                             0xff );
-               srcRow += 4;
+               dst[3] = FLOAT_TO_BYTE_TEX(srcRow[RCOMP]);
+               dst[2] = FLOAT_TO_BYTE_TEX(srcRow[GCOMP]);
+               dst[1] = FLOAT_TO_BYTE_TEX(srcRow[BCOMP]);
+               dst[0] = 127;
+               srcRow += 3;
+               dst += 4;
             }
             dstRow += dstRowStride;
          }
@@ -3071,39 +3245,6 @@ _mesa_texstore_signed_rgba8888(TEXSTORE_PARAMS)
                      srcWidth, srcHeight, srcDepth, srcFormat, srcType,
                      srcAddr, srcPacking);
    }
-   else if (!ctx->_ImageTransferState &&
-           (srcType == GL_BYTE) &&
-           can_swizzle(baseInternalFormat) &&
-           can_swizzle(srcFormat)) {
-
-      GLubyte dstmap[4];
-
-      /* dstmap - how to swizzle from RGBA to dst format:
-       */
-      if ((littleEndian && dstFormat == MESA_FORMAT_SIGNED_RGBA8888) ||
-         (!littleEndian && dstFormat == MESA_FORMAT_SIGNED_RGBA8888_REV)) {
-        dstmap[3] = 0;
-        dstmap[2] = 1;
-        dstmap[1] = 2;
-        dstmap[0] = 3;
-      }
-      else {
-        dstmap[3] = 3;
-        dstmap[2] = 2;
-        dstmap[1] = 1;
-        dstmap[0] = 0;
-      }
-      
-      _mesa_swizzle_ubyte_image(ctx, dims,
-                               srcFormat,
-                               srcType,
-                               baseInternalFormat,
-                               dstmap, 4,
-                               dstAddr, dstXoffset, dstYoffset, dstZoffset,
-                               dstRowStride, dstImageOffsets,
-                               srcWidth, srcHeight, srcDepth, srcAddr,
-                               srcPacking);      
-   }
    else {
       /* general path */
       const GLfloat *tempImage = _mesa_make_temp_float_image(ctx, dims,
@@ -3118,28 +3259,30 @@ _mesa_texstore_signed_rgba8888(TEXSTORE_PARAMS)
       if (!tempImage)
          return GL_FALSE;
       for (img = 0; img < srcDepth; img++) {
-         GLubyte *dstRow = (GLubyte *) dstAddr
+         GLbyte *dstRow = (GLbyte *) dstAddr
             + dstImageOffsets[dstZoffset + img] * texelBytes
             + dstYoffset * dstRowStride
             + dstXoffset * texelBytes;
          for (row = 0; row < srcHeight; row++) {
-            GLuint *dstUI = (GLuint *) dstRow;
+            GLbyte *dst = dstRow;
             if (dstFormat == MESA_FORMAT_SIGNED_RGBA8888) {
                for (col = 0; col < srcWidth; col++) {
-                  dstUI[col] = PACK_COLOR_8888( FLOAT_TO_BYTE_TEX(srcRow[RCOMP]),
-                                                FLOAT_TO_BYTE_TEX(srcRow[GCOMP]),
-                                                FLOAT_TO_BYTE_TEX(srcRow[BCOMP]),
-                                                FLOAT_TO_BYTE_TEX(srcRow[ACOMP]) );
+                  dst[3] = FLOAT_TO_BYTE_TEX(srcRow[RCOMP]);
+                  dst[2] = FLOAT_TO_BYTE_TEX(srcRow[GCOMP]);
+                  dst[1] = FLOAT_TO_BYTE_TEX(srcRow[BCOMP]);
+                  dst[0] = FLOAT_TO_BYTE_TEX(srcRow[ACOMP]);
                   srcRow += 4;
+                  dst += 4;
                }
             }
             else {
                for (col = 0; col < srcWidth; col++) {
-                  dstUI[col] = PACK_COLOR_8888_REV( FLOAT_TO_BYTE_TEX(srcRow[RCOMP]),
-                                                    FLOAT_TO_BYTE_TEX(srcRow[GCOMP]),
-                                                    FLOAT_TO_BYTE_TEX(srcRow[BCOMP]),
-                                                    FLOAT_TO_BYTE_TEX(srcRow[ACOMP]) );
+                  dst[0] = FLOAT_TO_BYTE_TEX(srcRow[RCOMP]);
+                  dst[1] = FLOAT_TO_BYTE_TEX(srcRow[GCOMP]);
+                  dst[2] = FLOAT_TO_BYTE_TEX(srcRow[BCOMP]);
+                  dst[3] = FLOAT_TO_BYTE_TEX(srcRow[ACOMP]);
                   srcRow += 4;
+                  dst += 4;
                }
             }
             dstRow += dstRowStride;
@@ -3392,13 +3535,17 @@ _mesa_texstore_rgba_float32(TEXSTORE_PARAMS)
           dstFormat == MESA_FORMAT_ALPHA_FLOAT32 ||
           dstFormat == MESA_FORMAT_LUMINANCE_FLOAT32 ||
           dstFormat == MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32 ||
-          dstFormat == MESA_FORMAT_INTENSITY_FLOAT32);
+          dstFormat == MESA_FORMAT_INTENSITY_FLOAT32 ||
+          dstFormat == MESA_FORMAT_R_FLOAT32 ||
+          dstFormat == MESA_FORMAT_RG_FLOAT32);
    ASSERT(baseInternalFormat == GL_RGBA ||
           baseInternalFormat == GL_RGB ||
           baseInternalFormat == GL_ALPHA ||
           baseInternalFormat == GL_LUMINANCE ||
           baseInternalFormat == GL_LUMINANCE_ALPHA ||
-          baseInternalFormat == GL_INTENSITY);
+          baseInternalFormat == GL_INTENSITY ||
+          baseInternalFormat == GL_RED ||
+          baseInternalFormat == GL_RG);
    ASSERT(texelBytes == components * sizeof(GLfloat));
 
    if (!ctx->_ImageTransferState &&
@@ -3462,13 +3609,17 @@ _mesa_texstore_rgba_float16(TEXSTORE_PARAMS)
           dstFormat == MESA_FORMAT_ALPHA_FLOAT16 ||
           dstFormat == MESA_FORMAT_LUMINANCE_FLOAT16 ||
           dstFormat == MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16 ||
-          dstFormat == MESA_FORMAT_INTENSITY_FLOAT16);
+          dstFormat == MESA_FORMAT_INTENSITY_FLOAT16 ||
+          dstFormat == MESA_FORMAT_R_FLOAT16 ||
+          dstFormat == MESA_FORMAT_RG_FLOAT16);
    ASSERT(baseInternalFormat == GL_RGBA ||
           baseInternalFormat == GL_RGB ||
           baseInternalFormat == GL_ALPHA ||
           baseInternalFormat == GL_LUMINANCE ||
           baseInternalFormat == GL_LUMINANCE_ALPHA ||
-          baseInternalFormat == GL_INTENSITY);
+          baseInternalFormat == GL_INTENSITY ||
+          baseInternalFormat == GL_RED ||
+          baseInternalFormat == GL_RG);
    ASSERT(texelBytes == components * sizeof(GLhalfARB));
 
    if (!ctx->_ImageTransferState &&
@@ -4109,6 +4260,10 @@ texstore_funcs[MESA_FORMAT_COUNT] =
    { MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16, _mesa_texstore_rgba_float16 },
    { MESA_FORMAT_INTENSITY_FLOAT32, _mesa_texstore_rgba_float32 },
    { MESA_FORMAT_INTENSITY_FLOAT16, _mesa_texstore_rgba_float16 },
+   { MESA_FORMAT_R_FLOAT32, _mesa_texstore_rgba_float32 },
+   { MESA_FORMAT_R_FLOAT16, _mesa_texstore_rgba_float16 },
+   { MESA_FORMAT_RG_FLOAT32, _mesa_texstore_rgba_float32 },
+   { MESA_FORMAT_RG_FLOAT16, _mesa_texstore_rgba_float16 },
 
    { MESA_FORMAT_RGBA_INT8, _mesa_texstore_rgba_int8 },
    { MESA_FORMAT_RGBA_INT16, _mesa_texstore_rgba_int16 },
@@ -4119,15 +4274,15 @@ texstore_funcs[MESA_FORMAT_COUNT] =
 
    { MESA_FORMAT_DUDV8, _mesa_texstore_dudv8 },
 
-   { MESA_FORMAT_SIGNED_R8, _mesa_texstore_signed_r8 },
-   { MESA_FORMAT_SIGNED_RG88, _mesa_texstore_signed_rg88 },
+   { MESA_FORMAT_SIGNED_R8, _mesa_texstore_snorm8 },
+   { MESA_FORMAT_SIGNED_RG88_REV, _mesa_texstore_snorm88 },
    { MESA_FORMAT_SIGNED_RGBX8888, _mesa_texstore_signed_rgbx8888 },
 
    { MESA_FORMAT_SIGNED_RGBA8888, _mesa_texstore_signed_rgba8888 },
    { MESA_FORMAT_SIGNED_RGBA8888_REV, _mesa_texstore_signed_rgba8888 },
 
-   { MESA_FORMAT_SIGNED_R_16, _mesa_texstore_signed_rgba_16 },
-   { MESA_FORMAT_SIGNED_RG_16, _mesa_texstore_signed_rgba_16 },
+   { MESA_FORMAT_SIGNED_R16, _mesa_texstore_snorm16 },
+   { MESA_FORMAT_SIGNED_GR1616, _mesa_texstore_snorm1616 },
    { MESA_FORMAT_SIGNED_RGB_16, _mesa_texstore_signed_rgba_16 },
    { MESA_FORMAT_SIGNED_RGBA_16, _mesa_texstore_signed_rgba_16 },
    { MESA_FORMAT_RGBA_16, _mesa_texstore_rgba_16 },
@@ -4142,7 +4297,17 @@ texstore_funcs[MESA_FORMAT_COUNT] =
    { MESA_FORMAT_L_LATC1, _mesa_texstore_red_rgtc1 },
    { MESA_FORMAT_SIGNED_L_LATC1, _mesa_texstore_signed_red_rgtc1 },
    { MESA_FORMAT_LA_LATC2, _mesa_texstore_rg_rgtc2 },
-   { MESA_FORMAT_SIGNED_LA_LATC2, _mesa_texstore_signed_rg_rgtc2 }
+   { MESA_FORMAT_SIGNED_LA_LATC2, _mesa_texstore_signed_rg_rgtc2 },
+
+   { MESA_FORMAT_SIGNED_A8, _mesa_texstore_snorm8 },
+   { MESA_FORMAT_SIGNED_L8, _mesa_texstore_snorm8 },
+   { MESA_FORMAT_SIGNED_AL88, _mesa_texstore_snorm88 },
+   { MESA_FORMAT_SIGNED_I8, _mesa_texstore_snorm8 },
+
+   { MESA_FORMAT_SIGNED_A16, _mesa_texstore_snorm16 },
+   { MESA_FORMAT_SIGNED_L16, _mesa_texstore_snorm16 },
+   { MESA_FORMAT_SIGNED_AL1616, _mesa_texstore_snorm1616 },
+   { MESA_FORMAT_SIGNED_I16, _mesa_texstore_snorm16 },
 };
 
 
index 1d74efafdf7d9183b15d8f210c7a94f144662a6f..f984ce3bc565c28835049ee3469544190b3bdfef 100644 (file)
@@ -82,254 +82,6 @@ base_uniform_type(GLenum type)
    }
 }
 
-static struct gl_builtin_uniform_element gl_DepthRange_elements[] = {
-   {"near", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_XXXX},
-   {"far", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_YYYY},
-   {"diff", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_ZZZZ},
-};
-
-static struct gl_builtin_uniform_element gl_ClipPlane_elements[] = {
-   {NULL, {STATE_CLIPPLANE, 0, 0}, SWIZZLE_XYZW}
-};
-
-static struct gl_builtin_uniform_element gl_Point_elements[] = {
-   {"size", {STATE_POINT_SIZE}, SWIZZLE_XXXX},
-   {"sizeMin", {STATE_POINT_SIZE}, SWIZZLE_YYYY},
-   {"sizeMax", {STATE_POINT_SIZE}, SWIZZLE_ZZZZ},
-   {"fadeThresholdSize", {STATE_POINT_SIZE}, SWIZZLE_WWWW},
-   {"distanceConstantAttenuation", {STATE_POINT_ATTENUATION}, SWIZZLE_XXXX},
-   {"distanceLinearAttenuation", {STATE_POINT_ATTENUATION}, SWIZZLE_YYYY},
-   {"distanceQuadraticAttenuation", {STATE_POINT_ATTENUATION}, SWIZZLE_ZZZZ},
-};
-
-static struct gl_builtin_uniform_element gl_FrontMaterial_elements[] = {
-   {"emission", {STATE_MATERIAL, 0, STATE_EMISSION}, SWIZZLE_XYZW},
-   {"ambient", {STATE_MATERIAL, 0, STATE_AMBIENT}, SWIZZLE_XYZW},
-   {"diffuse", {STATE_MATERIAL, 0, STATE_DIFFUSE}, SWIZZLE_XYZW},
-   {"specular", {STATE_MATERIAL, 0, STATE_SPECULAR}, SWIZZLE_XYZW},
-   {"shininess", {STATE_MATERIAL, 0, STATE_SHININESS}, SWIZZLE_XXXX},
-};
-
-static struct gl_builtin_uniform_element gl_BackMaterial_elements[] = {
-   {"emission", {STATE_MATERIAL, 1, STATE_EMISSION}, SWIZZLE_XYZW},
-   {"ambient", {STATE_MATERIAL, 1, STATE_AMBIENT}, SWIZZLE_XYZW},
-   {"diffuse", {STATE_MATERIAL, 1, STATE_DIFFUSE}, SWIZZLE_XYZW},
-   {"specular", {STATE_MATERIAL, 1, STATE_SPECULAR}, SWIZZLE_XYZW},
-   {"shininess", {STATE_MATERIAL, 1, STATE_SHININESS}, SWIZZLE_XXXX},
-};
-
-static struct gl_builtin_uniform_element gl_LightSource_elements[] = {
-   {"ambient", {STATE_LIGHT, 0, STATE_AMBIENT}, SWIZZLE_XYZW},
-   {"diffuse", {STATE_LIGHT, 0, STATE_DIFFUSE}, SWIZZLE_XYZW},
-   {"specular", {STATE_LIGHT, 0, STATE_SPECULAR}, SWIZZLE_XYZW},
-   {"position", {STATE_LIGHT, 0, STATE_POSITION}, SWIZZLE_XYZW},
-   {"halfVector", {STATE_LIGHT, 0, STATE_HALF_VECTOR}, SWIZZLE_XYZW},
-   {"spotDirection", {STATE_LIGHT, 0, STATE_SPOT_DIRECTION},
-    MAKE_SWIZZLE4(SWIZZLE_X,
-                 SWIZZLE_Y,
-                 SWIZZLE_Z,
-                 SWIZZLE_Z)},
-   {"spotCosCutoff", {STATE_LIGHT, 0, STATE_SPOT_DIRECTION}, SWIZZLE_WWWW},
-   {"spotCutoff", {STATE_LIGHT, 0, STATE_SPOT_CUTOFF}, SWIZZLE_XXXX},
-   {"spotExponent", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_WWWW},
-   {"constantAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_XXXX},
-   {"linearAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_YYYY},
-   {"quadraticAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_ZZZZ},
-};
-
-static struct gl_builtin_uniform_element gl_LightModel_elements[] = {
-   {"ambient", {STATE_LIGHTMODEL_AMBIENT, 0}, SWIZZLE_XYZW},
-};
-
-static struct gl_builtin_uniform_element gl_FrontLightModelProduct_elements[] = {
-   {"sceneColor", {STATE_LIGHTMODEL_SCENECOLOR, 0}, SWIZZLE_XYZW},
-};
-
-static struct gl_builtin_uniform_element gl_BackLightModelProduct_elements[] = {
-   {"sceneColor", {STATE_LIGHTMODEL_SCENECOLOR, 1}, SWIZZLE_XYZW},
-};
-
-static struct gl_builtin_uniform_element gl_FrontLightProduct_elements[] = {
-   {"ambient", {STATE_LIGHTPROD, 0, 0, STATE_AMBIENT}, SWIZZLE_XYZW},
-   {"diffuse", {STATE_LIGHTPROD, 0, 0, STATE_DIFFUSE}, SWIZZLE_XYZW},
-   {"specular", {STATE_LIGHTPROD, 0, 0, STATE_SPECULAR}, SWIZZLE_XYZW},
-};
-
-static struct gl_builtin_uniform_element gl_BackLightProduct_elements[] = {
-   {"ambient", {STATE_LIGHTPROD, 0, 1, STATE_AMBIENT}, SWIZZLE_XYZW},
-   {"diffuse", {STATE_LIGHTPROD, 0, 1, STATE_DIFFUSE}, SWIZZLE_XYZW},
-   {"specular", {STATE_LIGHTPROD, 0, 1, STATE_SPECULAR}, SWIZZLE_XYZW},
-};
-
-static struct gl_builtin_uniform_element gl_TextureEnvColor_elements[] = {
-   {NULL, {STATE_TEXENV_COLOR, 0}, SWIZZLE_XYZW},
-};
-
-static struct gl_builtin_uniform_element gl_EyePlaneS_elements[] = {
-   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_S}, SWIZZLE_XYZW},
-};
-
-static struct gl_builtin_uniform_element gl_EyePlaneT_elements[] = {
-   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_T}, SWIZZLE_XYZW},
-};
-
-static struct gl_builtin_uniform_element gl_EyePlaneR_elements[] = {
-   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_R}, SWIZZLE_XYZW},
-};
-
-static struct gl_builtin_uniform_element gl_EyePlaneQ_elements[] = {
-   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_EYE_Q}, SWIZZLE_XYZW},
-};
-
-static struct gl_builtin_uniform_element gl_ObjectPlaneS_elements[] = {
-   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_S}, SWIZZLE_XYZW},
-};
-
-static struct gl_builtin_uniform_element gl_ObjectPlaneT_elements[] = {
-   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_T}, SWIZZLE_XYZW},
-};
-
-static struct gl_builtin_uniform_element gl_ObjectPlaneR_elements[] = {
-   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_R}, SWIZZLE_XYZW},
-};
-
-static struct gl_builtin_uniform_element gl_ObjectPlaneQ_elements[] = {
-   {NULL, {STATE_TEXGEN, 0, STATE_TEXGEN_OBJECT_Q}, SWIZZLE_XYZW},
-};
-
-static struct gl_builtin_uniform_element gl_Fog_elements[] = {
-   {"color", {STATE_FOG_COLOR}, SWIZZLE_XYZW},
-   {"density", {STATE_FOG_PARAMS}, SWIZZLE_XXXX},
-   {"start", {STATE_FOG_PARAMS}, SWIZZLE_YYYY},
-   {"end", {STATE_FOG_PARAMS}, SWIZZLE_ZZZZ},
-   {"scale", {STATE_FOG_PARAMS}, SWIZZLE_WWWW},
-};
-
-static struct gl_builtin_uniform_element gl_NormalScale_elements[] = {
-   {NULL, {STATE_NORMAL_SCALE}, SWIZZLE_XXXX},
-};
-
-static struct gl_builtin_uniform_element gl_MESABumpRotMatrix0_elements[] = {
-   {NULL, {STATE_INTERNAL, STATE_ROT_MATRIX_0}, SWIZZLE_XYZW},
-};
-
-static struct gl_builtin_uniform_element gl_MESABumpRotMatrix1_elements[] = {
-   {NULL, {STATE_INTERNAL, STATE_ROT_MATRIX_1}, SWIZZLE_XYZW},
-};
-
-static struct gl_builtin_uniform_element gl_MESAFogParamsOptimized_elements[] = {
-   {NULL, {STATE_INTERNAL, STATE_FOG_PARAMS_OPTIMIZED}, SWIZZLE_XYZW},
-};
-
-#define MATRIX(name, statevar, modifier)                               \
-   static struct gl_builtin_uniform_element name ## _elements[] = {    \
-      { NULL, { statevar, 0, 0, 0, modifier}, SWIZZLE_XYZW },          \
-      { NULL, { statevar, 0, 1, 1, modifier}, SWIZZLE_XYZW },          \
-      { NULL, { statevar, 0, 2, 2, modifier}, SWIZZLE_XYZW },          \
-      { NULL, { statevar, 0, 3, 3, modifier}, SWIZZLE_XYZW },          \
-   }
-
-MATRIX(gl_ModelViewMatrix,
-       STATE_MODELVIEW_MATRIX, STATE_MATRIX_TRANSPOSE);
-MATRIX(gl_ModelViewMatrixInverse,
-       STATE_MODELVIEW_MATRIX, STATE_MATRIX_INVTRANS);
-MATRIX(gl_ModelViewMatrixTranspose,
-       STATE_MODELVIEW_MATRIX, 0);
-MATRIX(gl_ModelViewMatrixInverseTranspose,
-       STATE_MODELVIEW_MATRIX, STATE_MATRIX_INVERSE);
-
-MATRIX(gl_ProjectionMatrix,
-       STATE_PROJECTION_MATRIX, STATE_MATRIX_TRANSPOSE);
-MATRIX(gl_ProjectionMatrixInverse,
-       STATE_PROJECTION_MATRIX, STATE_MATRIX_INVTRANS);
-MATRIX(gl_ProjectionMatrixTranspose,
-       STATE_PROJECTION_MATRIX, 0);
-MATRIX(gl_ProjectionMatrixInverseTranspose,
-       STATE_PROJECTION_MATRIX, STATE_MATRIX_INVERSE);
-
-MATRIX(gl_ModelViewProjectionMatrix,
-       STATE_MVP_MATRIX, STATE_MATRIX_TRANSPOSE);
-MATRIX(gl_ModelViewProjectionMatrixInverse,
-       STATE_MVP_MATRIX, STATE_MATRIX_INVTRANS);
-MATRIX(gl_ModelViewProjectionMatrixTranspose,
-       STATE_MVP_MATRIX, 0);
-MATRIX(gl_ModelViewProjectionMatrixInverseTranspose,
-       STATE_MVP_MATRIX, STATE_MATRIX_INVERSE);
-
-MATRIX(gl_TextureMatrix,
-       STATE_TEXTURE_MATRIX, STATE_MATRIX_TRANSPOSE);
-MATRIX(gl_TextureMatrixInverse,
-       STATE_TEXTURE_MATRIX, STATE_MATRIX_INVTRANS);
-MATRIX(gl_TextureMatrixTranspose,
-       STATE_TEXTURE_MATRIX, 0);
-MATRIX(gl_TextureMatrixInverseTranspose,
-       STATE_TEXTURE_MATRIX, STATE_MATRIX_INVERSE);
-
-static struct gl_builtin_uniform_element gl_NormalMatrix_elements[] = {
-   { NULL, { STATE_MODELVIEW_MATRIX, 0, 0, 0, STATE_MATRIX_INVERSE},
-     SWIZZLE_XYZW },
-   { NULL, { STATE_MODELVIEW_MATRIX, 0, 1, 1, STATE_MATRIX_INVERSE},
-     SWIZZLE_XYZW },
-   { NULL, { STATE_MODELVIEW_MATRIX, 0, 2, 2, STATE_MATRIX_INVERSE},
-     SWIZZLE_XYZW },
-};
-
-#undef MATRIX
-
-#define STATEVAR(name) {#name, name ## _elements, Elements(name ## _elements)}
-
-const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[] = {
-   STATEVAR(gl_DepthRange),
-   STATEVAR(gl_ClipPlane),
-   STATEVAR(gl_Point),
-   STATEVAR(gl_FrontMaterial),
-   STATEVAR(gl_BackMaterial),
-   STATEVAR(gl_LightSource),
-   STATEVAR(gl_LightModel),
-   STATEVAR(gl_FrontLightModelProduct),
-   STATEVAR(gl_BackLightModelProduct),
-   STATEVAR(gl_FrontLightProduct),
-   STATEVAR(gl_BackLightProduct),
-   STATEVAR(gl_TextureEnvColor),
-   STATEVAR(gl_EyePlaneS),
-   STATEVAR(gl_EyePlaneT),
-   STATEVAR(gl_EyePlaneR),
-   STATEVAR(gl_EyePlaneQ),
-   STATEVAR(gl_ObjectPlaneS),
-   STATEVAR(gl_ObjectPlaneT),
-   STATEVAR(gl_ObjectPlaneR),
-   STATEVAR(gl_ObjectPlaneQ),
-   STATEVAR(gl_Fog),
-
-   STATEVAR(gl_ModelViewMatrix),
-   STATEVAR(gl_ModelViewMatrixInverse),
-   STATEVAR(gl_ModelViewMatrixTranspose),
-   STATEVAR(gl_ModelViewMatrixInverseTranspose),
-
-   STATEVAR(gl_ProjectionMatrix),
-   STATEVAR(gl_ProjectionMatrixInverse),
-   STATEVAR(gl_ProjectionMatrixTranspose),
-   STATEVAR(gl_ProjectionMatrixInverseTranspose),
-
-   STATEVAR(gl_ModelViewProjectionMatrix),
-   STATEVAR(gl_ModelViewProjectionMatrixInverse),
-   STATEVAR(gl_ModelViewProjectionMatrixTranspose),
-   STATEVAR(gl_ModelViewProjectionMatrixInverseTranspose),
-
-   STATEVAR(gl_TextureMatrix),
-   STATEVAR(gl_TextureMatrixInverse),
-   STATEVAR(gl_TextureMatrixTranspose),
-   STATEVAR(gl_TextureMatrixInverseTranspose),
-
-   STATEVAR(gl_NormalMatrix),
-   STATEVAR(gl_NormalScale),
-
-   STATEVAR(gl_MESABumpRotMatrix0),
-   STATEVAR(gl_MESABumpRotMatrix1),
-   STATEVAR(gl_MESAFogParamsOptimized),
-
-   {NULL, NULL, 0}
-};
 
 static GLboolean
 is_boolean_type(GLenum type)
index cfed4b506a5a86478b7f3f44ea6b49ff4b99a4f3..d20e2c7193e708f65001bb51dff492337fd590de 100644 (file)
@@ -484,7 +484,7 @@ _mesa_DisableVertexAttribArrayARB(GLuint index)
 
    if (index >= ctx->Const.VertexProgram.MaxAttribs) {
       _mesa_error(ctx, GL_INVALID_VALUE,
-                  "glEnableVertexAttribArrayARB(index)");
+                  "glDisableVertexAttribArrayARB(index)");
       return;
    }
 
index 53e68c896671ad8f7f4930275fa0cf4f10912ee8..1c423200ffdeeac0436fd00b824c8b30a7c32c38 100644 (file)
 struct gl_client_array;
 struct gl_context;
 
+
+/**
+ * Compute the index of the last array element that can be safely accessed in
+ * a vertex array.  We can really only do this when the array lives in a VBO.
+ * The array->_MaxElement field will be updated.
+ * Later in glDrawArrays/Elements/etc we can do some bounds checking.
+ */
+static INLINE void
+_mesa_update_array_max_element(struct gl_client_array *array)
+{
+   assert(array->Enabled);
+
+   if (array->BufferObj->Name) {
+      GLsizeiptrARB offset = (GLsizeiptrARB) array->Ptr;
+      GLsizeiptrARB bufSize = (GLsizeiptrARB) array->BufferObj->Size;
+
+      if (offset < bufSize) {
+        array->_MaxElement = (bufSize - offset + array->StrideB
+                               - array->_ElementSize) / array->StrideB;
+      }
+      else {
+        array->_MaxElement = 0;
+      }
+   }
+   else {
+      /* user-space array, no idea how big it is */
+      array->_MaxElement = 2 * 1000 * 1000 * 1000; /* just a big number */
+   }
+}
+
+
 #if _HAVE_FULL_GL
 
 extern void GLAPIENTRY
index a10b86e761e29ddf1687ec58a051de9ef29a0f96..80fa0c244eb4a19fd3ac47c4779a3e3b5802a9f4 100644 (file)
@@ -25,6 +25,7 @@
 #include "imports.h"
 #include "mtypes.h"
 #include "version.h"
+#include "git_sha1.h"
 
 
 
@@ -89,6 +90,8 @@ compute_version(struct gl_context *ctx)
                               ctx->Extensions.EXT_pixel_buffer_object &&
                               ctx->Extensions.EXT_texture_sRGB);
    const GLboolean ver_3_0 = (ver_2_1 &&
+                              ctx->Extensions.ARB_color_buffer_float &&
+                              ctx->Extensions.ARB_depth_buffer_float &&
                               ctx->Extensions.ARB_half_float_pixel &&
                               ctx->Extensions.ARB_map_buffer_range &&
                               ctx->Extensions.ARB_texture_float &&
@@ -112,6 +115,7 @@ compute_version(struct gl_context *ctx)
                               ctx->Extensions.ARB_draw_instanced &&
                               ctx->Extensions.ARB_texture_buffer_object &&
                               ctx->Extensions.ARB_uniform_buffer_object &&
+                              ctx->Extensions.EXT_texture_snorm &&
                               ctx->Extensions.NV_primitive_restart &&
                               ctx->Extensions.NV_texture_rectangle &&
                               ctx->Const.MaxVertexTextureImageUnits >= 16);
@@ -182,7 +186,11 @@ compute_version(struct gl_context *ctx)
    ctx->VersionString = (char *) malloc(max);
    if (ctx->VersionString) {
       _mesa_snprintf(ctx->VersionString, max,
-                    "%u.%u Mesa " MESA_VERSION_STRING,
+                    "%u.%u Mesa " MESA_VERSION_STRING
+#ifdef MESA_GIT_SHA1
+                    " (" MESA_GIT_SHA1 ")"
+#endif
+                    ,
                     ctx->VersionMajor, ctx->VersionMinor);
    }
 }
index ca63e72c0851bf599c6f637e8eb7a591495e5f9c..dffc8abf7358254a107c92b1ab9957a965206afd 100644 (file)
@@ -116,20 +116,11 @@ _mesa_parse_arb_fragment_program(struct gl_context* ctx, GLenum target,
          program->Base.SamplersUsed |= (1 << i);
    }
    program->Base.ShadowSamplers = prog.ShadowSamplers;
-   switch (state.option.Fog) {
-   case OPTION_FOG_EXP:    program->FogOption = GL_EXP;    break;
-   case OPTION_FOG_EXP2:   program->FogOption = GL_EXP2;   break;
-   case OPTION_FOG_LINEAR: program->FogOption = GL_LINEAR; break;
-   default:                program->FogOption = GL_NONE;   break;
-   }
    program->OriginUpperLeft = state.option.OriginUpperLeft;
    program->PixelCenterInteger = state.option.PixelCenterInteger;
 
    program->UsesKill            = state.fragment.UsesKill;
 
-   if (program->FogOption)
-      program->Base.InputsRead |= FRAG_BIT_FOGC;
-
    if (program->Base.Instructions)
       free(program->Base.Instructions);
    program->Base.Instructions = prog.Instructions;
@@ -143,9 +134,15 @@ _mesa_parse_arb_fragment_program(struct gl_context* ctx, GLenum target,
     * there's no hardware that wants to do fog in a discrete stage separate
     * from the fragment shader.
     */
-   if (program->FogOption != GL_NONE) {
-      _mesa_append_fog_code(ctx, program);
-      program->FogOption = GL_NONE;
+   if (state.option.Fog != OPTION_NONE) {
+      static const GLenum fog_modes[4] = {
+        GL_NONE, GL_EXP, GL_EXP2, GL_LINEAR
+      };
+
+      /* XXX: we should somehow recompile this to remove clamping if disabled
+       * On the ATI driver, this is unclampled if fragment clamping is disabled
+       */
+      _mesa_append_fog_code(ctx, program, fog_modes[state.option.Fog], GL_TRUE);
    }
 
 #if DEBUG_FP
index 17e0f9953f904b7522c54f0614cd467d35bc8186..3c9b9733832d65dc84120c5aa31ecea0e56b077f 100644 (file)
@@ -56,16 +56,20 @@ extern "C" {
 #include "program/sampler.h"
 }
 
+class src_reg;
+class dst_reg;
+
 static int swizzle_for_size(int size);
 
 /**
  * This struct is a corresponding struct to Mesa prog_src_register, with
  * wider fields.
  */
-typedef struct ir_to_mesa_src_reg {
-   ir_to_mesa_src_reg(int file, int index, const glsl_type *type)
+class src_reg {
+public:
+   src_reg(gl_register_file file, int index, const glsl_type *type)
    {
-      this->file = (gl_register_file) file;
+      this->file = file;
       this->index = index;
       if (type && (type->is_scalar() || type->is_vector() || type->is_matrix()))
         this->swizzle = swizzle_for_size(type->vector_elements);
@@ -75,7 +79,7 @@ typedef struct ir_to_mesa_src_reg {
       this->reladdr = NULL;
    }
 
-   ir_to_mesa_src_reg()
+   src_reg()
    {
       this->file = PROGRAM_UNDEFINED;
       this->index = 0;
@@ -84,24 +88,63 @@ typedef struct ir_to_mesa_src_reg {
       this->reladdr = NULL;
    }
 
+   explicit src_reg(dst_reg reg);
+
    gl_register_file file; /**< PROGRAM_* from Mesa */
    int index; /**< temporary index, VERT_ATTRIB_*, FRAG_ATTRIB_*, etc. */
    GLuint swizzle; /**< SWIZZLE_XYZWONEZERO swizzles from Mesa. */
    int negate; /**< NEGATE_XYZW mask from mesa */
    /** Register index should be offset by the integer in this reg. */
-   ir_to_mesa_src_reg *reladdr;
-} ir_to_mesa_src_reg;
+   src_reg *reladdr;
+};
+
+class dst_reg {
+public:
+   dst_reg(gl_register_file file, int writemask)
+   {
+      this->file = file;
+      this->index = 0;
+      this->writemask = writemask;
+      this->cond_mask = COND_TR;
+      this->reladdr = NULL;
+   }
 
-typedef struct ir_to_mesa_dst_reg {
-   int file; /**< PROGRAM_* from Mesa */
+   dst_reg()
+   {
+      this->file = PROGRAM_UNDEFINED;
+      this->index = 0;
+      this->writemask = 0;
+      this->cond_mask = COND_TR;
+      this->reladdr = NULL;
+   }
+
+   explicit dst_reg(src_reg reg);
+
+   gl_register_file file; /**< PROGRAM_* from Mesa */
    int index; /**< temporary index, VERT_ATTRIB_*, FRAG_ATTRIB_*, etc. */
    int writemask; /**< Bitfield of WRITEMASK_[XYZW] */
    GLuint cond_mask:4;
    /** Register index should be offset by the integer in this reg. */
-   ir_to_mesa_src_reg *reladdr;
-} ir_to_mesa_dst_reg;
+   src_reg *reladdr;
+};
 
-extern ir_to_mesa_src_reg ir_to_mesa_undef;
+src_reg::src_reg(dst_reg reg)
+{
+   this->file = reg.file;
+   this->index = reg.index;
+   this->swizzle = SWIZZLE_XYZW;
+   this->negate = 0;
+   this->reladdr = NULL;
+}
+
+dst_reg::dst_reg(src_reg reg)
+{
+   this->file = reg.file;
+   this->index = reg.index;
+   this->writemask = WRITEMASK_XYZW;
+   this->cond_mask = COND_TR;
+   this->reladdr = reg.reladdr;
+}
 
 class ir_to_mesa_instruction : public exec_node {
 public:
@@ -118,8 +161,8 @@ public:
    }
 
    enum prog_opcode op;
-   ir_to_mesa_dst_reg dst_reg;
-   ir_to_mesa_src_reg src_reg[3];
+   dst_reg dst;
+   src_reg src[3];
    /** Pointer to the ir source this tree came from for debugging */
    ir_instruction *ir;
    GLboolean cond_update;
@@ -174,7 +217,7 @@ public:
    int inst;
 
    /** Storage for the return value. */
-   ir_to_mesa_src_reg return_reg;
+   src_reg return_reg;
 };
 
 class ir_to_mesa_visitor : public ir_visitor {
@@ -195,11 +238,10 @@ public:
 
    function_entry *get_function_signature(ir_function_signature *sig);
 
-   ir_to_mesa_src_reg get_temp(const glsl_type *type);
-   void reladdr_to_temp(ir_instruction *ir,
-                       ir_to_mesa_src_reg *reg, int *num_reladdr);
+   src_reg get_temp(const glsl_type *type);
+   void reladdr_to_temp(ir_instruction *ir, src_reg *reg, int *num_reladdr);
 
-   struct ir_to_mesa_src_reg src_reg_for_float(float val);
+   src_reg src_reg_for_float(float val);
 
    /**
     * \name Visit methods
@@ -228,7 +270,7 @@ public:
    virtual void visit(ir_if *);
    /*@}*/
 
-   struct ir_to_mesa_src_reg result;
+   src_reg result;
 
    /** List of variable_storage */
    exec_list variables;
@@ -240,52 +282,35 @@ public:
    /** List of ir_to_mesa_instruction */
    exec_list instructions;
 
-   ir_to_mesa_instruction *ir_to_mesa_emit_op0(ir_instruction *ir,
-                                              enum prog_opcode op);
+   ir_to_mesa_instruction *emit(ir_instruction *ir, enum prog_opcode op);
 
-   ir_to_mesa_instruction *ir_to_mesa_emit_op1(ir_instruction *ir,
-                                              enum prog_opcode op,
-                                              ir_to_mesa_dst_reg dst,
-                                              ir_to_mesa_src_reg src0);
+   ir_to_mesa_instruction *emit(ir_instruction *ir, enum prog_opcode op,
+                               dst_reg dst, src_reg src0);
 
-   ir_to_mesa_instruction *ir_to_mesa_emit_op2(ir_instruction *ir,
-                                              enum prog_opcode op,
-                                              ir_to_mesa_dst_reg dst,
-                                              ir_to_mesa_src_reg src0,
-                                              ir_to_mesa_src_reg src1);
+   ir_to_mesa_instruction *emit(ir_instruction *ir, enum prog_opcode op,
+                               dst_reg dst, src_reg src0, src_reg src1);
 
-   ir_to_mesa_instruction *ir_to_mesa_emit_op3(ir_instruction *ir,
-                                              enum prog_opcode op,
-                                              ir_to_mesa_dst_reg dst,
-                                              ir_to_mesa_src_reg src0,
-                                              ir_to_mesa_src_reg src1,
-                                              ir_to_mesa_src_reg src2);
+   ir_to_mesa_instruction *emit(ir_instruction *ir, enum prog_opcode op,
+                               dst_reg dst,
+                               src_reg src0, src_reg src1, src_reg src2);
 
    /**
     * Emit the correct dot-product instruction for the type of arguments
-    *
-    * \sa ir_to_mesa_emit_op2
     */
-   void ir_to_mesa_emit_dp(ir_instruction *ir,
-                          ir_to_mesa_dst_reg dst,
-                          ir_to_mesa_src_reg src0,
-                          ir_to_mesa_src_reg src1,
-                          unsigned elements);
-
-   void ir_to_mesa_emit_scalar_op1(ir_instruction *ir,
-                                  enum prog_opcode op,
-                                  ir_to_mesa_dst_reg dst,
-                                  ir_to_mesa_src_reg src0);
-
-   void ir_to_mesa_emit_scalar_op2(ir_instruction *ir,
-                                  enum prog_opcode op,
-                                  ir_to_mesa_dst_reg dst,
-                                  ir_to_mesa_src_reg src0,
-                                  ir_to_mesa_src_reg src1);
+   void emit_dp(ir_instruction *ir,
+               dst_reg dst,
+               src_reg src0,
+               src_reg src1,
+               unsigned elements);
+
+   void emit_scalar(ir_instruction *ir, enum prog_opcode op,
+                   dst_reg dst, src_reg src0);
+
+   void emit_scalar(ir_instruction *ir, enum prog_opcode op,
+                   dst_reg dst, src_reg src0, src_reg src1);
 
    void emit_scs(ir_instruction *ir, enum prog_opcode op,
-                ir_to_mesa_dst_reg dst,
-                const ir_to_mesa_src_reg &src);
+                dst_reg dst, const src_reg &src);
 
    GLboolean try_emit_mad(ir_expression *ir,
                          int mul_operand);
@@ -300,15 +325,11 @@ public:
    void *mem_ctx;
 };
 
-ir_to_mesa_src_reg ir_to_mesa_undef = ir_to_mesa_src_reg(PROGRAM_UNDEFINED, 0, NULL);
+src_reg undef_src = src_reg(PROGRAM_UNDEFINED, 0, NULL);
 
-ir_to_mesa_dst_reg ir_to_mesa_undef_dst = {
-   PROGRAM_UNDEFINED, 0, SWIZZLE_NOOP, COND_TR, NULL,
-};
+dst_reg undef_dst = dst_reg(PROGRAM_UNDEFINED, SWIZZLE_NOOP);
 
-ir_to_mesa_dst_reg ir_to_mesa_address_reg = {
-   PROGRAM_ADDRESS, 0, WRITEMASK_X, COND_TR, NULL
-};
+dst_reg address_reg = dst_reg(PROGRAM_ADDRESS, WRITEMASK_X);
 
 static void
 fail_link(struct gl_shader_program *prog, const char *fmt, ...) PRINTFLIKE(2, 3);
@@ -339,12 +360,9 @@ swizzle_for_size(int size)
 }
 
 ir_to_mesa_instruction *
-ir_to_mesa_visitor::ir_to_mesa_emit_op3(ir_instruction *ir,
-                                       enum prog_opcode op,
-                                       ir_to_mesa_dst_reg dst,
-                                       ir_to_mesa_src_reg src0,
-                                       ir_to_mesa_src_reg src1,
-                                       ir_to_mesa_src_reg src2)
+ir_to_mesa_visitor::emit(ir_instruction *ir, enum prog_opcode op,
+                        dst_reg dst,
+                        src_reg src0, src_reg src1, src_reg src2)
 {
    ir_to_mesa_instruction *inst = new(mem_ctx) ir_to_mesa_instruction();
    int num_reladdr = 0;
@@ -363,18 +381,16 @@ ir_to_mesa_visitor::ir_to_mesa_emit_op3(ir_instruction *ir,
    reladdr_to_temp(ir, &src0, &num_reladdr);
 
    if (dst.reladdr) {
-      ir_to_mesa_emit_op1(ir, OPCODE_ARL, ir_to_mesa_address_reg,
-                          *dst.reladdr);
-
+      emit(ir, OPCODE_ARL, address_reg, *dst.reladdr);
       num_reladdr--;
    }
    assert(num_reladdr == 0);
 
    inst->op = op;
-   inst->dst_reg = dst;
-   inst->src_reg[0] = src0;
-   inst->src_reg[1] = src1;
-   inst->src_reg[2] = src2;
+   inst->dst = dst;
+   inst->src[0] = src0;
+   inst->src[1] = src1;
+   inst->src[2] = src2;
    inst->ir = ir;
 
    inst->function = NULL;
@@ -386,69 +402,36 @@ ir_to_mesa_visitor::ir_to_mesa_emit_op3(ir_instruction *ir,
 
 
 ir_to_mesa_instruction *
-ir_to_mesa_visitor::ir_to_mesa_emit_op2(ir_instruction *ir,
-                                       enum prog_opcode op,
-                                       ir_to_mesa_dst_reg dst,
-                                       ir_to_mesa_src_reg src0,
-                                       ir_to_mesa_src_reg src1)
+ir_to_mesa_visitor::emit(ir_instruction *ir, enum prog_opcode op,
+                        dst_reg dst, src_reg src0, src_reg src1)
 {
-   return ir_to_mesa_emit_op3(ir, op, dst, src0, src1, ir_to_mesa_undef);
+   return emit(ir, op, dst, src0, src1, undef_src);
 }
 
 ir_to_mesa_instruction *
-ir_to_mesa_visitor::ir_to_mesa_emit_op1(ir_instruction *ir,
-                                       enum prog_opcode op,
-                                       ir_to_mesa_dst_reg dst,
-                                       ir_to_mesa_src_reg src0)
+ir_to_mesa_visitor::emit(ir_instruction *ir, enum prog_opcode op,
+                        dst_reg dst, src_reg src0)
 {
    assert(dst.writemask != 0);
-   return ir_to_mesa_emit_op3(ir, op, dst,
-                             src0, ir_to_mesa_undef, ir_to_mesa_undef);
+   return emit(ir, op, dst, src0, undef_src, undef_src);
 }
 
 ir_to_mesa_instruction *
-ir_to_mesa_visitor::ir_to_mesa_emit_op0(ir_instruction *ir,
-                                       enum prog_opcode op)
+ir_to_mesa_visitor::emit(ir_instruction *ir, enum prog_opcode op)
 {
-   return ir_to_mesa_emit_op3(ir, op, ir_to_mesa_undef_dst,
-                             ir_to_mesa_undef,
-                             ir_to_mesa_undef,
-                             ir_to_mesa_undef);
+   return emit(ir, op, undef_dst, undef_src, undef_src, undef_src);
 }
 
 void
-ir_to_mesa_visitor::ir_to_mesa_emit_dp(ir_instruction *ir,
-                                      ir_to_mesa_dst_reg dst,
-                                      ir_to_mesa_src_reg src0,
-                                      ir_to_mesa_src_reg src1,
-                                      unsigned elements)
+ir_to_mesa_visitor::emit_dp(ir_instruction *ir,
+                           dst_reg dst, src_reg src0, src_reg src1,
+                           unsigned elements)
 {
    static const gl_inst_opcode dot_opcodes[] = {
       OPCODE_DP2, OPCODE_DP3, OPCODE_DP4
    };
 
-   ir_to_mesa_emit_op3(ir, dot_opcodes[elements - 2],
-                      dst, src0, src1, ir_to_mesa_undef);
-}
-
-inline ir_to_mesa_dst_reg
-ir_to_mesa_dst_reg_from_src(ir_to_mesa_src_reg reg)
-{
-   ir_to_mesa_dst_reg dst_reg;
-
-   dst_reg.file = reg.file;
-   dst_reg.index = reg.index;
-   dst_reg.writemask = WRITEMASK_XYZW;
-   dst_reg.cond_mask = COND_TR;
-   dst_reg.reladdr = reg.reladdr;
-
-   return dst_reg;
-}
-
-inline ir_to_mesa_src_reg
-ir_to_mesa_src_reg_from_dst(ir_to_mesa_dst_reg reg)
-{
-   return ir_to_mesa_src_reg(reg.file, reg.index, NULL);
+   emit(ir, dot_opcodes[elements - 2], dst, src0, src1);
 }
 
 /**
@@ -460,11 +443,9 @@ ir_to_mesa_src_reg_from_dst(ir_to_mesa_dst_reg reg)
  * to produce dest channels.
  */
 void
-ir_to_mesa_visitor::ir_to_mesa_emit_scalar_op2(ir_instruction *ir,
-                                              enum prog_opcode op,
-                                              ir_to_mesa_dst_reg dst,
-                                              ir_to_mesa_src_reg orig_src0,
-                                              ir_to_mesa_src_reg orig_src1)
+ir_to_mesa_visitor::emit_scalar(ir_instruction *ir, enum prog_opcode op,
+                               dst_reg dst,
+                               src_reg orig_src0, src_reg orig_src1)
 {
    int i, j;
    int done_mask = ~dst.writemask;
@@ -476,8 +457,8 @@ ir_to_mesa_visitor::ir_to_mesa_emit_scalar_op2(ir_instruction *ir,
    for (i = 0; i < 4; i++) {
       GLuint this_mask = (1 << i);
       ir_to_mesa_instruction *inst;
-      ir_to_mesa_src_reg src0 = orig_src0;
-      ir_to_mesa_src_reg src1 = orig_src1;
+      src_reg src0 = orig_src0;
+      src_reg src1 = orig_src1;
 
       if (done_mask & this_mask)
         continue;
@@ -500,26 +481,21 @@ ir_to_mesa_visitor::ir_to_mesa_emit_scalar_op2(ir_instruction *ir,
       src1.swizzle = MAKE_SWIZZLE4(src1_swiz, src1_swiz,
                                  src1_swiz, src1_swiz);
 
-      inst = ir_to_mesa_emit_op2(ir, op,
-                                dst,
-                                src0,
-                                src1);
-      inst->dst_reg.writemask = this_mask;
+      inst = emit(ir, op, dst, src0, src1);
+      inst->dst.writemask = this_mask;
       done_mask |= this_mask;
    }
 }
 
 void
-ir_to_mesa_visitor::ir_to_mesa_emit_scalar_op1(ir_instruction *ir,
-                                              enum prog_opcode op,
-                                              ir_to_mesa_dst_reg dst,
-                                              ir_to_mesa_src_reg src0)
+ir_to_mesa_visitor::emit_scalar(ir_instruction *ir, enum prog_opcode op,
+                               dst_reg dst, src_reg src0)
 {
-   ir_to_mesa_src_reg undef = ir_to_mesa_undef;
+   src_reg undef = undef_src;
 
    undef.swizzle = SWIZZLE_XXXX;
 
-   ir_to_mesa_emit_scalar_op2(ir, op, dst, src0, undef);
+   emit_scalar(ir, op, dst, src0, undef);
 }
 
 /**
@@ -538,20 +514,20 @@ ir_to_mesa_visitor::ir_to_mesa_emit_scalar_op1(ir_instruction *ir,
  */
 void
 ir_to_mesa_visitor::emit_scs(ir_instruction *ir, enum prog_opcode op,
-                            ir_to_mesa_dst_reg dst,
-                            const ir_to_mesa_src_reg &src)
+                            dst_reg dst,
+                            const src_reg &src)
 {
    /* Vertex programs cannot use the SCS opcode.
     */
    if (this->prog->Target == GL_VERTEX_PROGRAM_ARB) {
-      ir_to_mesa_emit_scalar_op1(ir, op, dst, src);
+      emit_scalar(ir, op, dst, src);
       return;
    }
 
    const unsigned component = (op == OPCODE_SIN) ? 0 : 1;
    const unsigned scs_mask = (1U << component);
    int done_mask = ~dst.writemask;
-   ir_to_mesa_src_reg tmp;
+   src_reg tmp;
 
    assert(op == OPCODE_SIN || op == OPCODE_COS);
 
@@ -564,7 +540,7 @@ ir_to_mesa_visitor::emit_scs(ir_instruction *ir, enum prog_opcode op,
 
    for (unsigned i = 0; i < 4; i++) {
       unsigned this_mask = (1U << i);
-      ir_to_mesa_src_reg src0 = src;
+      src_reg src0 = src;
 
       if ((done_mask & this_mask) != 0)
         continue;
@@ -592,41 +568,40 @@ ir_to_mesa_visitor::emit_scs(ir_instruction *ir, enum prog_opcode op,
 
       if (this_mask != scs_mask) {
         ir_to_mesa_instruction *inst;
-        ir_to_mesa_dst_reg tmp_dst = ir_to_mesa_dst_reg_from_src(tmp);
+        dst_reg tmp_dst = dst_reg(tmp);
 
         /* Emit the SCS instruction.
          */
-        inst = ir_to_mesa_emit_op1(ir, OPCODE_SCS, tmp_dst, src0);
-        inst->dst_reg.writemask = scs_mask;
+        inst = emit(ir, OPCODE_SCS, tmp_dst, src0);
+        inst->dst.writemask = scs_mask;
 
         /* Move the result of the SCS instruction to the desired location in
          * the destination.
          */
         tmp.swizzle = MAKE_SWIZZLE4(component, component,
                                     component, component);
-        inst = ir_to_mesa_emit_op1(ir, OPCODE_SCS, dst, tmp);
-        inst->dst_reg.writemask = this_mask;
+        inst = emit(ir, OPCODE_SCS, dst, tmp);
+        inst->dst.writemask = this_mask;
       } else {
         /* Emit the SCS instruction to write directly to the destination.
          */
-        ir_to_mesa_instruction *inst =
-           ir_to_mesa_emit_op1(ir, OPCODE_SCS, dst, src0);
-        inst->dst_reg.writemask = scs_mask;
+        ir_to_mesa_instruction *inst = emit(ir, OPCODE_SCS, dst, src0);
+        inst->dst.writemask = scs_mask;
       }
 
       done_mask |= this_mask;
    }
 }
 
-struct ir_to_mesa_src_reg
+struct src_reg
 ir_to_mesa_visitor::src_reg_for_float(float val)
 {
-   ir_to_mesa_src_reg src_reg(PROGRAM_CONSTANT, -1, NULL);
+   src_reg src(PROGRAM_CONSTANT, -1, NULL);
 
-   src_reg.index = _mesa_add_unnamed_constant(this->prog->Parameters,
-                                             &val, 1, &src_reg.swizzle);
+   src.index = _mesa_add_unnamed_constant(this->prog->Parameters,
+                                         &val, 1, &src.swizzle);
 
-   return src_reg;
+   return src;
 }
 
 static int
@@ -676,31 +651,31 @@ type_size(const struct glsl_type *type)
  * storage).  Actual register allocation for the Mesa VM occurs in a
  * pass over the Mesa IR later.
  */
-ir_to_mesa_src_reg
+src_reg
 ir_to_mesa_visitor::get_temp(const glsl_type *type)
 {
-   ir_to_mesa_src_reg src_reg;
+   src_reg src;
    int swizzle[4];
    int i;
 
-   src_reg.file = PROGRAM_TEMPORARY;
-   src_reg.index = next_temp;
-   src_reg.reladdr = NULL;
+   src.file = PROGRAM_TEMPORARY;
+   src.index = next_temp;
+   src.reladdr = NULL;
    next_temp += type_size(type);
 
    if (type->is_array() || type->is_record()) {
-      src_reg.swizzle = SWIZZLE_NOOP;
+      src.swizzle = SWIZZLE_NOOP;
    } else {
       for (i = 0; i < type->vector_elements; i++)
         swizzle[i] = i;
       for (; i < 4; i++)
         swizzle[i] = type->vector_elements - 1;
-      src_reg.swizzle = MAKE_SWIZZLE4(swizzle[0], swizzle[1],
-                                     swizzle[2], swizzle[3]);
+      src.swizzle = MAKE_SWIZZLE4(swizzle[0], swizzle[1],
+                                 swizzle[2], swizzle[3]);
    }
-   src_reg.negate = 0;
+   src.negate = 0;
 
-   return src_reg;
+   return src;
 }
 
 variable_storage *
@@ -754,27 +729,8 @@ ir_to_mesa_visitor::visit(ir_variable *ir)
 
    if (ir->mode == ir_var_uniform && strncmp(ir->name, "gl_", 3) == 0) {
       unsigned int i;
-      const struct gl_builtin_uniform_desc *statevar;
-
-      for (i = 0; _mesa_builtin_uniform_desc[i].name; i++) {
-        if (strcmp(ir->name, _mesa_builtin_uniform_desc[i].name) == 0)
-           break;
-      }
-
-      if (!_mesa_builtin_uniform_desc[i].name) {
-        fail_link(this->shader_program,
-                  "Failed to find builtin uniform `%s'\n", ir->name);
-        return;
-      }
-
-      statevar = &_mesa_builtin_uniform_desc[i];
-
-      int array_count;
-      if (ir->type->is_array()) {
-        array_count = ir->type->length;
-      } else {
-        array_count = 1;
-      }
+      const ir_state_slot *const slots = ir->state_slots;
+      assert(ir->state_slots != NULL);
 
       /* Check if this statevar's setup in the STATE file exactly
        * matches how we'll want to reference it as a
@@ -782,63 +738,57 @@ ir_to_mesa_visitor::visit(ir_variable *ir)
        * temporary storage and hope that it'll get copy-propagated
        * out.
        */
-      for (i = 0; i < statevar->num_elements; i++) {
-        if (statevar->elements[i].swizzle != SWIZZLE_XYZW) {
+      for (i = 0; i < ir->num_state_slots; i++) {
+        if (slots[i].swizzle != SWIZZLE_XYZW) {
            break;
         }
       }
 
       struct variable_storage *storage;
-      ir_to_mesa_dst_reg dst;
-      if (i == statevar->num_elements) {
+      dst_reg dst;
+      if (i == ir->num_state_slots) {
         /* We'll set the index later. */
         storage = new(mem_ctx) variable_storage(ir, PROGRAM_STATE_VAR, -1);
         this->variables.push_tail(storage);
 
-        dst = ir_to_mesa_undef_dst;
+        dst = undef_dst;
       } else {
+        /* The variable_storage constructor allocates slots based on the size
+         * of the type.  However, this had better match the number of state
+         * elements that we're going to copy into the new temporary.
+         */
+        assert((int) ir->num_state_slots == type_size(ir->type));
+
         storage = new(mem_ctx) variable_storage(ir, PROGRAM_TEMPORARY,
                                                 this->next_temp);
         this->variables.push_tail(storage);
         this->next_temp += type_size(ir->type);
 
-        dst = ir_to_mesa_dst_reg_from_src(ir_to_mesa_src_reg(PROGRAM_TEMPORARY,
-                                                             storage->index,
-                                                             NULL));
+        dst = dst_reg(src_reg(PROGRAM_TEMPORARY, storage->index, NULL));
       }
 
 
-      for (int a = 0; a < array_count; a++) {
-        for (unsigned int i = 0; i < statevar->num_elements; i++) {
-           struct gl_builtin_uniform_element *element = &statevar->elements[i];
-           int tokens[STATE_LENGTH];
-
-           memcpy(tokens, element->tokens, sizeof(element->tokens));
-           if (ir->type->is_array()) {
-              tokens[1] = a;
-           }
-
-           int index = _mesa_add_state_reference(this->prog->Parameters,
-                                                 (gl_state_index *)tokens);
+      for (unsigned int i = 0; i < ir->num_state_slots; i++) {
+        int index = _mesa_add_state_reference(this->prog->Parameters,
+                                              (gl_state_index *)slots[i].tokens);
 
-           if (storage->file == PROGRAM_STATE_VAR) {
-              if (storage->index == -1) {
-                 storage->index = index;
-              } else {
-                 assert(index ==
-                         (int)(storage->index + a * statevar->num_elements + i));
-              }
+        if (storage->file == PROGRAM_STATE_VAR) {
+           if (storage->index == -1) {
+              storage->index = index;
            } else {
-              ir_to_mesa_src_reg src(PROGRAM_STATE_VAR, index, NULL);
-              src.swizzle = element->swizzle;
-              ir_to_mesa_emit_op1(ir, OPCODE_MOV, dst, src);
-              /* even a float takes up a whole vec4 reg in a struct/array. */
-              dst.index++;
+              assert(index == storage->index + (int)i);
            }
+        } else {
+           src_reg src(PROGRAM_STATE_VAR, index, NULL);
+           src.swizzle = slots[i].swizzle;
+           emit(ir, OPCODE_MOV, dst, src);
+           /* even a float takes up a whole vec4 reg in a struct/array. */
+           dst.index++;
         }
       }
+
       if (storage->file == PROGRAM_TEMPORARY &&
-         dst.index != storage->index + type_size(ir->type)) {
+         dst.index != storage->index + (int) ir->num_state_slots) {
         fail_link(this->shader_program,
                   "failed to load builtin uniform `%s'  (%d/%d regs loaded)\n",
                   ir->name, dst.index - storage->index,
@@ -864,7 +814,7 @@ ir_to_mesa_visitor::visit(ir_loop *ir)
       delete a;
    }
 
-   ir_to_mesa_emit_op0(NULL, OPCODE_BGNLOOP);
+   emit(NULL, OPCODE_BGNLOOP);
 
    if (ir->to) {
       ir_expression *e =
@@ -897,7 +847,7 @@ ir_to_mesa_visitor::visit(ir_loop *ir)
       delete e;
    }
 
-   ir_to_mesa_emit_op0(NULL, OPCODE_ENDLOOP);
+   emit(NULL, OPCODE_ENDLOOP);
 }
 
 void
@@ -905,10 +855,10 @@ ir_to_mesa_visitor::visit(ir_loop_jump *ir)
 {
    switch (ir->mode) {
    case ir_loop_jump::jump_break:
-      ir_to_mesa_emit_op0(NULL, OPCODE_BRK);
+      emit(NULL, OPCODE_BRK);
       break;
    case ir_loop_jump::jump_continue:
-      ir_to_mesa_emit_op0(NULL, OPCODE_CONT);
+      emit(NULL, OPCODE_CONT);
       break;
    }
 }
@@ -947,7 +897,7 @@ GLboolean
 ir_to_mesa_visitor::try_emit_mad(ir_expression *ir, int mul_operand)
 {
    int nonmul_operand = 1 - mul_operand;
-   ir_to_mesa_src_reg a, b, c;
+   src_reg a, b, c;
 
    ir_expression *expr = ir->operands[mul_operand]->as_expression();
    if (!expr || expr->operation != ir_binop_mul)
@@ -961,8 +911,7 @@ ir_to_mesa_visitor::try_emit_mad(ir_expression *ir, int mul_operand)
    c = this->result;
 
    this->result = get_temp(ir->type);
-   ir_to_mesa_emit_op3(ir, OPCODE_MAD,
-                      ir_to_mesa_dst_reg_from_src(this->result), a, b, c);
+   emit(ir, OPCODE_MAD, dst_reg(this->result), a, b, c);
 
    return true;
 }
@@ -981,13 +930,11 @@ ir_to_mesa_visitor::try_emit_sat(ir_expression *ir)
       return false;
 
    sat_src->accept(this);
-   ir_to_mesa_src_reg src = this->result;
+   src_reg src = this->result;
 
    this->result = get_temp(ir->type);
    ir_to_mesa_instruction *inst;
-   inst = ir_to_mesa_emit_op1(ir, OPCODE_MOV,
-                             ir_to_mesa_dst_reg_from_src(this->result),
-                             src);
+   inst = emit(ir, OPCODE_MOV, dst_reg(this->result), src);
    inst->saturate = true;
 
    return true;
@@ -995,18 +942,17 @@ ir_to_mesa_visitor::try_emit_sat(ir_expression *ir)
 
 void
 ir_to_mesa_visitor::reladdr_to_temp(ir_instruction *ir,
-                                   ir_to_mesa_src_reg *reg, int *num_reladdr)
+                                   src_reg *reg, int *num_reladdr)
 {
    if (!reg->reladdr)
       return;
 
-   ir_to_mesa_emit_op1(ir, OPCODE_ARL, ir_to_mesa_address_reg, *reg->reladdr);
+   emit(ir, OPCODE_ARL, address_reg, *reg->reladdr);
 
    if (*num_reladdr != 1) {
-      ir_to_mesa_src_reg temp = get_temp(glsl_type::vec4_type);
+      src_reg temp = get_temp(glsl_type::vec4_type);
 
-      ir_to_mesa_emit_op1(ir, OPCODE_MOV,
-                         ir_to_mesa_dst_reg_from_src(temp), *reg);
+      emit(ir, OPCODE_MOV, dst_reg(temp), *reg);
       *reg = temp;
    }
 
@@ -1102,7 +1048,7 @@ ir_to_mesa_visitor::emit_swz(ir_expression *ir)
       exit(1);
    }
 
-   ir_to_mesa_src_reg src;
+   src_reg src;
 
    src = this->result;
    src.swizzle = MAKE_SWIZZLE4(components[0],
@@ -1117,8 +1063,8 @@ ir_to_mesa_visitor::emit_swz(ir_expression *ir)
    /* Storage for our result.  Ideally for an assignment we'd be using the
     * actual storage for the result here, instead.
     */
-   const ir_to_mesa_src_reg result_src = get_temp(ir->type);
-   ir_to_mesa_dst_reg result_dst = ir_to_mesa_dst_reg_from_src(result_src);
+   const src_reg result_src = get_temp(ir->type);
+   dst_reg result_dst = dst_reg(result_src);
 
    /* Limit writes to the channels that will be used by result_src later.
     * This does limit this temp's use as a temporary for multi-instruction
@@ -1126,7 +1072,7 @@ ir_to_mesa_visitor::emit_swz(ir_expression *ir)
     */
    result_dst.writemask = (1 << ir->type->vector_elements) - 1;
 
-   ir_to_mesa_emit_op1(ir, OPCODE_SWZ, result_dst, src);
+   emit(ir, OPCODE_SWZ, result_dst, src);
    this->result = result_src;
 }
 
@@ -1134,9 +1080,9 @@ void
 ir_to_mesa_visitor::visit(ir_expression *ir)
 {
    unsigned int operand;
-   struct ir_to_mesa_src_reg op[Elements(ir->operands)];
-   struct ir_to_mesa_src_reg result_src;
-   struct ir_to_mesa_dst_reg result_dst;
+   src_reg op[Elements(ir->operands)];
+   src_reg result_src;
+   dst_reg result_dst;
 
    /* Quick peephole: Emit OPCODE_MAD(a, b, c) instead of ADD(MUL(a, b), c)
     */
@@ -1184,7 +1130,7 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
     */
    result_src = get_temp(ir->type);
    /* convenience for the emit functions below. */
-   result_dst = ir_to_mesa_dst_reg_from_src(result_src);
+   result_dst = dst_reg(result_src);
    /* Limit writes to the channels that will be used by result_src later.
     * This does limit this temp's use as a temporary for multi-instruction
     * sequences.
@@ -1193,38 +1139,37 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
 
    switch (ir->operation) {
    case ir_unop_logic_not:
-      ir_to_mesa_emit_op2(ir, OPCODE_SEQ, result_dst,
-                         op[0], src_reg_for_float(0.0));
+      emit(ir, OPCODE_SEQ, result_dst, op[0], src_reg_for_float(0.0));
       break;
    case ir_unop_neg:
       op[0].negate = ~op[0].negate;
       result_src = op[0];
       break;
    case ir_unop_abs:
-      ir_to_mesa_emit_op1(ir, OPCODE_ABS, result_dst, op[0]);
+      emit(ir, OPCODE_ABS, result_dst, op[0]);
       break;
    case ir_unop_sign:
-      ir_to_mesa_emit_op1(ir, OPCODE_SSG, result_dst, op[0]);
+      emit(ir, OPCODE_SSG, result_dst, op[0]);
       break;
    case ir_unop_rcp:
-      ir_to_mesa_emit_scalar_op1(ir, OPCODE_RCP, result_dst, op[0]);
+      emit_scalar(ir, OPCODE_RCP, result_dst, op[0]);
       break;
 
    case ir_unop_exp2:
-      ir_to_mesa_emit_scalar_op1(ir, OPCODE_EX2, result_dst, op[0]);
+      emit_scalar(ir, OPCODE_EX2, result_dst, op[0]);
       break;
    case ir_unop_exp:
    case ir_unop_log:
       assert(!"not reached: should be handled by ir_explog_to_explog2");
       break;
    case ir_unop_log2:
-      ir_to_mesa_emit_scalar_op1(ir, OPCODE_LG2, result_dst, op[0]);
+      emit_scalar(ir, OPCODE_LG2, result_dst, op[0]);
       break;
    case ir_unop_sin:
-      ir_to_mesa_emit_scalar_op1(ir, OPCODE_SIN, result_dst, op[0]);
+      emit_scalar(ir, OPCODE_SIN, result_dst, op[0]);
       break;
    case ir_unop_cos:
-      ir_to_mesa_emit_scalar_op1(ir, OPCODE_COS, result_dst, op[0]);
+      emit_scalar(ir, OPCODE_COS, result_dst, op[0]);
       break;
    case ir_unop_sin_reduced:
       emit_scs(ir, OPCODE_SIN, result_dst, op[0]);
@@ -1234,10 +1179,10 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
       break;
 
    case ir_unop_dFdx:
-      ir_to_mesa_emit_op1(ir, OPCODE_DDX, result_dst, op[0]);
+      emit(ir, OPCODE_DDX, result_dst, op[0]);
       break;
    case ir_unop_dFdy:
-      ir_to_mesa_emit_op1(ir, OPCODE_DDY, result_dst, op[0]);
+      emit(ir, OPCODE_DDY, result_dst, op[0]);
       break;
 
    case ir_unop_noise: {
@@ -1246,19 +1191,19 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
                     + (ir->operands[0]->type->vector_elements) - 1);
       assert((opcode >= OPCODE_NOISE1) && (opcode <= OPCODE_NOISE4));
 
-      ir_to_mesa_emit_op1(ir, opcode, result_dst, op[0]);
+      emit(ir, opcode, result_dst, op[0]);
       break;
    }
 
    case ir_binop_add:
-      ir_to_mesa_emit_op2(ir, OPCODE_ADD, result_dst, op[0], op[1]);
+      emit(ir, OPCODE_ADD, result_dst, op[0], op[1]);
       break;
    case ir_binop_sub:
-      ir_to_mesa_emit_op2(ir, OPCODE_SUB, result_dst, op[0], op[1]);
+      emit(ir, OPCODE_SUB, result_dst, op[0], op[1]);
       break;
 
    case ir_binop_mul:
-      ir_to_mesa_emit_op2(ir, OPCODE_MUL, result_dst, op[0], op[1]);
+      emit(ir, OPCODE_MUL, result_dst, op[0], op[1]);
       break;
    case ir_binop_div:
       assert(!"not reached: should be handled by ir_div_to_mul_rcp");
@@ -1267,100 +1212,88 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
       break;
 
    case ir_binop_less:
-      ir_to_mesa_emit_op2(ir, OPCODE_SLT, result_dst, op[0], op[1]);
+      emit(ir, OPCODE_SLT, result_dst, op[0], op[1]);
       break;
    case ir_binop_greater:
-      ir_to_mesa_emit_op2(ir, OPCODE_SGT, result_dst, op[0], op[1]);
+      emit(ir, OPCODE_SGT, result_dst, op[0], op[1]);
       break;
    case ir_binop_lequal:
-      ir_to_mesa_emit_op2(ir, OPCODE_SLE, result_dst, op[0], op[1]);
+      emit(ir, OPCODE_SLE, result_dst, op[0], op[1]);
       break;
    case ir_binop_gequal:
-      ir_to_mesa_emit_op2(ir, OPCODE_SGE, result_dst, op[0], op[1]);
+      emit(ir, OPCODE_SGE, result_dst, op[0], op[1]);
       break;
    case ir_binop_equal:
-      ir_to_mesa_emit_op2(ir, OPCODE_SEQ, result_dst, op[0], op[1]);
+      emit(ir, OPCODE_SEQ, result_dst, op[0], op[1]);
       break;
    case ir_binop_nequal:
-      ir_to_mesa_emit_op2(ir, OPCODE_SNE, result_dst, op[0], op[1]);
+      emit(ir, OPCODE_SNE, result_dst, op[0], op[1]);
       break;
    case ir_binop_all_equal:
       /* "==" operator producing a scalar boolean. */
       if (ir->operands[0]->type->is_vector() ||
          ir->operands[1]->type->is_vector()) {
-        ir_to_mesa_src_reg temp = get_temp(glsl_type::vec4_type);
-        ir_to_mesa_emit_op2(ir, OPCODE_SNE,
-                            ir_to_mesa_dst_reg_from_src(temp), op[0], op[1]);
-        ir_to_mesa_emit_dp(ir, result_dst, temp, temp, vector_elements);
-        ir_to_mesa_emit_op2(ir, OPCODE_SEQ,
-                            result_dst, result_src, src_reg_for_float(0.0));
+        src_reg temp = get_temp(glsl_type::vec4_type);
+        emit(ir, OPCODE_SNE, dst_reg(temp), op[0], op[1]);
+        emit_dp(ir, result_dst, temp, temp, vector_elements);
+        emit(ir, OPCODE_SEQ, result_dst, result_src, src_reg_for_float(0.0));
       } else {
-        ir_to_mesa_emit_op2(ir, OPCODE_SEQ, result_dst, op[0], op[1]);
+        emit(ir, OPCODE_SEQ, result_dst, op[0], op[1]);
       }
       break;
    case ir_binop_any_nequal:
       /* "!=" operator producing a scalar boolean. */
       if (ir->operands[0]->type->is_vector() ||
          ir->operands[1]->type->is_vector()) {
-        ir_to_mesa_src_reg temp = get_temp(glsl_type::vec4_type);
-        ir_to_mesa_emit_op2(ir, OPCODE_SNE,
-                            ir_to_mesa_dst_reg_from_src(temp), op[0], op[1]);
-        ir_to_mesa_emit_dp(ir, result_dst, temp, temp, vector_elements);
-        ir_to_mesa_emit_op2(ir, OPCODE_SNE,
-                            result_dst, result_src, src_reg_for_float(0.0));
+        src_reg temp = get_temp(glsl_type::vec4_type);
+        emit(ir, OPCODE_SNE, dst_reg(temp), op[0], op[1]);
+        emit_dp(ir, result_dst, temp, temp, vector_elements);
+        emit(ir, OPCODE_SNE, result_dst, result_src, src_reg_for_float(0.0));
       } else {
-        ir_to_mesa_emit_op2(ir, OPCODE_SNE, result_dst, op[0], op[1]);
+        emit(ir, OPCODE_SNE, result_dst, op[0], op[1]);
       }
       break;
 
    case ir_unop_any:
       assert(ir->operands[0]->type->is_vector());
-      ir_to_mesa_emit_dp(ir, result_dst, op[0], op[0],
-                        ir->operands[0]->type->vector_elements);
-      ir_to_mesa_emit_op2(ir, OPCODE_SNE,
-                         result_dst, result_src, src_reg_for_float(0.0));
+      emit_dp(ir, result_dst, op[0], op[0],
+             ir->operands[0]->type->vector_elements);
+      emit(ir, OPCODE_SNE, result_dst, result_src, src_reg_for_float(0.0));
       break;
 
    case ir_binop_logic_xor:
-      ir_to_mesa_emit_op2(ir, OPCODE_SNE, result_dst, op[0], op[1]);
+      emit(ir, OPCODE_SNE, result_dst, op[0], op[1]);
       break;
 
    case ir_binop_logic_or:
       /* This could be a saturated add and skip the SNE. */
-      ir_to_mesa_emit_op2(ir, OPCODE_ADD,
-                         result_dst,
-                         op[0], op[1]);
-
-      ir_to_mesa_emit_op2(ir, OPCODE_SNE,
-                         result_dst,
-                         result_src, src_reg_for_float(0.0));
+      emit(ir, OPCODE_ADD, result_dst, op[0], op[1]);
+      emit(ir, OPCODE_SNE, result_dst, result_src, src_reg_for_float(0.0));
       break;
 
    case ir_binop_logic_and:
       /* the bool args are stored as float 0.0 or 1.0, so "mul" gives us "and". */
-      ir_to_mesa_emit_op2(ir, OPCODE_MUL,
-                         result_dst,
-                         op[0], op[1]);
+      emit(ir, OPCODE_MUL, result_dst, op[0], op[1]);
       break;
 
    case ir_binop_dot:
       assert(ir->operands[0]->type->is_vector());
       assert(ir->operands[0]->type == ir->operands[1]->type);
-      ir_to_mesa_emit_dp(ir, result_dst, op[0], op[1],
-                        ir->operands[0]->type->vector_elements);
+      emit_dp(ir, result_dst, op[0], op[1],
+             ir->operands[0]->type->vector_elements);
       break;
 
    case ir_unop_sqrt:
       /* sqrt(x) = x * rsq(x). */
-      ir_to_mesa_emit_scalar_op1(ir, OPCODE_RSQ, result_dst, op[0]);
-      ir_to_mesa_emit_op2(ir, OPCODE_MUL, result_dst, result_src, op[0]);
+      emit_scalar(ir, OPCODE_RSQ, result_dst, op[0]);
+      emit(ir, OPCODE_MUL, result_dst, result_src, op[0]);
       /* For incoming channels <= 0, set the result to 0. */
       op[0].negate = ~op[0].negate;
-      ir_to_mesa_emit_op3(ir, OPCODE_CMP, result_dst,
+      emit(ir, OPCODE_CMP, result_dst,
                          op[0], result_src, src_reg_for_float(0.0));
       break;
    case ir_unop_rsq:
-      ir_to_mesa_emit_scalar_op1(ir, OPCODE_RSQ, result_dst, op[0]);
+      emit_scalar(ir, OPCODE_RSQ, result_dst, op[0]);
       break;
    case ir_unop_i2f:
    case ir_unop_b2f:
@@ -1369,36 +1302,36 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
       result_src = op[0];
       break;
    case ir_unop_f2i:
-      ir_to_mesa_emit_op1(ir, OPCODE_TRUNC, result_dst, op[0]);
+      emit(ir, OPCODE_TRUNC, result_dst, op[0]);
       break;
    case ir_unop_f2b:
    case ir_unop_i2b:
-      ir_to_mesa_emit_op2(ir, OPCODE_SNE, result_dst,
+      emit(ir, OPCODE_SNE, result_dst,
                          op[0], src_reg_for_float(0.0));
       break;
    case ir_unop_trunc:
-      ir_to_mesa_emit_op1(ir, OPCODE_TRUNC, result_dst, op[0]);
+      emit(ir, OPCODE_TRUNC, result_dst, op[0]);
       break;
    case ir_unop_ceil:
       op[0].negate = ~op[0].negate;
-      ir_to_mesa_emit_op1(ir, OPCODE_FLR, result_dst, op[0]);
+      emit(ir, OPCODE_FLR, result_dst, op[0]);
       result_src.negate = ~result_src.negate;
       break;
    case ir_unop_floor:
-      ir_to_mesa_emit_op1(ir, OPCODE_FLR, result_dst, op[0]);
+      emit(ir, OPCODE_FLR, result_dst, op[0]);
       break;
    case ir_unop_fract:
-      ir_to_mesa_emit_op1(ir, OPCODE_FRC, result_dst, op[0]);
+      emit(ir, OPCODE_FRC, result_dst, op[0]);
       break;
 
    case ir_binop_min:
-      ir_to_mesa_emit_op2(ir, OPCODE_MIN, result_dst, op[0], op[1]);
+      emit(ir, OPCODE_MIN, result_dst, op[0], op[1]);
       break;
    case ir_binop_max:
-      ir_to_mesa_emit_op2(ir, OPCODE_MAX, result_dst, op[0], op[1]);
+      emit(ir, OPCODE_MAX, result_dst, op[0], op[1]);
       break;
    case ir_binop_pow:
-      ir_to_mesa_emit_scalar_op2(ir, OPCODE_POW, result_dst, op[0], op[1]);
+      emit_scalar(ir, OPCODE_POW, result_dst, op[0], op[1]);
       break;
 
    case ir_unop_bit_not:
@@ -1426,7 +1359,7 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
 void
 ir_to_mesa_visitor::visit(ir_swizzle *ir)
 {
-   ir_to_mesa_src_reg src_reg;
+   src_reg src;
    int i;
    int swizzle[4];
 
@@ -1436,23 +1369,23 @@ ir_to_mesa_visitor::visit(ir_swizzle *ir)
     */
 
    ir->val->accept(this);
-   src_reg = this->result;
-   assert(src_reg.file != PROGRAM_UNDEFINED);
+   src = this->result;
+   assert(src.file != PROGRAM_UNDEFINED);
 
    for (i = 0; i < 4; i++) {
       if (i < ir->type->vector_elements) {
         switch (i) {
         case 0:
-           swizzle[i] = GET_SWZ(src_reg.swizzle, ir->mask.x);
+           swizzle[i] = GET_SWZ(src.swizzle, ir->mask.x);
            break;
         case 1:
-           swizzle[i] = GET_SWZ(src_reg.swizzle, ir->mask.y);
+           swizzle[i] = GET_SWZ(src.swizzle, ir->mask.y);
            break;
         case 2:
-           swizzle[i] = GET_SWZ(src_reg.swizzle, ir->mask.z);
+           swizzle[i] = GET_SWZ(src.swizzle, ir->mask.z);
            break;
         case 3:
-           swizzle[i] = GET_SWZ(src_reg.swizzle, ir->mask.w);
+           swizzle[i] = GET_SWZ(src.swizzle, ir->mask.w);
            break;
         }
       } else {
@@ -1463,12 +1396,9 @@ ir_to_mesa_visitor::visit(ir_swizzle *ir)
       }
    }
 
-   src_reg.swizzle = MAKE_SWIZZLE4(swizzle[0],
-                                  swizzle[1],
-                                  swizzle[2],
-                                  swizzle[3]);
+   src.swizzle = MAKE_SWIZZLE4(swizzle[0], swizzle[1], swizzle[2], swizzle[3]);
 
-   this->result = src_reg;
+   this->result = src;
 }
 
 void
@@ -1533,54 +1463,53 @@ ir_to_mesa_visitor::visit(ir_dereference_variable *ir)
       }
    }
 
-   this->result = ir_to_mesa_src_reg(entry->file, entry->index, var->type);
+   this->result = src_reg(entry->file, entry->index, var->type);
 }
 
 void
 ir_to_mesa_visitor::visit(ir_dereference_array *ir)
 {
    ir_constant *index;
-   ir_to_mesa_src_reg src_reg;
+   src_reg src;
    int element_size = type_size(ir->type);
 
    index = ir->array_index->constant_expression_value();
 
    ir->array->accept(this);
-   src_reg = this->result;
+   src = this->result;
 
    if (index) {
-      src_reg.index += index->value.i[0] * element_size;
+      src.index += index->value.i[0] * element_size;
    } else {
-      ir_to_mesa_src_reg array_base = this->result;
+      src_reg array_base = this->result;
       /* Variable index array dereference.  It eats the "vec4" of the
        * base of the array and an index that offsets the Mesa register
        * index.
        */
       ir->array_index->accept(this);
 
-      ir_to_mesa_src_reg index_reg;
+      src_reg index_reg;
 
       if (element_size == 1) {
         index_reg = this->result;
       } else {
         index_reg = get_temp(glsl_type::float_type);
 
-        ir_to_mesa_emit_op2(ir, OPCODE_MUL,
-                            ir_to_mesa_dst_reg_from_src(index_reg),
-                            this->result, src_reg_for_float(element_size));
+        emit(ir, OPCODE_MUL, dst_reg(index_reg),
+             this->result, src_reg_for_float(element_size));
       }
 
-      src_reg.reladdr = ralloc(mem_ctx, ir_to_mesa_src_reg);
-      memcpy(src_reg.reladdr, &index_reg, sizeof(index_reg));
+      src.reladdr = ralloc(mem_ctx, src_reg);
+      memcpy(src.reladdr, &index_reg, sizeof(index_reg));
    }
 
    /* If the type is smaller than a vec4, replicate the last channel out. */
    if (ir->type->is_scalar() || ir->type->is_vector())
-      src_reg.swizzle = swizzle_for_size(ir->type->vector_elements);
+      src.swizzle = swizzle_for_size(ir->type->vector_elements);
    else
-      src_reg.swizzle = SWIZZLE_NOOP;
+      src.swizzle = SWIZZLE_NOOP;
 
-   this->result = src_reg;
+   this->result = src;
 }
 
 void
@@ -1612,7 +1541,7 @@ ir_to_mesa_visitor::visit(ir_dereference_record *ir)
  * instead of potentially using a temporary like we might with the
  * ir_dereference handler.
  */
-static struct ir_to_mesa_dst_reg
+static dst_reg
 get_assignment_lhs(ir_dereference *ir, ir_to_mesa_visitor *v)
 {
    /* The LHS must be a dereference.  If the LHS is a variable indexed array
@@ -1629,7 +1558,7 @@ get_assignment_lhs(ir_dereference *ir, ir_to_mesa_visitor *v)
     * swizzles in it and write swizzles using writemask, though.
     */
    ir->accept(v);
-   return ir_to_mesa_dst_reg_from_src(v->result);
+   return dst_reg(v->result);
 }
 
 /**
@@ -1722,8 +1651,8 @@ ir_to_mesa_visitor::process_move_condition(ir_rvalue *ir)
 void
 ir_to_mesa_visitor::visit(ir_assignment *ir)
 {
-   struct ir_to_mesa_dst_reg l;
-   struct ir_to_mesa_src_reg r;
+   dst_reg l;
+   src_reg r;
    int i;
 
    ir->rhs->accept(this);
@@ -1779,15 +1708,13 @@ ir_to_mesa_visitor::visit(ir_assignment *ir)
 
    if (ir->condition) {
       const bool switch_order = this->process_move_condition(ir->condition);
-      ir_to_mesa_src_reg condition = this->result;
+      src_reg condition = this->result;
 
       for (i = 0; i < type_size(ir->lhs->type); i++) {
         if (switch_order) {
-           ir_to_mesa_emit_op3(ir, OPCODE_CMP, l,
-                               condition, ir_to_mesa_src_reg_from_dst(l), r);
+           emit(ir, OPCODE_CMP, l, condition, src_reg(l), r);
         } else {
-           ir_to_mesa_emit_op3(ir, OPCODE_CMP, l,
-                               condition, r, ir_to_mesa_src_reg_from_dst(l));
+           emit(ir, OPCODE_CMP, l, condition, r, src_reg(l));
         }
 
         l.index++;
@@ -1795,7 +1722,7 @@ ir_to_mesa_visitor::visit(ir_assignment *ir)
       }
    } else {
       for (i = 0; i < type_size(ir->lhs->type); i++) {
-        ir_to_mesa_emit_op1(ir, OPCODE_MOV, l, r);
+        emit(ir, OPCODE_MOV, l, r);
         l.index++;
         r.index++;
       }
@@ -1806,7 +1733,7 @@ ir_to_mesa_visitor::visit(ir_assignment *ir)
 void
 ir_to_mesa_visitor::visit(ir_constant *ir)
 {
-   ir_to_mesa_src_reg src_reg;
+   src_reg src;
    GLfloat stack_vals[4] = { 0 };
    GLfloat *values = stack_vals;
    unsigned int i;
@@ -1818,8 +1745,8 @@ ir_to_mesa_visitor::visit(ir_constant *ir)
     */
 
    if (ir->type->base_type == GLSL_TYPE_STRUCT) {
-      ir_to_mesa_src_reg temp_base = get_temp(ir->type);
-      ir_to_mesa_dst_reg temp = ir_to_mesa_dst_reg_from_src(temp_base);
+      src_reg temp_base = get_temp(ir->type);
+      dst_reg temp = dst_reg(temp_base);
 
       foreach_iter(exec_list_iterator, iter, ir->components) {
         ir_constant *field_value = (ir_constant *)iter.get();
@@ -1828,12 +1755,12 @@ ir_to_mesa_visitor::visit(ir_constant *ir)
         assert(size > 0);
 
         field_value->accept(this);
-        src_reg = this->result;
+        src = this->result;
 
         for (i = 0; i < (unsigned int)size; i++) {
-           ir_to_mesa_emit_op1(ir, OPCODE_MOV, temp, src_reg);
+           emit(ir, OPCODE_MOV, temp, src);
 
-           src_reg.index++;
+           src.index++;
            temp.index++;
         }
       }
@@ -1842,19 +1769,19 @@ ir_to_mesa_visitor::visit(ir_constant *ir)
    }
 
    if (ir->type->is_array()) {
-      ir_to_mesa_src_reg temp_base = get_temp(ir->type);
-      ir_to_mesa_dst_reg temp = ir_to_mesa_dst_reg_from_src(temp_base);
+      src_reg temp_base = get_temp(ir->type);
+      dst_reg temp = dst_reg(temp_base);
       int size = type_size(ir->type->fields.array);
 
       assert(size > 0);
 
       for (i = 0; i < ir->type->length; i++) {
         ir->array_elements[i]->accept(this);
-        src_reg = this->result;
+        src = this->result;
         for (int j = 0; j < size; j++) {
-           ir_to_mesa_emit_op1(ir, OPCODE_MOV, temp, src_reg);
+           emit(ir, OPCODE_MOV, temp, src);
 
-           src_reg.index++;
+           src.index++;
            temp.index++;
         }
       }
@@ -1863,19 +1790,19 @@ ir_to_mesa_visitor::visit(ir_constant *ir)
    }
 
    if (ir->type->is_matrix()) {
-      ir_to_mesa_src_reg mat = get_temp(ir->type);
-      ir_to_mesa_dst_reg mat_column = ir_to_mesa_dst_reg_from_src(mat);
+      src_reg mat = get_temp(ir->type);
+      dst_reg mat_column = dst_reg(mat);
 
       for (i = 0; i < ir->type->matrix_columns; i++) {
         assert(ir->type->base_type == GLSL_TYPE_FLOAT);
         values = &ir->value.f[i * ir->type->vector_elements];
 
-        src_reg = ir_to_mesa_src_reg(PROGRAM_CONSTANT, -1, NULL);
-        src_reg.index = _mesa_add_unnamed_constant(this->prog->Parameters,
+        src = src_reg(PROGRAM_CONSTANT, -1, NULL);
+        src.index = _mesa_add_unnamed_constant(this->prog->Parameters,
                                                values,
                                                ir->type->vector_elements,
-                                               &src_reg.swizzle);
-        ir_to_mesa_emit_op1(ir, OPCODE_MOV, mat_column, src_reg);
+                                               &src.swizzle);
+        emit(ir, OPCODE_MOV, mat_column, src);
 
         mat_column.index++;
       }
@@ -1884,7 +1811,7 @@ ir_to_mesa_visitor::visit(ir_constant *ir)
       return;
    }
 
-   src_reg.file = PROGRAM_CONSTANT;
+   src.file = PROGRAM_CONSTANT;
    switch (ir->type->base_type) {
    case GLSL_TYPE_FLOAT:
       values = &ir->value.f[0];
@@ -1908,7 +1835,7 @@ ir_to_mesa_visitor::visit(ir_constant *ir)
       assert(!"Non-float/uint/int/bool constant");
    }
 
-   this->result = ir_to_mesa_src_reg(PROGRAM_CONSTANT, -1, ir->type);
+   this->result = src_reg(PROGRAM_CONSTANT, -1, ir->type);
    this->result.index = _mesa_add_unnamed_constant(this->prog->Parameters,
                                                   values,
                                                   ir->type->vector_elements,
@@ -1950,7 +1877,7 @@ ir_to_mesa_visitor::get_function_signature(ir_function_signature *sig)
    if (!sig->return_type->is_void()) {
       entry->return_reg = get_temp(sig->return_type);
    } else {
-      entry->return_reg = ir_to_mesa_undef;
+      entry->return_reg = undef_src;
    }
 
    this->function_signatures.push_tail(entry);
@@ -1977,9 +1904,9 @@ ir_to_mesa_visitor::visit(ir_call *ir)
         assert(storage);
 
         param_rval->accept(this);
-        ir_to_mesa_src_reg r = this->result;
+        src_reg r = this->result;
 
-        ir_to_mesa_dst_reg l;
+        dst_reg l;
         l.file = storage->file;
         l.index = storage->index;
         l.reladdr = NULL;
@@ -1987,7 +1914,7 @@ ir_to_mesa_visitor::visit(ir_call *ir)
         l.cond_mask = COND_TR;
 
         for (i = 0; i < type_size(param->type); i++) {
-           ir_to_mesa_emit_op1(ir, OPCODE_MOV, l, r);
+           emit(ir, OPCODE_MOV, l, r);
            l.index++;
            r.index++;
         }
@@ -1998,8 +1925,7 @@ ir_to_mesa_visitor::visit(ir_call *ir)
    assert(!sig_iter.has_next());
 
    /* Emit call instruction */
-   call_inst = ir_to_mesa_emit_op1(ir, OPCODE_CAL,
-                                  ir_to_mesa_undef_dst, ir_to_mesa_undef);
+   call_inst = emit(ir, OPCODE_CAL);
    call_inst->function = entry;
 
    /* Process out parameters. */
@@ -2013,7 +1939,7 @@ ir_to_mesa_visitor::visit(ir_call *ir)
         variable_storage *storage = find_variable_storage(param);
         assert(storage);
 
-        ir_to_mesa_src_reg r;
+        src_reg r;
         r.file = storage->file;
         r.index = storage->index;
         r.reladdr = NULL;
@@ -2021,10 +1947,10 @@ ir_to_mesa_visitor::visit(ir_call *ir)
         r.negate = 0;
 
         param_rval->accept(this);
-        ir_to_mesa_dst_reg l = ir_to_mesa_dst_reg_from_src(this->result);
+        dst_reg l = dst_reg(this->result);
 
         for (i = 0; i < type_size(param->type); i++) {
-           ir_to_mesa_emit_op1(ir, OPCODE_MOV, l, r);
+           emit(ir, OPCODE_MOV, l, r);
            l.index++;
            r.index++;
         }
@@ -2041,8 +1967,8 @@ ir_to_mesa_visitor::visit(ir_call *ir)
 void
 ir_to_mesa_visitor::visit(ir_texture *ir)
 {
-   ir_to_mesa_src_reg result_src, coord, lod_info, projector;
-   ir_to_mesa_dst_reg result_dst, coord_dst;
+   src_reg result_src, coord, lod_info, projector;
+   dst_reg result_dst, coord_dst;
    ir_to_mesa_instruction *inst = NULL;
    prog_opcode opcode = OPCODE_NOP;
 
@@ -2054,9 +1980,8 @@ ir_to_mesa_visitor::visit(ir_texture *ir)
     * handle cleaning up our mess in that case.
     */
    coord = get_temp(glsl_type::vec4_type);
-   coord_dst = ir_to_mesa_dst_reg_from_src(coord);
-   ir_to_mesa_emit_op1(ir, OPCODE_MOV, coord_dst,
-                      this->result);
+   coord_dst = dst_reg(coord);
+   emit(ir, OPCODE_MOV, coord_dst, this->result);
 
    if (ir->projector) {
       ir->projector->accept(this);
@@ -2067,7 +1992,7 @@ ir_to_mesa_visitor::visit(ir_texture *ir)
     * the actual storage for the result here, instead.
     */
    result_src = get_temp(glsl_type::vec4_type);
-   result_dst = ir_to_mesa_dst_reg_from_src(result_src);
+   result_dst = dst_reg(result_src);
 
    switch (ir->op) {
    case ir_tex:
@@ -2093,11 +2018,11 @@ ir_to_mesa_visitor::visit(ir_texture *ir)
       if (opcode == OPCODE_TEX) {
         /* Slot the projector in as the last component of the coord. */
         coord_dst.writemask = WRITEMASK_W;
-        ir_to_mesa_emit_op1(ir, OPCODE_MOV, coord_dst, projector);
+        emit(ir, OPCODE_MOV, coord_dst, projector);
         coord_dst.writemask = WRITEMASK_XYZW;
         opcode = OPCODE_TXP;
       } else {
-        ir_to_mesa_src_reg coord_w = coord;
+        src_reg coord_w = coord;
         coord_w.swizzle = SWIZZLE_WWWW;
 
         /* For the other TEX opcodes there's no projective version
@@ -2105,34 +2030,58 @@ ir_to_mesa_visitor::visit(ir_texture *ir)
          * projective divide now.
          */
         coord_dst.writemask = WRITEMASK_W;
-        ir_to_mesa_emit_op1(ir, OPCODE_RCP, coord_dst, projector);
+        emit(ir, OPCODE_RCP, coord_dst, projector);
+
+        /* In the case where we have to project the coordinates "by hand,"
+         * the shadow comparitor value must also be projected.
+         */
+        src_reg tmp_src = coord;
+        if (ir->shadow_comparitor) {
+           /* Slot the shadow value in as the second to last component of the
+            * coord.
+            */
+           ir->shadow_comparitor->accept(this);
+
+           tmp_src = get_temp(glsl_type::vec4_type);
+           dst_reg tmp_dst = dst_reg(tmp_src);
+
+           tmp_dst.writemask = WRITEMASK_Z;
+           emit(ir, OPCODE_MOV, tmp_dst, this->result);
+
+           tmp_dst.writemask = WRITEMASK_XY;
+           emit(ir, OPCODE_MOV, tmp_dst, coord);
+        }
 
         coord_dst.writemask = WRITEMASK_XYZ;
-        ir_to_mesa_emit_op2(ir, OPCODE_MUL, coord_dst, coord, coord_w);
+        emit(ir, OPCODE_MUL, coord_dst, tmp_src, coord_w);
 
         coord_dst.writemask = WRITEMASK_XYZW;
         coord.swizzle = SWIZZLE_XYZW;
       }
    }
 
-   if (ir->shadow_comparitor) {
+   /* If projection is done and the opcode is not OPCODE_TXP, then the shadow
+    * comparitor was put in the correct place (and projected) by the code,
+    * above, that handles by-hand projection.
+    */
+   if (ir->shadow_comparitor && (!ir->projector || opcode == OPCODE_TXP)) {
       /* Slot the shadow value in as the second to last component of the
        * coord.
        */
       ir->shadow_comparitor->accept(this);
       coord_dst.writemask = WRITEMASK_Z;
-      ir_to_mesa_emit_op1(ir, OPCODE_MOV, coord_dst, this->result);
+      emit(ir, OPCODE_MOV, coord_dst, this->result);
       coord_dst.writemask = WRITEMASK_XYZW;
    }
 
    if (opcode == OPCODE_TXL || opcode == OPCODE_TXB) {
       /* Mesa IR stores lod or lod bias in the last channel of the coords. */
       coord_dst.writemask = WRITEMASK_W;
-      ir_to_mesa_emit_op1(ir, OPCODE_MOV, coord_dst, lod_info);
+      emit(ir, OPCODE_MOV, coord_dst, lod_info);
       coord_dst.writemask = WRITEMASK_XYZW;
    }
 
-   inst = ir_to_mesa_emit_op1(ir, opcode, result_dst, coord);
+   inst = emit(ir, opcode, result_dst, coord);
 
    if (ir->shadow_comparitor)
       inst->tex_shadow = GL_TRUE;
@@ -2175,24 +2124,24 @@ void
 ir_to_mesa_visitor::visit(ir_return *ir)
 {
    if (ir->get_value()) {
-      ir_to_mesa_dst_reg l;
+      dst_reg l;
       int i;
 
       assert(current_function);
 
       ir->get_value()->accept(this);
-      ir_to_mesa_src_reg r = this->result;
+      src_reg r = this->result;
 
-      l = ir_to_mesa_dst_reg_from_src(current_function->return_reg);
+      l = dst_reg(current_function->return_reg);
 
       for (i = 0; i < type_size(current_function->sig->return_type); i++) {
-        ir_to_mesa_emit_op1(ir, OPCODE_MOV, l, r);
+        emit(ir, OPCODE_MOV, l, r);
         l.index++;
         r.index++;
       }
    }
 
-   ir_to_mesa_emit_op0(ir, OPCODE_RET);
+   emit(ir, OPCODE_RET);
 }
 
 void
@@ -2203,9 +2152,9 @@ ir_to_mesa_visitor::visit(ir_discard *ir)
    if (ir->condition) {
       ir->condition->accept(this);
       this->result.negate = ~this->result.negate;
-      ir_to_mesa_emit_op1(ir, OPCODE_KIL, ir_to_mesa_undef_dst, this->result);
+      emit(ir, OPCODE_KIL, undef_dst, this->result);
    } else {
-      ir_to_mesa_emit_op0(ir, OPCODE_KIL_NV);
+      emit(ir, OPCODE_KIL_NV);
    }
 
    fp->UsesKill = GL_TRUE;
@@ -2230,19 +2179,15 @@ ir_to_mesa_visitor::visit(ir_if *ir)
        * have something to set cond_update on.
        */
       if (cond_inst == prev_inst) {
-        ir_to_mesa_src_reg temp = get_temp(glsl_type::bool_type);
-        cond_inst = ir_to_mesa_emit_op1(ir->condition, OPCODE_MOV,
-                                        ir_to_mesa_dst_reg_from_src(temp),
-                                        result);
+        src_reg temp = get_temp(glsl_type::bool_type);
+        cond_inst = emit(ir->condition, OPCODE_MOV, dst_reg(temp), result);
       }
       cond_inst->cond_update = GL_TRUE;
 
-      if_inst = ir_to_mesa_emit_op0(ir->condition, OPCODE_IF);
-      if_inst->dst_reg.cond_mask = COND_NE;
+      if_inst = emit(ir->condition, OPCODE_IF);
+      if_inst->dst.cond_mask = COND_NE;
    } else {
-      if_inst = ir_to_mesa_emit_op1(ir->condition,
-                                   OPCODE_IF, ir_to_mesa_undef_dst,
-                                   this->result);
+      if_inst = emit(ir->condition, OPCODE_IF, undef_dst, this->result);
    }
 
    this->instructions.push_tail(if_inst);
@@ -2250,12 +2195,11 @@ ir_to_mesa_visitor::visit(ir_if *ir)
    visit_exec_list(&ir->then_instructions, this);
 
    if (!ir->else_instructions.is_empty()) {
-      else_inst = ir_to_mesa_emit_op0(ir->condition, OPCODE_ELSE);
+      else_inst = emit(ir->condition, OPCODE_ELSE);
       visit_exec_list(&ir->else_instructions, this);
    }
 
-   if_inst = ir_to_mesa_emit_op1(ir->condition, OPCODE_ENDIF,
-                                ir_to_mesa_undef_dst, ir_to_mesa_undef);
+   if_inst = emit(ir->condition, OPCODE_ENDIF);
 }
 
 ir_to_mesa_visitor::ir_to_mesa_visitor()
@@ -2273,7 +2217,7 @@ ir_to_mesa_visitor::~ir_to_mesa_visitor()
 }
 
 static struct prog_src_register
-mesa_src_reg_from_ir_src_reg(ir_to_mesa_src_reg reg)
+mesa_src_reg_from_ir_src_reg(src_reg reg)
 {
    struct prog_src_register mesa_reg;
 
@@ -2730,17 +2674,17 @@ ir_to_mesa_visitor::copy_propagate(void)
    foreach_iter(exec_list_iterator, iter, this->instructions) {
       ir_to_mesa_instruction *inst = (ir_to_mesa_instruction *)iter.get();
 
-      assert(inst->dst_reg.file != PROGRAM_TEMPORARY
-            || inst->dst_reg.index < this->next_temp);
+      assert(inst->dst.file != PROGRAM_TEMPORARY
+            || inst->dst.index < this->next_temp);
 
       /* First, do any copy propagation possible into the src regs. */
       for (int r = 0; r < 3; r++) {
         ir_to_mesa_instruction *first = NULL;
         bool good = true;
-        int acp_base = inst->src_reg[r].index * 4;
+        int acp_base = inst->src[r].index * 4;
 
-        if (inst->src_reg[r].file != PROGRAM_TEMPORARY ||
-            inst->src_reg[r].reladdr)
+        if (inst->src[r].file != PROGRAM_TEMPORARY ||
+            inst->src[r].reladdr)
            continue;
 
         /* See if we can find entries in the ACP consisting of MOVs
@@ -2748,7 +2692,7 @@ ir_to_mesa_visitor::copy_propagate(void)
          * of this src register reference.
          */
         for (int i = 0; i < 4; i++) {
-           int src_chan = GET_SWZ(inst->src_reg[r].swizzle, i);
+           int src_chan = GET_SWZ(inst->src[r].swizzle, i);
            ir_to_mesa_instruction *copy_chan = acp[acp_base + src_chan];
 
            if (!copy_chan) {
@@ -2761,8 +2705,8 @@ ir_to_mesa_visitor::copy_propagate(void)
            if (!first) {
               first = copy_chan;
            } else {
-              if (first->src_reg[0].file != copy_chan->src_reg[0].file ||
-                  first->src_reg[0].index != copy_chan->src_reg[0].index) {
+              if (first->src[0].file != copy_chan->src[0].file ||
+                  first->src[0].index != copy_chan->src[0].index) {
                  good = false;
                  break;
               }
@@ -2773,17 +2717,17 @@ ir_to_mesa_visitor::copy_propagate(void)
            /* We've now validated that we can copy-propagate to
             * replace this src register reference.  Do it.
             */
-           inst->src_reg[r].file = first->src_reg[0].file;
-           inst->src_reg[r].index = first->src_reg[0].index;
+           inst->src[r].file = first->src[0].file;
+           inst->src[r].index = first->src[0].index;
 
            int swizzle = 0;
            for (int i = 0; i < 4; i++) {
-              int src_chan = GET_SWZ(inst->src_reg[r].swizzle, i);
+              int src_chan = GET_SWZ(inst->src[r].swizzle, i);
               ir_to_mesa_instruction *copy_inst = acp[acp_base + src_chan];
-              swizzle |= (GET_SWZ(copy_inst->src_reg[0].swizzle, src_chan) <<
+              swizzle |= (GET_SWZ(copy_inst->src[0].swizzle, src_chan) <<
                           (3 * i));
            }
-           inst->src_reg[r].swizzle = swizzle;
+           inst->src[r].swizzle = swizzle;
         }
       }
 
@@ -2820,13 +2764,13 @@ ir_to_mesa_visitor::copy_propagate(void)
         /* Continuing the block, clear any written channels from
          * the ACP.
          */
-        if (inst->dst_reg.file == PROGRAM_TEMPORARY && inst->dst_reg.reladdr) {
+        if (inst->dst.file == PROGRAM_TEMPORARY && inst->dst.reladdr) {
            /* Any temporary might be written, so no copy propagation
             * across this instruction.
             */
            memset(acp, 0, sizeof(*acp) * this->next_temp * 4);
-        } else if (inst->dst_reg.file == PROGRAM_OUTPUT &&
-                   inst->dst_reg.reladdr) {
+        } else if (inst->dst.file == PROGRAM_OUTPUT &&
+                   inst->dst.reladdr) {
            /* Any output might be written, so no copy propagation
             * from outputs across this instruction.
             */
@@ -2835,17 +2779,17 @@ ir_to_mesa_visitor::copy_propagate(void)
                  if (!acp[4 * r + c])
                     continue;
 
-                 if (acp[4 * r + c]->src_reg[0].file == PROGRAM_OUTPUT)
+                 if (acp[4 * r + c]->src[0].file == PROGRAM_OUTPUT)
                     acp[4 * r + c] = NULL;
               }
            }
-        } else if (inst->dst_reg.file == PROGRAM_TEMPORARY ||
-                   inst->dst_reg.file == PROGRAM_OUTPUT) {
+        } else if (inst->dst.file == PROGRAM_TEMPORARY ||
+                   inst->dst.file == PROGRAM_OUTPUT) {
            /* Clear where it's used as dst. */
-           if (inst->dst_reg.file == PROGRAM_TEMPORARY) {
+           if (inst->dst.file == PROGRAM_TEMPORARY) {
               for (int c = 0; c < 4; c++) {
-                 if (inst->dst_reg.writemask & (1 << c)) {
-                    acp[4 * inst->dst_reg.index + c] = NULL;
+                 if (inst->dst.writemask & (1 << c)) {
+                    acp[4 * inst->dst.index + c] = NULL;
                  }
               }
            }
@@ -2856,11 +2800,11 @@ ir_to_mesa_visitor::copy_propagate(void)
                  if (!acp[4 * r + c])
                     continue;
 
-                 int src_chan = GET_SWZ(acp[4 * r + c]->src_reg[0].swizzle, c);
+                 int src_chan = GET_SWZ(acp[4 * r + c]->src[0].swizzle, c);
 
-                 if (acp[4 * r + c]->src_reg[0].file == inst->dst_reg.file &&
-                     acp[4 * r + c]->src_reg[0].index == inst->dst_reg.index &&
-                     inst->dst_reg.writemask & (1 << src_chan))
+                 if (acp[4 * r + c]->src[0].file == inst->dst.file &&
+                     acp[4 * r + c]->src[0].index == inst->dst.index &&
+                     inst->dst.writemask & (1 << src_chan))
                  {
                     acp[4 * r + c] = NULL;
                  }
@@ -2872,15 +2816,15 @@ ir_to_mesa_visitor::copy_propagate(void)
 
       /* If this is a copy, add it to the ACP. */
       if (inst->op == OPCODE_MOV &&
-         inst->dst_reg.file == PROGRAM_TEMPORARY &&
-         !inst->dst_reg.reladdr &&
+         inst->dst.file == PROGRAM_TEMPORARY &&
+         !inst->dst.reladdr &&
          !inst->saturate &&
-         !inst->src_reg[0].reladdr &&
-         !inst->src_reg[0].negate) {
+         !inst->src[0].reladdr &&
+         !inst->src[0].negate) {
         for (int i = 0; i < 4; i++) {
-           if (inst->dst_reg.writemask & (1 << i)) {
-              acp[4 * inst->dst_reg.index + i] = inst;
-              acp_level[4 * inst->dst_reg.index + i] = level;
+           if (inst->dst.writemask & (1 << i)) {
+              acp[4 * inst->dst.index + i] = inst;
+              acp_level[4 * inst->dst.index + i] = level;
            }
         }
       }
@@ -2945,7 +2889,7 @@ get_mesa_program(struct gl_context *ctx,
 
    /* Emit Mesa IR for main(). */
    visit_exec_list(shader->ir, &v);
-   v.ir_to_mesa_emit_op0(NULL, OPCODE_END);
+   v.emit(NULL, OPCODE_END);
 
    /* Now emit bodies for any functions that were used. */
    do {
@@ -2957,7 +2901,7 @@ get_mesa_program(struct gl_context *ctx,
         if (!entry->bgn_inst) {
            v.current_function = entry;
 
-           entry->bgn_inst = v.ir_to_mesa_emit_op0(NULL, OPCODE_BGNSUB);
+           entry->bgn_inst = v.emit(NULL, OPCODE_BGNSUB);
            entry->bgn_inst->function = entry;
 
            visit_exec_list(&entry->sig->body, &v);
@@ -2965,10 +2909,10 @@ get_mesa_program(struct gl_context *ctx,
            ir_to_mesa_instruction *last;
            last = (ir_to_mesa_instruction *)v.instructions.get_tail();
            if (last->op != OPCODE_RET)
-              v.ir_to_mesa_emit_op0(NULL, OPCODE_RET);
+              v.emit(NULL, OPCODE_RET);
 
            ir_to_mesa_instruction *end;
-           end = v.ir_to_mesa_emit_op0(NULL, OPCODE_ENDSUB);
+           end = v.emit(NULL, OPCODE_ENDSUB);
            end->function = entry;
 
            progress = GL_TRUE;
@@ -3002,14 +2946,14 @@ get_mesa_program(struct gl_context *ctx,
       mesa_inst->CondUpdate = inst->cond_update;
       if (inst->saturate)
         mesa_inst->SaturateMode = SATURATE_ZERO_ONE;
-      mesa_inst->DstReg.File = inst->dst_reg.file;
-      mesa_inst->DstReg.Index = inst->dst_reg.index;
-      mesa_inst->DstReg.CondMask = inst->dst_reg.cond_mask;
-      mesa_inst->DstReg.WriteMask = inst->dst_reg.writemask;
-      mesa_inst->DstReg.RelAddr = inst->dst_reg.reladdr != NULL;
-      mesa_inst->SrcReg[0] = mesa_src_reg_from_ir_src_reg(inst->src_reg[0]);
-      mesa_inst->SrcReg[1] = mesa_src_reg_from_ir_src_reg(inst->src_reg[1]);
-      mesa_inst->SrcReg[2] = mesa_src_reg_from_ir_src_reg(inst->src_reg[2]);
+      mesa_inst->DstReg.File = inst->dst.file;
+      mesa_inst->DstReg.Index = inst->dst.index;
+      mesa_inst->DstReg.CondMask = inst->dst.cond_mask;
+      mesa_inst->DstReg.WriteMask = inst->dst.writemask;
+      mesa_inst->DstReg.RelAddr = inst->dst.reladdr != NULL;
+      mesa_inst->SrcReg[0] = mesa_src_reg_from_ir_src_reg(inst->src[0]);
+      mesa_inst->SrcReg[1] = mesa_src_reg_from_ir_src_reg(inst->src[1]);
+      mesa_inst->SrcReg[2] = mesa_src_reg_from_ir_src_reg(inst->src[2]);
       mesa_inst->TexSrcUnit = inst->sampler;
       mesa_inst->TexSrcTarget = inst->tex_target;
       mesa_inst->TexShadow = inst->tex_shadow;
index 96971f2eda48fe9f6112c11a4b0c6fda2135684c..11debc485eb4c23ca8116011d19faab6f645ba6e 100644 (file)
@@ -74,6 +74,17 @@ get_src_arg_mask(const struct prog_instruction *inst,
       case OPCODE_MAD:
       case OPCODE_MUL:
       case OPCODE_SUB:
+      case OPCODE_CMP:
+      case OPCODE_FLR:
+      case OPCODE_FRC:
+      case OPCODE_LRP:
+      case OPCODE_SEQ:
+      case OPCODE_SGE:
+      case OPCODE_SGT:
+      case OPCODE_SLE:
+      case OPCODE_SLT:
+      case OPCODE_SNE:
+      case OPCODE_SSG:
          channel_mask = inst->DstReg.WriteMask & dst_mask;
          break;
       case OPCODE_RCP:
@@ -937,24 +948,35 @@ update_interval(GLint intBegin[], GLint intEnd[],
                GLuint index, GLuint ic)
 {
    int i;
+   GLuint begin = ic;
+   GLuint end = ic;
 
    /* If the register is used in a loop, extend its lifetime through the end
     * of the outermost loop that doesn't contain its definition.
     */
    for (i = 0; i < loopStackDepth; i++) {
       if (intBegin[index] < loopStack[i].Start) {
-        ic = loopStack[i].End;
+        end = loopStack[i].End;
         break;
       }
    }
 
+   /* Variables that are live at the end of a loop will also be live at the
+    * beginning, so an instruction inside of a loop should have its live
+    * interval begin at the start of the outermost loop.
+    */
+   if (loopStackDepth > 0 && ic > loopStack[0].Start && ic < loopStack[0].End) {
+      begin = loopStack[0].Start;
+   }
+
    ASSERT(index < REG_ALLOCATE_MAX_PROGRAM_TEMPS);
    if (intBegin[index] == -1) {
       ASSERT(intEnd[index] == -1);
-      intBegin[index] = intEnd[index] = ic;
+      intBegin[index] = begin;
+      intEnd[index] = end;
    }
    else {
-      intEnd[index] = ic;
+      intEnd[index] = end;
    }
 }
 
@@ -1224,6 +1246,83 @@ print_it(struct gl_context *ctx, struct gl_program *program, const char *txt) {
 }
 #endif
 
+/**
+ * This pass replaces CMP T0, T1 T2 T0 with MOV T0, T2 when the CMP
+ * instruction is the first instruction to write to register T0.  The are
+ * several lowering passes done in GLSL IR (e.g. branches and
+ * relative addressing) that create a large number of conditional assignments
+ * that ir_to_mesa converts to CMP instructions like the one mentioned above.
+ *
+ * Here is why this conversion is safe:
+ * CMP T0, T1 T2 T0 can be expanded to:
+ * if (T1 < 0.0)
+ *     MOV T0, T2;
+ * else
+ *     MOV T0, T0;
+ *
+ * If (T1 < 0.0) evaluates to true then our replacement MOV T0, T2 is the same
+ * as the original program.  If (T1 < 0.0) evaluates to false, executing
+ * MOV T0, T0 will store a garbage value in T0 since T0 is uninitialized.
+ * Therefore, it doesn't matter that we are replacing MOV T0, T0 with MOV T0, T2
+ * because any instruction that was going to read from T0 after this was going
+ * to read a garbage value anyway.
+ */
+static void
+_mesa_simplify_cmp(struct gl_program * program)
+{
+   GLuint tempWrites[REG_ALLOCATE_MAX_PROGRAM_TEMPS];
+   GLuint outputWrites[MAX_PROGRAM_OUTPUTS];
+   GLuint i;
+
+   if (dbg) {
+      printf("Optimize: Begin reads without writes\n");
+      _mesa_print_program(program);
+   }
+
+   for (i = 0; i < REG_ALLOCATE_MAX_PROGRAM_TEMPS; i++) {
+      tempWrites[i] = 0;
+   }
+
+   for (i = 0; i < MAX_PROGRAM_OUTPUTS; i++) {
+      outputWrites[i] = 0;
+   }
+
+   for (i = 0; i < program->NumInstructions; i++) {
+      struct prog_instruction *inst = program->Instructions + i;
+      GLuint prevWriteMask;
+
+      /* Give up if we encounter relative addressing or flow control. */
+      if (_mesa_is_flow_control_opcode(inst->Opcode) || inst->DstReg.RelAddr) {
+         return;
+      }
+
+      if (inst->DstReg.File == PROGRAM_OUTPUT) {
+         assert(inst->DstReg.Index < MAX_PROGRAM_OUTPUTS);
+         prevWriteMask = outputWrites[inst->DstReg.Index];
+         outputWrites[inst->DstReg.Index] |= inst->DstReg.WriteMask;
+      } else if (inst->DstReg.File == PROGRAM_TEMPORARY) {
+         assert(inst->DstReg.Index < REG_ALLOCATE_MAX_PROGRAM_TEMPS);
+         prevWriteMask = tempWrites[inst->DstReg.Index];
+         tempWrites[inst->DstReg.Index] |= inst->DstReg.WriteMask;
+      }
+
+      /* For a CMP to be considered a conditional write, the destination
+       * register and source register two must be the same. */
+      if (inst->Opcode == OPCODE_CMP
+          && !(inst->DstReg.WriteMask & prevWriteMask)
+          && inst->SrcReg[2].File == inst->DstReg.File
+          && inst->SrcReg[2].Index == inst->DstReg.Index
+          && inst->DstReg.WriteMask == get_src_arg_mask(inst, 2, NO_MASK)) {
+
+         inst->Opcode = OPCODE_MOV;
+         inst->SrcReg[0] = inst->SrcReg[1];
+      }
+   }
+   if (dbg) {
+      printf("Optimize: End reads without writes\n");
+      _mesa_print_program(program);
+   }
+}
 
 /**
  * Apply optimizations to the given program to eliminate unnecessary
@@ -1234,6 +1333,7 @@ _mesa_optimize_program(struct gl_context *ctx, struct gl_program *program)
 {
    GLboolean any_change;
 
+   _mesa_simplify_cmp(program);
    /* Stop when no modifications were output */
    do {
       any_change = GL_FALSE;
index c310acb01d4fdc619c4b9c47ebabb63ae9a2991a..1fd26f44d56ec7ab88e7725033ed13abed40822d 100644 (file)
@@ -237,11 +237,17 @@ _mesa_fetch_state(struct gl_context *ctx, const gl_state_index state[],
       {
          /* state[1] is the texture unit */
          const GLuint unit = (GLuint) state[1];
-         COPY_4V(value, ctx->Texture.Unit[unit].EnvColor);
+         if(ctx->Color._ClampFragmentColor)
+            COPY_4V(value, ctx->Texture.Unit[unit].EnvColor);
+         else
+            COPY_4V(value, ctx->Texture.Unit[unit].EnvColorUnclamped);
       }
       return;
    case STATE_FOG_COLOR:
-      COPY_4V(value, ctx->Fog.Color);
+      if(ctx->Color._ClampFragmentColor)
+         COPY_4V(value, ctx->Fog.Color);
+      else
+         COPY_4V(value, ctx->Fog.ColorUnclamped);
       return;
    case STATE_FOG_PARAMS:
       value[0] = ctx->Fog.Density;
@@ -399,6 +405,22 @@ _mesa_fetch_state(struct gl_context *ctx, const gl_state_index state[],
          }
          return;
 
+      case STATE_CURRENT_ATTRIB_MAYBE_VP_CLAMPED:
+         {
+            const GLuint idx = (GLuint) state[2];
+            if(ctx->Light._ClampVertexColor &&
+               (idx == VERT_ATTRIB_COLOR0 ||
+                idx == VERT_ATTRIB_COLOR1)) {
+               value[0] = CLAMP(ctx->Current.Attrib[idx][0], 0.0f, 1.0f);
+               value[1] = CLAMP(ctx->Current.Attrib[idx][1], 0.0f, 1.0f);
+               value[2] = CLAMP(ctx->Current.Attrib[idx][2], 0.0f, 1.0f);
+               value[3] = CLAMP(ctx->Current.Attrib[idx][3], 0.0f, 1.0f);
+            }
+            else
+               COPY_4V(value, ctx->Current.Attrib[idx]);
+         }
+         return;
+
       case STATE_NORMAL_SCALE:
          ASSIGN_4V(value, 
                    ctx->_ModelViewInvScale, 
@@ -560,7 +582,7 @@ _mesa_fetch_state(struct gl_context *ctx, const gl_state_index state[],
                value[0] =
                value[1] =
                value[2] =
-               value[3] = texObj->CompareFailValue;
+               value[3] = texObj->Sampler.CompareFailValue;
             }
          }
          return;
@@ -649,10 +671,12 @@ _mesa_program_state_flags(const gl_state_index state[STATE_LENGTH])
       return _NEW_LIGHT;
 
    case STATE_TEXGEN:
-   case STATE_TEXENV_COLOR:
       return _NEW_TEXTURE;
+   case STATE_TEXENV_COLOR:
+      return _NEW_TEXTURE | _NEW_BUFFERS | _NEW_FRAG_CLAMP;
 
    case STATE_FOG_COLOR:
+      return _NEW_FOG | _NEW_BUFFERS | _NEW_FRAG_CLAMP;
    case STATE_FOG_PARAMS:
       return _NEW_FOG;
 
@@ -688,6 +712,8 @@ _mesa_program_state_flags(const gl_state_index state[STATE_LENGTH])
       switch (state[1]) {
       case STATE_CURRENT_ATTRIB:
          return _NEW_CURRENT_ATTRIB;
+      case STATE_CURRENT_ATTRIB_MAYBE_VP_CLAMPED:
+         return _NEW_CURRENT_ATTRIB | _NEW_LIGHT | _NEW_BUFFERS;
 
       case STATE_NORMAL_SCALE:
          return _NEW_MODELVIEW;
index f2407af9c8758cacb503ac255d782be06661b2f4..9fe8d81b3ddb93a9177f161c72355ef830bc15cf 100644 (file)
@@ -106,6 +106,7 @@ typedef enum gl_state_index_ {
 
    STATE_INTERNAL,             /* Mesa additions */
    STATE_CURRENT_ATTRIB,        /* ctx->Current vertex attrib value */
+   STATE_CURRENT_ATTRIB_MAYBE_VP_CLAMPED,        /* ctx->Current vertex attrib value after passthrough vertex processing */
    STATE_NORMAL_SCALE,
    STATE_TEXRECT_SCALE,
    STATE_FOG_PARAMS_OPTIMIZED,  /* for faster fog calc */
index 79034ab26f29fcefad6c5586a66c0af511365f6c..78efca9f122bb2b136073f21191a8655a67fbfdb 100644 (file)
@@ -75,10 +75,10 @@ _mesa_init_program(struct gl_context *ctx)
    ASSERT(ctx->Const.FragmentProgram.MaxAddressOffset <= (1 << INST_INDEX_BITS));
 
    /* If this fails, increase prog_instruction::TexSrcUnit size */
-   ASSERT(MAX_TEXTURE_UNITS < (1 << 5));
+   ASSERT(MAX_TEXTURE_UNITS <= (1 << 5));
 
    /* If this fails, increase prog_instruction::TexSrcTarget size */
-   ASSERT(NUM_TEXTURE_TARGETS < (1 << 3));
+   ASSERT(NUM_TEXTURE_TARGETS <= (1 << 3));
 
    ctx->Program.ErrorPos = -1;
    ctx->Program.ErrorString = _mesa_strdup("");
@@ -557,7 +557,6 @@ _mesa_clone_program(struct gl_context *ctx, const struct gl_program *prog)
          const struct gl_fragment_program *fp
             = (const struct gl_fragment_program *) prog;
          struct gl_fragment_program *fpc = (struct gl_fragment_program *) clone;
-         fpc->FogOption = fp->FogOption;
          fpc->UsesKill = fp->UsesKill;
          fpc->OriginUpperLeft = fp->OriginUpperLeft;
          fpc->PixelCenterInteger = fp->PixelCenterInteger;
index 19aa8ccdb534126a076eaa9d13967a531d55c070..b35bc5a7caeb6007e517da42880b9c418b3dfd06 100644 (file)
@@ -2064,6 +2064,34 @@ optResultFaceType:
              ? VERT_RESULT_COL0
              : FRAG_RESULT_COLOR;
        }
+       | '[' INTEGER ']'
+       {
+          if (state->mode == ARB_vertex) {
+             yyerror(& @1, state, "invalid program result name");
+             YYERROR;
+          } else {
+             if (!state->option.DrawBuffers) {
+                /* From the ARB_draw_buffers spec (same text exists
+                 * for ATI_draw_buffers):
+                 *
+                 *     If this option is not specified, a fragment
+                 *     program that attempts to bind
+                 *     "result.color[n]" will fail to load, and only
+                 *     "result.color" will be allowed.
+                 */
+                yyerror(& @1, state,
+                        "result.color[] used without "
+                        "`OPTION ARB_draw_buffers' or "
+                        "`OPTION ATI_draw_buffers'");
+                YYERROR;
+             } else if ($2 >= state->MaxDrawBuffers) {
+                yyerror(& @1, state,
+                        "result.color[] exceeds MAX_DRAW_BUFFERS_ARB");
+                YYERROR;
+             }
+             $$ = FRAG_RESULT_DATA0 + $2;
+          }
+       }
        | FRONT
        {
           if (state->mode == ARB_vertex) {
@@ -2681,6 +2709,7 @@ _mesa_parse_arb_program(struct gl_context *ctx, GLenum target, const GLubyte *st
    state->MaxClipPlanes = ctx->Const.MaxClipPlanes;
    state->MaxLights = ctx->Const.MaxLights;
    state->MaxProgramMatrices = ctx->Const.MaxProgramMatrices;
+   state->MaxDrawBuffers = ctx->Const.MaxDrawBuffers;
 
    state->state_param_enum = (target == GL_VERTEX_PROGRAM_ARB)
       ? STATE_VERTEX_PROGRAM : STATE_FRAGMENT_PROGRAM;
index ae98b782b70523cb237aea3b05ec85d62759f3bf..4d928483e1602f7a430b4e798dfb0f8e142a3c37 100644 (file)
@@ -229,6 +229,16 @@ _mesa_ARBfp_parse_option(struct asm_parser_state *state, const char *option)
             }
          }
       }
+   } else if (strncmp(option, "ATI_", 4) == 0) {
+      option += 4;
+
+      if (strcmp(option, "draw_buffers") == 0) {
+        /* Don't need to check extension availability because all Mesa-based
+         * drivers support GL_ATI_draw_buffers.
+         */
+        state->option.DrawBuffers = 1;
+        return 1;
+      }
    } else if (strncmp(option, "NV_fragment_program", 19) == 0) {
       option += 19;
 
index d689eef7958c25d045366f5b275c40623207a7b1..8e5aaee95e5bec1eab4000832a6f362ee9effc7a 100644 (file)
@@ -173,6 +173,7 @@ struct asm_parser_state {
    unsigned MaxClipPlanes;
    unsigned MaxLights;
    unsigned MaxProgramMatrices;
+   unsigned MaxDrawBuffers;
    /*@}*/
 
    /**
index f92881f8337a9dd94d378b592fa4e6b359f91bcd..a239da2c60902c754a5f84ff0737948044af7488 100644 (file)
@@ -230,15 +230,25 @@ _mesa_insert_mvp_code(struct gl_context *ctx, struct gl_vertex_program *vprog)
 
 
 /**
- * Append extra instructions onto the given fragment program to implement
- * the fog mode specified by fprog->FogOption.
- * The fragment.fogcoord input is used to compute the fog blend factor.
+ * Append instructions to implement fog
  *
- * XXX with a little work, this function could be adapted to add fog code
+ * The \c fragment.fogcoord input is used to compute the fog blend factor.
+ *
+ * \param ctx      The GL context
+ * \param fprog    Fragment program that fog instructions will be appended to.
+ * \param fog_mode Fog mode.  One of \c GL_EXP, \c GL_EXP2, or \c GL_LINEAR.
+ * \param saturate True if writes to color outputs should be clamped to [0, 1]
+ *
+ * \note
+ * This function sets \c FRAG_BIT_FOGC in \c fprog->Base.InputsRead.
+ *
+ * \todo With a little work, this function could be adapted to add fog code
  * to vertex programs too.
  */
 void
-_mesa_append_fog_code(struct gl_context *ctx, struct gl_fragment_program *fprog)
+_mesa_append_fog_code(struct gl_context *ctx,
+                     struct gl_fragment_program *fprog, GLenum fog_mode,
+                     GLboolean saturate)
 {
    static const gl_state_index fogPStateOpt[STATE_LENGTH]
       = { STATE_INTERNAL, STATE_FOG_PARAMS_OPTIMIZED, 0, 0, 0 };
@@ -251,9 +261,9 @@ _mesa_append_fog_code(struct gl_context *ctx, struct gl_fragment_program *fprog)
    GLint fogPRefOpt, fogColorRef; /* state references */
    GLuint colorTemp, fogFactorTemp; /* temporary registerss */
 
-   if (fprog->FogOption == GL_NONE) {
+   if (fog_mode == GL_NONE) {
       _mesa_problem(ctx, "_mesa_append_fog_code() called for fragment program"
-                    " with FogOption == GL_NONE");
+                    " with fog_mode == GL_NONE");
       return;
    }
 
@@ -290,7 +300,7 @@ _mesa_append_fog_code(struct gl_context *ctx, struct gl_fragment_program *fprog)
          /* change the instruction to write to colorTemp w/ clamping */
          inst->DstReg.File = PROGRAM_TEMPORARY;
          inst->DstReg.Index = colorTemp;
-         inst->SaturateMode = SATURATE_ZERO_ONE;
+         inst->SaturateMode = saturate;
          /* don't break (may be several writes to result.color) */
       }
       inst++;
@@ -300,7 +310,8 @@ _mesa_append_fog_code(struct gl_context *ctx, struct gl_fragment_program *fprog)
    _mesa_init_instructions(inst, 5);
 
    /* emit instructions to compute fog blending factor */
-   if (fprog->FogOption == GL_LINEAR) {
+   /* this is always clamped to [0, 1] regardless of fragment clamping */
+   if (fog_mode == GL_LINEAR) {
       /* MAD fogFactorTemp.x, fragment.fogcoord.x, fogPRefOpt.x, fogPRefOpt.y; */
       inst->Opcode = OPCODE_MAD;
       inst->DstReg.File = PROGRAM_TEMPORARY;
@@ -319,7 +330,7 @@ _mesa_append_fog_code(struct gl_context *ctx, struct gl_fragment_program *fprog)
       inst++;
    }
    else {
-      ASSERT(fprog->FogOption == GL_EXP || fprog->FogOption == GL_EXP2);
+      ASSERT(fog_mode == GL_EXP || fog_mode == GL_EXP2);
       /* fogPRefOpt.z = d/ln(2), fogPRefOpt.w = d/sqrt(ln(2) */
       /* EXP: MUL fogFactorTemp.x, fogPRefOpt.z, fragment.fogcoord.x; */
       /* EXP2: MUL fogFactorTemp.x, fogPRefOpt.w, fragment.fogcoord.x; */
@@ -330,12 +341,12 @@ _mesa_append_fog_code(struct gl_context *ctx, struct gl_fragment_program *fprog)
       inst->SrcReg[0].File = PROGRAM_STATE_VAR;
       inst->SrcReg[0].Index = fogPRefOpt;
       inst->SrcReg[0].Swizzle
-         = (fprog->FogOption == GL_EXP) ? SWIZZLE_ZZZZ : SWIZZLE_WWWW;
+         = (fog_mode == GL_EXP) ? SWIZZLE_ZZZZ : SWIZZLE_WWWW;
       inst->SrcReg[1].File = PROGRAM_INPUT;
       inst->SrcReg[1].Index = FRAG_ATTRIB_FOGC;
       inst->SrcReg[1].Swizzle = SWIZZLE_XXXX;
       inst++;
-      if (fprog->FogOption == GL_EXP2) {
+      if (fog_mode == GL_EXP2) {
          /* MUL fogFactorTemp.x, fogFactorTemp.x, fogFactorTemp.x; */
          inst->Opcode = OPCODE_MUL;
          inst->DstReg.File = PROGRAM_TEMPORARY;
@@ -396,7 +407,6 @@ _mesa_append_fog_code(struct gl_context *ctx, struct gl_fragment_program *fprog)
    fprog->Base.Instructions = newInst;
    fprog->Base.NumInstructions = inst - newInst;
    fprog->Base.InputsRead |= FRAG_BIT_FOGC;
-   /* XXX do this?  fprog->FogOption = GL_NONE; */
 }
 
 
index ef6f1bd079424400dd3399d3ca1c81bfd4ae3983..b9205823c29b1fdf36f876efee2815f457a6d5dd 100644 (file)
@@ -32,7 +32,9 @@ extern void
 _mesa_insert_mvp_code(struct gl_context *ctx, struct gl_vertex_program *vprog);
 
 extern void
-_mesa_append_fog_code(struct gl_context *ctx, struct gl_fragment_program *fprog);
+_mesa_append_fog_code(struct gl_context *ctx,
+                     struct gl_fragment_program *fprog, GLenum fog_mode,
+                     GLboolean saturate);
 
 extern void
 _mesa_count_texture_indirections(struct gl_program *prog);
index fcf8ab2e7945462ceeb5c0c2d34a94f7c4fdc31b..9b2cb1a3c14ed0d0c76ed46cca289ae29b7938c7 100644 (file)
@@ -71,6 +71,7 @@ MAIN_SOURCES = \
        main/readpix.c \
        main/remap.c \
        main/renderbuffer.c \
+       main/samplerobj.c \
        main/scissor.c \
        main/shaderapi.c \
        main/shaderobj.c \
index fb1c7a4efee6e222fb891311cf6eee8e3e83e541..d1844e1066fea91090b7f03debc4fd8be7ac8f0a 100644 (file)
@@ -286,7 +286,7 @@ update_blend( struct st_context *st )
 
    {
       struct pipe_blend_color bc;
-      COPY_4FV(bc.color, st->ctx->Color.BlendColor);
+      COPY_4FV(bc.color, st->ctx->Color.BlendColorUnclamped);
       cso_set_blend_color(st->cso_context, &bc);
    }
 }
index aaee432a216c7d31b21b6fa919b3f03f9a9fac42..6c51b1ac1a2b33481f24a6b7cb5383a7a7227ce1 100644 (file)
@@ -142,7 +142,7 @@ update_depth_stencil_alpha(struct st_context *st)
    if (ctx->Color.AlphaEnabled) {
       dsa->alpha.enabled = 1;
       dsa->alpha.func = st_compare_func_to_pipe(ctx->Color.AlphaFunc);
-      dsa->alpha.ref_value = ctx->Color.AlphaRef;
+      dsa->alpha.ref_value = ctx->Color.AlphaRefUnclamped;
    }
 
    cso_set_depth_stencil_alpha(st->cso_context, dsa);
index 8bccceeec53cb3076356b5d4e6953036803c6acf..250cbb2260c9425528b24b4d005b6a48409911c2 100644 (file)
@@ -112,6 +112,8 @@ static void update_raster_state( struct st_context *st )
       raster->light_twoside = 1;
    }
 
+   raster->clamp_vertex_color = ctx->Light._ClampVertexColor;
+
    /* _NEW_POLYGON
     */
    if (ctx->Polygon.CullFlag) {
@@ -252,6 +254,9 @@ static void update_raster_state( struct st_context *st )
    if (ctx->Scissor.Enabled)
       raster->scissor = 1;
 
+   /* _NEW_FRAG_CLAMP */
+   raster->clamp_fragment_color = ctx->Color._ClampFragmentColor;
+
    raster->gl_rasterization_rules = 1;
 
    cso_set_rasterizer(st->cso_context, raster);
@@ -267,7 +272,8 @@ const struct st_tracked_state st_update_rasterizer = {
        _NEW_POINT |
        _NEW_POLYGON |
        _NEW_PROGRAM |
-       _NEW_SCISSOR),      /* mesa state dependencies*/
+       _NEW_SCISSOR |
+       _NEW_FRAG_CLAMP),      /* mesa state dependencies*/
       ST_NEW_VERTEX_PROGRAM,  /* state tracker dependencies */
    },
    update_raster_state     /* update function */
index 474cbd5897d1861c8f4584d3cf7be7d0d8f52bac..808aa73a08305ed817698bc635864d0703a5913a 100644 (file)
@@ -38,6 +38,7 @@
 #include "st_cb_texture.h"
 #include "st_format.h"
 #include "st_atom.h"
+#include "st_texture.h"
 #include "pipe/p_context.h"
 #include "pipe/p_defines.h"
 
@@ -138,6 +139,7 @@ update_samplers(struct st_context *st)
       if (samplersUsed & (1 << su)) {
          struct gl_texture_object *texobj;
          struct gl_texture_image *teximg;
+         struct gl_sampler_object *msamp;
          GLuint texUnit;
 
          if (fprog->Base.SamplersUsed & (1 << su))
@@ -152,25 +154,27 @@ update_samplers(struct st_context *st)
 
          teximg = texobj->Image[0][texobj->BaseLevel];
 
-         sampler->wrap_s = gl_wrap_xlate(texobj->WrapS);
-         sampler->wrap_t = gl_wrap_xlate(texobj->WrapT);
-         sampler->wrap_r = gl_wrap_xlate(texobj->WrapR);
+         msamp = st_get_mesa_sampler(st->ctx, texUnit);
 
-         sampler->min_img_filter = gl_filter_to_img_filter(texobj->MinFilter);
-         sampler->min_mip_filter = gl_filter_to_mip_filter(texobj->MinFilter);
-         sampler->mag_img_filter = gl_filter_to_img_filter(texobj->MagFilter);
+         sampler->wrap_s = gl_wrap_xlate(msamp->WrapS);
+         sampler->wrap_t = gl_wrap_xlate(msamp->WrapT);
+         sampler->wrap_r = gl_wrap_xlate(msamp->WrapR);
+
+         sampler->min_img_filter = gl_filter_to_img_filter(msamp->MinFilter);
+         sampler->min_mip_filter = gl_filter_to_mip_filter(msamp->MinFilter);
+         sampler->mag_img_filter = gl_filter_to_img_filter(msamp->MagFilter);
 
          if (texobj->Target != GL_TEXTURE_RECTANGLE_ARB)
             sampler->normalized_coords = 1;
 
-         sampler->lod_bias = st->ctx->Texture.Unit[su].LodBias;
-
-         sampler->min_lod = texobj->BaseLevel + texobj->MinLod;
-         if (sampler->min_lod < texobj->BaseLevel)
-            sampler->min_lod = texobj->BaseLevel;
+         sampler->lod_bias = st->ctx->Texture.Unit[texUnit].LodBias +
+            msamp->LodBias;
 
-         sampler->max_lod = MIN2((GLfloat) texobj->MaxLevel,
-                                 (texobj->MaxLod + texobj->BaseLevel));
+         sampler->min_lod = CLAMP(msamp->MinLod,
+                                  0.0f,
+                                  (GLfloat) texobj->MaxLevel - texobj->BaseLevel);
+         sampler->max_lod = MIN2((GLfloat) texobj->MaxLevel - texobj->BaseLevel,
+                                 msamp->MaxLod);
          if (sampler->max_lod < sampler->min_lod) {
             /* The GL spec doesn't seem to specify what to do in this case.
              * Swap the values.
@@ -181,17 +185,18 @@ update_samplers(struct st_context *st)
             assert(sampler->min_lod <= sampler->max_lod);
          }
 
-         st_translate_color(texobj->BorderColor.f,
+         st_translate_color(msamp->BorderColor.f,
                             teximg ? teximg->_BaseFormat : GL_RGBA,
                             sampler->border_color);
 
-        sampler->max_anisotropy = (texobj->MaxAnisotropy == 1.0 ? 0 : (GLuint)texobj->MaxAnisotropy);
+        sampler->max_anisotropy = (msamp->MaxAnisotropy == 1.0 ?
+                                    0 : (GLuint) msamp->MaxAnisotropy);
 
          /* only care about ARB_shadow, not SGI shadow */
-         if (texobj->CompareMode == GL_COMPARE_R_TO_TEXTURE) {
+         if (msamp->CompareMode == GL_COMPARE_R_TO_TEXTURE) {
             sampler->compare_mode = PIPE_TEX_COMPARE_R_TO_TEXTURE;
             sampler->compare_func
-               = st_compare_func_to_pipe(texobj->CompareFunc);
+               = st_compare_func_to_pipe(msamp->CompareFunc);
          }
 
          st->state.num_samplers = su + 1;
index fd03669e66062403f2f065550ddad24cdedc0399..19ad2e8cc4a445185dd04a1317f5a1099a638559 100644 (file)
@@ -138,16 +138,18 @@ check_sampler_swizzle(struct pipe_sampler_view *sv,
 static INLINE struct pipe_sampler_view *
 st_create_texture_sampler_view_from_stobj(struct pipe_context *pipe,
                                          struct st_texture_object *stObj,
+                                          const struct gl_sampler_object *samp,
                                          enum pipe_format format)
 {
    struct pipe_sampler_view templ;
    GLuint swizzle = apply_depthmode(stObj->pt->format,
                                     stObj->base._Swizzle,
-                                    stObj->base.DepthMode);
+                                    samp->DepthMode);
 
    u_sampler_view_default_template(&templ,
                                    stObj->pt,
                                    format);
+   templ.u.tex.first_level = stObj->base.BaseLevel;
 
    if (swizzle != SWIZZLE_NOOP) {
       templ.swizzle_r = GET_SWZ(swizzle, 0);
@@ -163,6 +165,7 @@ st_create_texture_sampler_view_from_stobj(struct pipe_context *pipe,
 static INLINE struct pipe_sampler_view *
 st_get_texture_sampler_view_from_stobj(struct st_texture_object *stObj,
                                       struct pipe_context *pipe,
+                                       const struct gl_sampler_object *samp,
                                       enum pipe_format format)
 {
    if (!stObj || !stObj->pt) {
@@ -171,7 +174,7 @@ st_get_texture_sampler_view_from_stobj(struct st_texture_object *stObj,
 
    if (!stObj->sampler_view) {
       stObj->sampler_view =
-         st_create_texture_sampler_view_from_stobj(pipe, stObj, format);
+         st_create_texture_sampler_view_from_stobj(pipe, stObj, samp, format);
    }
 
    return stObj->sampler_view;
@@ -199,16 +202,20 @@ update_textures(struct st_context *st)
          struct st_texture_object *stObj;
          GLboolean retval;
          GLuint texUnit;
+         const struct gl_sampler_object *samp;
 
          if (fprog->Base.SamplersUsed & (1 << su))
             texUnit = fprog->Base.SamplerUnits[su];
          else
             texUnit = vprog->Base.SamplerUnits[su];
 
+         samp = st_get_mesa_sampler(st->ctx, texUnit);
+
          texObj = st->ctx->Texture.Unit[texUnit]._Current;
 
          if (!texObj) {
             texObj = st_get_default_texture(st);
+            samp = &texObj->Sampler;
          }
          stObj = st_texture_object(texObj);
 
@@ -227,7 +234,7 @@ update_textures(struct st_context *st)
            enum pipe_format firstImageFormat =
                st_mesa_format_to_pipe_format(texFormat);
 
-           if ((stObj->base.sRGBDecode == GL_SKIP_DECODE_EXT) &&
+           if ((samp->sRGBDecode == GL_SKIP_DECODE_EXT) &&
                 (_mesa_get_format_color_encoding(texFormat) == GL_SRGB)) {
                /* don't do sRGB->RGB conversion.  Interpret the texture
                 * texture data as linear values.
@@ -244,14 +251,19 @@ update_textures(struct st_context *st)
          st->state.num_textures = su + 1;
 
         /* if sampler view has changed dereference it */
-        if (stObj->sampler_view)
+        if (stObj->sampler_view) {
             if (check_sampler_swizzle(stObj->sampler_view,
                                       stObj->base._Swizzle,
-                                      stObj->base.DepthMode) ||
-                (st_view_format != stObj->sampler_view->format))
+                                      samp->DepthMode) ||
+                (st_view_format != stObj->sampler_view->format) ||
+                stObj->base.BaseLevel != stObj->sampler_view->u.tex.first_level) {
               pipe_sampler_view_reference(&stObj->sampler_view, NULL);
+            }
+         }
 
-         sampler_view = st_get_texture_sampler_view_from_stobj(stObj, pipe, st_view_format);
+         sampler_view = st_get_texture_sampler_view_from_stobj(stObj, pipe,
+                                                               samp,
+                                                               st_view_format);
       }
       pipe_sampler_view_reference(&st->state.sampler_views[su], sampler_view);
    }
@@ -259,10 +271,12 @@ update_textures(struct st_context *st)
    cso_set_fragment_sampler_views(st->cso_context,
                                   st->state.num_textures,
                                   st->state.sampler_views);
+
    if (st->ctx->Const.MaxVertexTextureImageUnits > 0) {
+      GLuint numUnits = MIN2(st->state.num_textures,
+                             st->ctx->Const.MaxVertexTextureImageUnits);
       cso_set_vertex_sampler_views(st->cso_context,
-                                   MIN2(st->state.num_textures,
-                                        st->ctx->Const.MaxVertexTextureImageUnits),
+                                   numUnits,
                                    st->state.sampler_views);
    }
 }
index 6d02a7dccd477e5284ec1723990aaf5530311d4c..25c95c7b9dc8e4148837481a5314cc8a60997326 100644 (file)
@@ -39,6 +39,7 @@
 #include "st_texture.h"
 #include "st_cb_blit.h"
 #include "st_cb_fbo.h"
+#include "st_atom.h"
 
 #include "util/u_blit.h"
 
@@ -75,6 +76,8 @@ st_BlitFramebuffer(struct gl_context *ctx,
    struct gl_framebuffer *readFB = ctx->ReadBuffer;
    struct gl_framebuffer *drawFB = ctx->DrawBuffer;
 
+   st_validate_state(st);
+
    if (!_mesa_clip_blit(ctx, &srcX0, &srcY0, &srcX1, &srcY1,
                         &dstX0, &dstY0, &dstX1, &dstY1)) {
       return; /* nothing to draw/blit */
index b9b606d539c4a39d384ff08b41b7967ebc2b4632..1e489b29d931fc186ecf96d1e80192c3adc2bd56 100644 (file)
@@ -408,9 +408,7 @@ st_copy_buffer_subdata(struct gl_context *ctx,
    struct pipe_context *pipe = st_context(ctx)->pipe;
    struct st_buffer_object *srcObj = st_buffer_object(src);
    struct st_buffer_object *dstObj = st_buffer_object(dst);
-   struct pipe_transfer *src_transfer;
-   struct pipe_transfer *dst_transfer;
-   ubyte *srcPtr, *dstPtr;
+   struct pipe_box box;
 
    if(!size)
       return;
@@ -419,23 +417,10 @@ st_copy_buffer_subdata(struct gl_context *ctx,
    assert(!src->Pointer);
    assert(!dst->Pointer);
 
-   srcPtr = (ubyte *) pipe_buffer_map_range(pipe,
-                                            srcObj->buffer,
-                                            readOffset, size,
-                                            PIPE_TRANSFER_READ,
-                                           &src_transfer);
+   u_box_1d(readOffset, size, &box);
 
-   dstPtr = (ubyte *) pipe_buffer_map_range(pipe,
-                                            dstObj->buffer,
-                                            writeOffset, size,
-                                            PIPE_TRANSFER_WRITE,
-                                           &dst_transfer);
-
-   if (srcPtr && dstPtr)
-      memcpy(dstPtr + writeOffset, srcPtr + readOffset, size);
-
-   pipe_buffer_unmap(pipe, src_transfer);
-   pipe_buffer_unmap(pipe, dst_transfer);
+   pipe->resource_copy_region(pipe, dstObj->buffer, 0, writeOffset, 0, 0,
+                              srcObj->buffer, 0, &box);
 }
 
 
index 1eb748e0d5d47b73b7e6094aefa7160da1d3e11a..181fedd2b9923fc09061aeb8cfc6b2cf6af630cb 100644 (file)
@@ -323,7 +323,7 @@ clear_with_quad(struct gl_context *ctx,
    set_vertex_shader(st);
 
    if (ctx->DrawBuffer->_ColorDrawBuffers[0]) {
-      st_translate_color(ctx->Color.ClearColor,
+      st_translate_color(ctx->Color.ClearColorUnclamped,
                          ctx->DrawBuffer->_ColorDrawBuffers[0]->_BaseFormat,
                          clearColor);
    }
@@ -585,7 +585,7 @@ st_Clear(struct gl_context *ctx, GLbitfield mask)
                             clearColor);
       }
 
-      st->pipe->clear(st->pipe, clear_buffers, ctx->Color.ClearColor,
+      st->pipe->clear(st->pipe, clear_buffers, ctx->Color.ClearColorUnclamped,
                       ctx->Depth.Clear, ctx->Stencil.Clear);
    }
    if (mask & BUFFER_BIT_ACCUM)
index eccc207579ba9a8653934388301e61d786e66c3f..1707f827cc802eda2475bc4514a04cf61249c15c 100644 (file)
@@ -296,7 +296,7 @@ base_format(GLenum format)
  * of the given format and type.
  */
 static GLenum
-internal_format(GLenum format, GLenum type)
+internal_format(struct gl_context *ctx, GLenum format, GLenum type)
 {
    switch (format) {
    case GL_DEPTH_COMPONENT:
@@ -326,7 +326,53 @@ internal_format(GLenum format, GLenum type)
          }
       }
       else {
-         return GL_RGBA;
+         switch (type) {
+         case GL_UNSIGNED_BYTE:
+         case GL_UNSIGNED_INT_8_8_8_8:
+         case GL_UNSIGNED_INT_8_8_8_8_REV:
+         default:
+            return GL_RGBA8;
+
+         case GL_UNSIGNED_BYTE_3_3_2:
+         case GL_UNSIGNED_BYTE_2_3_3_REV:
+         case GL_UNSIGNED_SHORT_4_4_4_4:
+         case GL_UNSIGNED_SHORT_4_4_4_4_REV:
+            return GL_RGBA4;
+
+         case GL_UNSIGNED_SHORT_5_6_5:
+         case GL_UNSIGNED_SHORT_5_6_5_REV:
+         case GL_UNSIGNED_SHORT_5_5_5_1:
+         case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+            return GL_RGB5_A1;
+
+         case GL_UNSIGNED_INT_10_10_10_2:
+         case GL_UNSIGNED_INT_2_10_10_10_REV:
+            return GL_RGB10_A2;
+
+         case GL_UNSIGNED_SHORT:
+         case GL_UNSIGNED_INT:
+            return GL_RGBA16;
+
+         case GL_BYTE:
+            return
+               ctx->Extensions.EXT_texture_snorm ? GL_RGBA8_SNORM : GL_RGBA8;
+
+         case GL_SHORT:
+         case GL_INT:
+            return
+               ctx->Extensions.EXT_texture_snorm ? GL_RGBA16_SNORM : GL_RGBA16;
+
+         case GL_HALF_FLOAT_ARB:
+            return
+               ctx->Extensions.ARB_texture_float ? GL_RGBA16F :
+               ctx->Extensions.EXT_texture_snorm ? GL_RGBA16_SNORM : GL_RGBA16;
+
+         case GL_FLOAT:
+         case GL_DOUBLE:
+            return
+               ctx->Extensions.ARB_texture_float ? GL_RGBA32F :
+               ctx->Extensions.EXT_texture_snorm ? GL_RGBA16_SNORM : GL_RGBA16;
+         }
       }
    }
 }
@@ -369,7 +415,7 @@ make_texture(struct st_context *st,
    GLenum baseFormat, intFormat;
 
    baseFormat = base_format(format);
-   intFormat = internal_format(format, type);
+   intFormat = internal_format(ctx, format, type);
 
    mformat = st_ChooseTextureFormat_renderable(ctx, intFormat,
                                                format, type, GL_FALSE);
@@ -582,6 +628,7 @@ draw_textured_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z,
    {
       struct pipe_rasterizer_state rasterizer;
       memset(&rasterizer, 0, sizeof(rasterizer));
+      rasterizer.clamp_fragment_color = ctx->Color._ClampFragmentColor;
       rasterizer.gl_rasterization_rules = 1;
       rasterizer.scissor = ctx->Scissor.Enabled;
       cso_set_rasterizer(cso, &rasterizer);
index 0df04287ae6b23e4792c293f9aaac9ae0efef830..e632d8165428db013eb76633cf2eef0762cbfdd9 100644 (file)
@@ -353,7 +353,7 @@ st_render_texture(struct gl_context *ctx,
       return;
 
    /* get pointer to texture image we're rendeing to */
-   texImage = att->Texture->Image[att->CubeMapFace][att->TextureLevel];
+   texImage = _mesa_get_attachment_teximage(att);
 
    /* create new renderbuffer which wraps the texture image */
    rb = st_new_renderbuffer(ctx, 0);
@@ -471,8 +471,7 @@ st_validate_attachment(struct gl_context *ctx,
       return GL_FALSE;
 
    format = stObj->pt->format;
-   texFormat =
-      stObj->base.Image[att->CubeMapFace][att->TextureLevel]->TexFormat;
+   texFormat = _mesa_get_attachment_teximage_const(att)->TexFormat;
 
    /* If the encoding is sRGB and sRGB rendering cannot be enabled,
     * check for linear format support instead.
@@ -529,6 +528,9 @@ st_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
    const struct gl_renderbuffer_attachment *stencil =
          &fb->Attachment[BUFFER_STENCIL];
    GLuint i;
+   enum pipe_format first_format = PIPE_FORMAT_NONE;
+   boolean mixed_formats =
+         screen->get_param(screen, PIPE_CAP_MIXED_COLORBUFFER_FORMATS) != 0;
 
    if (depth->Type && stencil->Type && depth->Type != stencil->Type) {
       fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
@@ -562,13 +564,33 @@ st_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
       return;
    }
    for (i = 0; i < ctx->Const.MaxColorAttachments; i++) {
+      struct gl_renderbuffer_attachment *att =
+            &fb->Attachment[BUFFER_COLOR0 + i];
+      enum pipe_format format;
+
       if (!st_validate_attachment(ctx,
                                   screen,
-                                 &fb->Attachment[BUFFER_COLOR0 + i],
+                                 att,
                                  PIPE_BIND_RENDER_TARGET)) {
         fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
         return;
       }
+
+      if (!mixed_formats) {
+         /* Disallow mixed formats. */
+         if (att->Type != GL_NONE) {
+            format = st_renderbuffer(att->Renderbuffer)->surface->format;
+         } else {
+            continue;
+         }
+
+         if (first_format == PIPE_FORMAT_NONE) {
+            first_format = format;
+         } else if (format != first_format) {
+            fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
+            return;
+         }
+      }
    }
 }
 
index f8da2a4d158ef356c8de0b7b270200440abe91a3..2a63799bdbc3235277c3fea268642d2b5c1ea5d5 100644 (file)
@@ -198,27 +198,39 @@ st_fast_readpixels(struct gl_context *ctx, struct st_renderbuffer *strb,
                    const struct gl_pixelstore_attrib *pack,
                    GLvoid *dest)
 {
+   GLubyte alphaORoperand;
    enum combination {
       A8R8G8B8_UNORM_TO_RGBA_UBYTE,
       A8R8G8B8_UNORM_TO_RGB_UBYTE,
-      A8R8G8B8_UNORM_TO_BGRA_UINT
+      A8R8G8B8_UNORM_TO_BGRA_UINT,
+      A8R8G8B8_UNORM_TO_RGBA_UINT
    } combo;
 
    if (ctx->_ImageTransferState)
       return GL_FALSE;
 
-   if (strb->format == PIPE_FORMAT_B8G8R8A8_UNORM &&
-       format == GL_RGBA && type == GL_UNSIGNED_BYTE) {
+   if (strb->format == PIPE_FORMAT_B8G8R8A8_UNORM) {
+      alphaORoperand = 0;
+   }
+   else if (strb->format == PIPE_FORMAT_B8G8R8X8_UNORM ) {
+      alphaORoperand = 0xff;
+   }
+   else {
+      return GL_FALSE;
+   }
+
+   if (format == GL_RGBA && type == GL_UNSIGNED_BYTE) {
       combo = A8R8G8B8_UNORM_TO_RGBA_UBYTE;
    }
-   else if (strb->format == PIPE_FORMAT_B8G8R8A8_UNORM &&
-            format == GL_RGB && type == GL_UNSIGNED_BYTE) {
+   else if (format == GL_RGB && type == GL_UNSIGNED_BYTE) {
       combo = A8R8G8B8_UNORM_TO_RGB_UBYTE;
    }
-   else if (strb->format == PIPE_FORMAT_B8G8R8A8_UNORM &&
-            format == GL_BGRA && type == GL_UNSIGNED_INT_8_8_8_8_REV) {
+   else if (format == GL_BGRA && type == GL_UNSIGNED_INT_8_8_8_8_REV) {
       combo = A8R8G8B8_UNORM_TO_BGRA_UINT;
    }
+   else if (format == GL_RGBA && type == GL_UNSIGNED_INT_8_8_8_8) {
+      combo = A8R8G8B8_UNORM_TO_RGBA_UINT;
+   }
    else {
       return GL_FALSE;
    }
@@ -278,7 +290,7 @@ st_fast_readpixels(struct gl_context *ctx, struct st_renderbuffer *strb,
                dst[col*4+0] = (pixel >> 16) & 0xff;
                dst[col*4+1] = (pixel >>  8) & 0xff;
                dst[col*4+2] = (pixel >>  0) & 0xff;
-               dst[col*4+3] = (pixel >> 24) & 0xff;
+               dst[col*4+3] = ((pixel >> 24) & 0xff) | alphaORoperand;
             }
             dst += dstStride;
             y += dy;
@@ -301,6 +313,26 @@ st_fast_readpixels(struct gl_context *ctx, struct st_renderbuffer *strb,
          for (row = 0; row < height; row++) {
             const GLubyte *src = map + y * trans->stride;
             memcpy(dst, src, 4 * width);
+            if (alphaORoperand) {
+               assert(alphaORoperand == 0xff);
+               for (col = 0; col < width; col++) {
+                  dst[col*4+3] = 0xff;
+               }
+            }
+            dst += dstStride;
+            y += dy;
+         }
+         break;
+      case A8R8G8B8_UNORM_TO_RGBA_UINT:
+         for (row = 0; row < height; row++) {
+            const GLubyte *src = map + y * trans->stride;
+            for (col = 0; col < width; col++) {
+               GLuint pixel = ((GLuint *) src)[col];
+               dst[col*4+0] = ((pixel >> 24) & 0xff) | alphaORoperand;
+               dst[col*4+1] = (pixel >> 0) & 0xff;
+               dst[col*4+2] = (pixel >> 8) & 0xff;
+               dst[col*4+3] = (pixel >> 16) & 0xff;
+            }
             dst += dstStride;
             y += dy;
          }
@@ -331,7 +363,7 @@ st_readpixels(struct gl_context *ctx, GLint x, GLint y, GLsizei width, GLsizei h
    struct st_context *st = st_context(ctx);
    struct pipe_context *pipe = st->pipe;
    GLfloat (*temp)[4];
-   const GLbitfield transferOps = ctx->_ImageTransferState;
+   GLbitfield transferOps = ctx->_ImageTransferState;
    GLsizei i, j;
    GLint yStep, dfStride;
    GLfloat *df;
@@ -391,7 +423,10 @@ st_readpixels(struct gl_context *ctx, GLint x, GLint y, GLsizei width, GLsizei h
       return;
    }
 
-   if (format == GL_RGBA && type == GL_FLOAT) {
+   if(ctx->Color._ClampReadColor)
+      transferOps |= IMAGE_CLAMP_BIT;
+
+   if (format == GL_RGBA && type == GL_FLOAT && !transferOps) {
       /* write tile(row) directly into user's buffer */
       df = (GLfloat *) _mesa_image_address2d(&clippedPacking, dest, width,
                                              height, format, type, 0, 0);
index 9d5eb113ff711407a5157b6e79e69f81eab350b2..ab7f6a51684d3c1412b4cea48a52993df2466000 100644 (file)
@@ -87,6 +87,8 @@ gl_target_to_pipe(GLenum target)
       return PIPE_TEXTURE_1D_ARRAY;
    case GL_TEXTURE_2D_ARRAY_EXT:
       return PIPE_TEXTURE_2D_ARRAY;
+   case GL_TEXTURE_BUFFER:
+      return PIPE_BUFFER;
    default:
       assert(0);
       return 0;
@@ -245,6 +247,7 @@ get_texture_dims(GLenum target)
    switch (target) {
    case GL_TEXTURE_1D:
    case GL_TEXTURE_1D_ARRAY_EXT:
+   case GL_TEXTURE_BUFFER:
       return 1;
    case GL_TEXTURE_2D:
    case GL_TEXTURE_CUBE_MAP_ARB:
@@ -359,8 +362,8 @@ guess_and_alloc_texture(struct st_context *st,
     * to re-allocating a texture buffer with space for more (or fewer)
     * mipmap levels later.
     */
-   if ((stObj->base.MinFilter == GL_NEAREST ||
-        stObj->base.MinFilter == GL_LINEAR ||
+   if ((stObj->base.Sampler.MinFilter == GL_NEAREST ||
+        stObj->base.Sampler.MinFilter == GL_LINEAR ||
         stImage->base._BaseFormat == GL_DEPTH_COMPONENT ||
         stImage->base._BaseFormat == GL_DEPTH_STENCIL_EXT) &&
        !stObj->base.GenerateMipmap &&
@@ -597,7 +600,12 @@ st_TexImage(struct gl_context * ctx,
     * memory or malloc space for it.
     */
    if (stImage->pt) {
-      /* Store the image in the gallium texture memory buffer */
+      if (!pixels) {
+         /* We've allocated texture resource, but have no pixel data - all done. */
+         goto done;
+      }
+
+      /* Store the image in the gallium transfer object */
       if (format == GL_DEPTH_COMPONENT &&
           util_format_is_depth_and_stencil(stImage->pt->format))
          transfer_usage = PIPE_TRANSFER_READ_WRITE;
@@ -1678,7 +1686,7 @@ copy_image_data_to_texture(struct st_context *st,
    /* debug checks */
    {
       const struct gl_texture_image *dstImage =
-         stObj->base.Image[stImage->face][stImage->level];
+         stObj->base.Image[stImage->face][dstLevel];
       assert(dstImage);
       assert(dstImage->Width == stImage->base.Width);
       assert(dstImage->Height == stImage->base.Height);
@@ -1739,8 +1747,8 @@ st_finalize_texture(struct gl_context *ctx,
        * incomplete.  In that case, we'll have set stObj->lastLevel before
        * we get here.
        */
-      if (stObj->base.MinFilter == GL_LINEAR ||
-          stObj->base.MinFilter == GL_NEAREST)
+      if (stObj->base.Sampler.MinFilter == GL_LINEAR ||
+          stObj->base.Sampler.MinFilter == GL_NEAREST)
          stObj->lastLevel = stObj->base.BaseLevel;
       else
          stObj->lastLevel = stObj->base._MaxLevel;
@@ -1835,7 +1843,12 @@ st_finalize_texture(struct gl_context *ctx,
          /* Need to import images in main memory or held in other textures.
           */
          if (stImage && stObj->pt != stImage->pt) {
-            copy_image_data_to_texture(st, stObj, level, stImage);
+            if (stImage->base.Width == u_minify(stObj->width0, level) &&
+                stImage->base.Height == u_minify(stObj->height0, level) &&
+                stImage->base.Depth == u_minify(stObj->depth0, level)) {
+               /* src image fits expected dest mipmap level size */
+               copy_image_data_to_texture(st, stObj, level, stImage);
+            }
          }
       }
    }
@@ -1887,8 +1900,8 @@ st_get_default_texture(struct st_context *st)
                   texObj, texImg,
                   0, 0);
 
-      texObj->MinFilter = GL_NEAREST;
-      texObj->MagFilter = GL_NEAREST;
+      texObj->Sampler.MinFilter = GL_NEAREST;
+      texObj->Sampler.MagFilter = GL_NEAREST;
       texObj->_Complete = GL_TRUE;
 
       st->default_texture = texObj;
index 5a39ab0a110e678db37cf98d4f47737e845303e7..ce78956e359fa8c95bb415d1520c6054be538e0f 100644 (file)
@@ -27,6 +27,7 @@
 
 #include "main/imports.h"
 #include "main/context.h"
+#include "main/samplerobj.h"
 #include "main/shaderobj.h"
 #include "program/prog_cache.h"
 #include "vbo/vbo.h"
@@ -206,8 +207,8 @@ static void st_destroy_context_priv( struct st_context *st )
    st_destroy_drawtex(st);
 
    /* Unreference any user vertex buffers. */
-   for (i = 0; i < st->num_user_vbs; i++) {
-      pipe_resource_reference(&st->user_vb[i], NULL);
+   for (i = 0; i < st->num_user_attribs; i++) {
+      pipe_resource_reference(&st->user_attrib[i].buffer, NULL);
    }
 
    for (i = 0; i < Elements(st->state.sampler_views); i++) {
@@ -269,6 +270,7 @@ void st_destroy_context( struct st_context *st )
 void st_init_driver_functions(struct dd_function_table *functions)
 {
    _mesa_init_shader_object_functions(functions);
+   _mesa_init_sampler_object_functions(functions);
 
    st_init_accum_functions(functions);
    st_init_blit_functions(functions);
index 77765f0237967d08621165baa5ce7440bda96b04..1fc9c1051a0e6e7515fcfeaaee4f448b5adeecdf 100644 (file)
@@ -187,9 +187,16 @@ struct st_context
    void *winsys_drawable_handle;
 
    /* User vertex buffers. */
-   struct pipe_resource *user_vb[PIPE_MAX_ATTRIBS];
-   unsigned user_vb_stride[PIPE_MAX_ATTRIBS];
-   unsigned num_user_vbs;
+   struct {
+      struct pipe_resource *buffer;
+
+      /** Element size */
+      GLuint element_size;
+
+      /** Attribute stride */
+      GLsizei stride;
+   } user_attrib[PIPE_MAX_ATTRIBS];
+   unsigned num_user_attribs;
 };
 
 
index 40afa4362922494e3d54dc57f2f8e5c7b7d07763..d27043ec296f95d71bf36271fc4a97b4c4180ffb 100644 (file)
@@ -181,7 +181,7 @@ static GLuint fixed_types[4] = {
 /**
  * Return a PIPE_FORMAT_x for the given GL datatype and size.
  */
-GLuint
+enum pipe_format
 st_pipe_vertex_format(GLenum type, GLuint size, GLenum format,
                       GLboolean normalized)
 {
@@ -211,7 +211,7 @@ st_pipe_vertex_format(GLenum type, GLuint size, GLenum format,
       case GL_UNSIGNED_BYTE: return ubyte_types_norm[size-1];
       case GL_FIXED: return fixed_types[size-1];
       default: assert(0); return 0;
-      }      
+      }
    }
    else {
       switch (type) {
@@ -226,15 +226,13 @@ st_pipe_vertex_format(GLenum type, GLuint size, GLenum format,
       case GL_UNSIGNED_BYTE: return ubyte_types_scale[size-1];
       case GL_FIXED: return fixed_types[size-1];
       default: assert(0); return 0;
-      }      
+      }
    }
-   return 0; /* silence compiler warning */
+   return PIPE_FORMAT_NONE; /* silence compiler warning */
 }
 
 
 
-
-
 /**
  * Examine the active arrays to determine if we have interleaved
  * vertex arrays all living in one VBO, or all living in user space.
@@ -253,8 +251,9 @@ is_interleaved_arrays(const struct st_vertex_program *vp,
 
    for (attr = 0; attr < vpv->num_inputs; attr++) {
       const GLuint mesaAttr = vp->index_to_input[attr];
-      const struct gl_buffer_object *bufObj = arrays[mesaAttr]->BufferObj;
-      const GLsizei stride = arrays[mesaAttr]->StrideB; /* in bytes */
+      const struct gl_client_array *array = arrays[mesaAttr];
+      const struct gl_buffer_object *bufObj = array->BufferObj;
+      const GLsizei stride = array->StrideB; /* in bytes */
 
       if (firstStride < 0) {
          firstStride = stride;
@@ -272,9 +271,9 @@ is_interleaved_arrays(const struct st_vertex_program *vp,
             return GL_FALSE;
          }
          if (!client_addr) {
-            client_addr = arrays[mesaAttr]->Ptr;
+            client_addr = array->Ptr;
          }
-         else if (abs(arrays[mesaAttr]->Ptr - client_addr) > firstStride) {
+         else if (abs(array->Ptr - client_addr) > firstStride) {
             /* arrays start too far apart */
             return GL_FALSE;
          }
@@ -315,8 +314,8 @@ setup_interleaved_attribs(struct gl_context *ctx,
    GLuint attr;
    const GLubyte *low_addr = NULL;
 
-   /* Find the lowest address. */
-   if(vpv->num_inputs) {
+   /* Find the lowest address of the arrays we're drawing */
+   if (vpv->num_inputs) {
       low_addr = arrays[vp->index_to_input[0]]->Ptr;
 
       for (attr = 1; attr < vpv->num_inputs; attr++) {
@@ -327,41 +326,48 @@ setup_interleaved_attribs(struct gl_context *ctx,
 
    for (attr = 0; attr < vpv->num_inputs; attr++) {
       const GLuint mesaAttr = vp->index_to_input[attr];
-      struct gl_buffer_object *bufobj = arrays[mesaAttr]->BufferObj;
+      const struct gl_client_array *array = arrays[mesaAttr];
+      struct gl_buffer_object *bufobj = array->BufferObj;
       struct st_buffer_object *stobj = st_buffer_object(bufobj);
-      GLsizei stride = arrays[mesaAttr]->StrideB;
+      unsigned src_offset = (unsigned) (array->Ptr - low_addr);
+      GLuint element_size = array->_ElementSize;
+      GLsizei stride = array->StrideB;
+
+      assert(element_size == array->Size * _mesa_sizeof_type(array->Type));
 
       if (attr == 0) {
          if (bufobj && bufobj->Name) {
             vbuffer->buffer = NULL;
             pipe_resource_reference(&vbuffer->buffer, stobj->buffer);
             vbuffer->buffer_offset = pointer_to_offset(low_addr);
-         } else {
-            uint divisor = arrays[mesaAttr]->InstanceDivisor;
-            uint length = (divisor ? num_instances / divisor : max_index) + 1;
-            vbuffer->buffer =
-               pipe_user_buffer_create(pipe->screen, (void*)low_addr,
-                                       stride * length,
-                                      PIPE_BIND_VERTEX_BUFFER);
+         }
+         else {
+            uint divisor = array->InstanceDivisor;
+            uint last_index = divisor ? num_instances / divisor : max_index;
+            uint bytes = src_offset + stride * last_index + element_size;
+
+            vbuffer->buffer = pipe_user_buffer_create(pipe->screen,
+                                                      (void*) low_addr,
+                                                      bytes,
+                                                      PIPE_BIND_VERTEX_BUFFER);
             vbuffer->buffer_offset = 0;
 
             /* Track user vertex buffers. */
-            pipe_resource_reference(&st->user_vb[0], vbuffer->buffer);
-            st->user_vb_stride[0] = stride;
-            st->num_user_vbs = 1;
+            pipe_resource_reference(&st->user_attrib[0].buffer, vbuffer->buffer);
+            st->user_attrib[0].element_size = element_size;
+            st->user_attrib[0].stride = stride;
+            st->num_user_attribs = 1;
          }
          vbuffer->stride = stride; /* in bytes */
       }
 
-      velements[attr].src_offset =
-         (unsigned) (arrays[mesaAttr]->Ptr - low_addr);
-      velements[attr].instance_divisor = arrays[mesaAttr]->InstanceDivisor;
+      velements[attr].src_offset = src_offset;
+      velements[attr].instance_divisor = array->InstanceDivisor;
       velements[attr].vertex_buffer_index = 0;
-      velements[attr].src_format =
-         st_pipe_vertex_format(arrays[mesaAttr]->Type,
-                               arrays[mesaAttr]->Size,
-                               arrays[mesaAttr]->Format,
-                               arrays[mesaAttr]->Normalized);
+      velements[attr].src_format = st_pipe_vertex_format(array->Type,
+                                                         array->Size,
+                                                         array->Format,
+                                                         array->Normalized);
       assert(velements[attr].src_format);
    }
 }
@@ -389,8 +395,12 @@ setup_non_interleaved_attribs(struct gl_context *ctx,
 
    for (attr = 0; attr < vpv->num_inputs; attr++) {
       const GLuint mesaAttr = vp->index_to_input[attr];
-      struct gl_buffer_object *bufobj = arrays[mesaAttr]->BufferObj;
-      GLsizei stride = arrays[mesaAttr]->StrideB;
+      const struct gl_client_array *array = arrays[mesaAttr];
+      struct gl_buffer_object *bufobj = array->BufferObj;
+      GLuint element_size = array->_ElementSize;
+      GLsizei stride = array->StrideB;
+
+      assert(element_size == array->Size * _mesa_sizeof_type(array->Type));
 
       if (bufobj && bufobj->Name) {
          /* Attribute data is in a VBO.
@@ -402,49 +412,54 @@ setup_non_interleaved_attribs(struct gl_context *ctx,
 
          vbuffer[attr].buffer = NULL;
          pipe_resource_reference(&vbuffer[attr].buffer, stobj->buffer);
-         vbuffer[attr].buffer_offset = pointer_to_offset(arrays[mesaAttr]->Ptr);
+         vbuffer[attr].buffer_offset = pointer_to_offset(array->Ptr);
       }
       else {
          /* wrap user data */
-         if (arrays[mesaAttr]->Ptr) {
-            uint divisor = arrays[mesaAttr]->InstanceDivisor;
-            uint length = (divisor ? num_instances / divisor : max_index) + 1;
-            vbuffer[attr].buffer =
-              pipe_user_buffer_create(pipe->screen,
-                                      (void *) arrays[mesaAttr]->Ptr,
-                                      stride * length,
-                                      PIPE_BIND_VERTEX_BUFFER);
+         uint bytes;
+         void *ptr;
+
+         if (array->Ptr) {
+            uint divisor = array->InstanceDivisor;
+            uint last_index = divisor ? num_instances / divisor : max_index;
+
+            bytes = stride * last_index + element_size;
+
+            ptr = (void *) array->Ptr;
          }
          else {
             /* no array, use ctx->Current.Attrib[] value */
-            uint bytes = sizeof(ctx->Current.Attrib[0]);
-            vbuffer[attr].buffer =
-              pipe_user_buffer_create(pipe->screen,
-                                      (void *) ctx->Current.Attrib[mesaAttr],
-                                      bytes,
-                                      PIPE_BIND_VERTEX_BUFFER);
+            bytes = element_size = sizeof(ctx->Current.Attrib[0]);
+            ptr = (void *) ctx->Current.Attrib[mesaAttr];
             stride = 0;
          }
 
+         assert(ptr);
+         assert(bytes);
+
+         vbuffer[attr].buffer =
+            pipe_user_buffer_create(pipe->screen, ptr, bytes,
+                                    PIPE_BIND_VERTEX_BUFFER);
+
          vbuffer[attr].buffer_offset = 0;
 
          /* Track user vertex buffers. */
-         pipe_resource_reference(&st->user_vb[attr], vbuffer[attr].buffer);
-         st->user_vb_stride[attr] = stride;
-         st->num_user_vbs = MAX2(st->num_user_vbs, attr+1);
+         pipe_resource_reference(&st->user_attrib[attr].buffer, vbuffer[attr].buffer);
+         st->user_attrib[attr].element_size = element_size;
+         st->user_attrib[attr].stride = stride;
+         st->num_user_attribs = MAX2(st->num_user_attribs, attr + 1);
       }
 
       /* common-case setup */
       vbuffer[attr].stride = stride; /* in bytes */
 
       velements[attr].src_offset = 0;
-      velements[attr].instance_divisor = arrays[mesaAttr]->InstanceDivisor;
+      velements[attr].instance_divisor = array->InstanceDivisor;
       velements[attr].vertex_buffer_index = attr;
-      velements[attr].src_format
-         = st_pipe_vertex_format(arrays[mesaAttr]->Type,
-                                 arrays[mesaAttr]->Size,
-                                 arrays[mesaAttr]->Format,
-                                 arrays[mesaAttr]->Normalized);
+      velements[attr].src_format = st_pipe_vertex_format(array->Type,
+                                                         array->Size,
+                                                         array->Format,
+                                                         array->Normalized);
       assert(velements[attr].src_format);
    }
 }
@@ -575,10 +590,10 @@ st_validate_varrays(struct gl_context *ctx,
    memset(velements, 0, sizeof(struct pipe_vertex_element) * vpv->num_inputs);
 
    /* Unreference any user vertex buffers. */
-   for (i = 0; i < st->num_user_vbs; i++) {
-      pipe_resource_reference(&st->user_vb[i], NULL);
+   for (i = 0; i < st->num_user_attribs; i++) {
+      pipe_resource_reference(&st->user_attrib[i].buffer, NULL);
    }
-   st->num_user_vbs = 0;
+   st->num_user_attribs = 0;
 
    /*
     * Setup the vbuffer[] and velements[] arrays.
@@ -594,7 +609,8 @@ st_validate_varrays(struct gl_context *ctx,
    }
    else {
       setup_non_interleaved_attribs(ctx, vp, vpv, arrays,
-                                    vbuffer, velements, max_index, num_instances);
+                                    vbuffer, velements, max_index,
+                                    num_instances);
       num_vbuffers = vpv->num_inputs;
       num_velements = vpv->num_inputs;
    }
@@ -647,7 +663,8 @@ st_draw_vbo(struct gl_context *ctx,
       for (i = 0; i < nr_prims; i++) {
          num_instances = MAX2(num_instances, prims[i].num_instances);
       }
-   } else {
+   }
+   else {
       /* Get min/max index for non-indexed drawing. */
       min_index = ~0;
       max_index = 0;
@@ -690,20 +707,20 @@ st_draw_vbo(struct gl_context *ctx,
 
    /* Notify the driver that the content of user buffers may have been
     * changed. */
-   if (!new_array && st->num_user_vbs) {
-      for (i = 0; i < st->num_user_vbs; i++) {
-         if (st->user_vb[i]) {
-            unsigned stride = st->user_vb_stride[i];
-
-            if (stride) {
-               pipe->redefine_user_buffer(pipe, st->user_vb[i],
-                                          min_index * stride,
-                                          (max_index + 1 - min_index) * stride);
-            } else {
-               /* stride == 0 */
-               pipe->redefine_user_buffer(pipe, st->user_vb[i],
-                                          0, st->user_vb[i]->width0);
-            }
+   assert(max_index >= min_index);
+   if (!new_array && st->num_user_attribs) {
+      for (i = 0; i < st->num_user_attribs; i++) {
+         if (st->user_attrib[i].buffer) {
+            unsigned element_size = st->user_attrib[i].element_size;
+            unsigned stride = st->user_attrib[i].stride;
+            unsigned min_offset = min_index * stride;
+            unsigned max_offset = max_index * stride + element_size;
+
+            assert(max_offset > min_offset);
+
+            pipe->redefine_user_buffer(pipe, st->user_attrib[i].buffer,
+                                       min_offset,
+                                       max_offset - min_offset);
          }
       }
    }
@@ -743,7 +760,8 @@ st_draw_vbo(struct gl_context *ctx,
 }
 
 
-void st_init_draw( struct st_context *st )
+void
+st_init_draw(struct st_context *st)
 {
    struct gl_context *ctx = st->ctx;
 
@@ -763,11 +781,10 @@ void st_init_draw( struct st_context *st )
 }
 
 
-void st_destroy_draw( struct st_context *st )
+void
+st_destroy_draw(struct st_context *st)
 {
 #if FEATURE_feedback || FEATURE_rastpos
    draw_destroy(st->draw);
 #endif
 }
-
-
index 5d3c278228f6e352d2baad513ec37f7c7a80451c..a7b50ce977aadd6712cfd07ac89897fe8b624d55 100644 (file)
@@ -69,7 +69,7 @@ st_feedback_draw_vbo(struct gl_context *ctx,
 
 /* Internal function:
  */
-extern GLuint
+extern enum pipe_format
 st_pipe_vertex_format(GLenum type, GLuint size, GLenum format,
                       GLboolean normalized);
 
index 1e1220bfe5279a4339d78ed96610f3780edc67ff..96a08b39100bf5020da695693b2fbb2421659d04 100644 (file)
@@ -111,6 +111,7 @@ st_feedback_draw_vbo(struct gl_context *ctx,
    struct pipe_transfer *vb_transfer[PIPE_MAX_ATTRIBS];
    struct pipe_transfer *ib_transfer = NULL;
    GLuint attr, i;
+   const GLubyte *low_addr = NULL;
    const void *mapped_indices = NULL;
 
    assert(draw);
@@ -141,6 +142,16 @@ st_feedback_draw_vbo(struct gl_context *ctx,
    draw_bind_vertex_shader(draw, st->vp_variant->draw_shader);
    set_feedback_vertex_format(ctx);
 
+   /* Find the lowest address of the arrays we're drawing */
+   if (vp->num_inputs) {
+      low_addr = arrays[vp->index_to_input[0]]->Ptr;
+
+      for (attr = 1; attr < vp->num_inputs; attr++) {
+         const GLubyte *start = arrays[vp->index_to_input[attr]]->Ptr;
+         low_addr = MIN2(low_addr, start);
+      }
+   }
+
    /* loop over TGSI shader inputs to determine vertex buffer
     * and attribute info
     */
@@ -159,8 +170,8 @@ st_feedback_draw_vbo(struct gl_context *ctx,
 
          vbuffers[attr].buffer = NULL;
          pipe_resource_reference(&vbuffers[attr].buffer, stobj->buffer);
-         vbuffers[attr].buffer_offset = pointer_to_offset(arrays[0]->Ptr);
-         velements[attr].src_offset = arrays[mesaAttr]->Ptr - arrays[0]->Ptr;
+         vbuffers[attr].buffer_offset = pointer_to_offset(low_addr);
+         velements[attr].src_offset = arrays[mesaAttr]->Ptr - low_addr;
       }
       else {
          /* attribute data is in user-space memory, not a VBO */
index bbcae3b02e9fc560675a22ea8275fa3675bdd645..bdc08949dd418570d96ad2ca36ffb86ff4ca06e6 100644 (file)
@@ -228,6 +228,7 @@ void st_init_extensions(struct st_context *st)
    ctx->Extensions.ARB_half_float_pixel = GL_TRUE;
    ctx->Extensions.ARB_map_buffer_range = GL_TRUE;
    ctx->Extensions.ARB_multisample = GL_TRUE;
+   ctx->Extensions.ARB_sampler_objects = GL_TRUE;
    ctx->Extensions.ARB_texture_border_clamp = GL_TRUE; /* XXX temp */
    ctx->Extensions.ARB_texture_compression = GL_TRUE;
    ctx->Extensions.ARB_texture_cube_map = GL_TRUE;
@@ -381,6 +382,18 @@ void st_init_extensions(struct st_context *st)
       ctx->Extensions.EXT_packed_depth_stencil = GL_TRUE;
    }
 
+   /* float support - assume nothing exclusively supports 64-bit floats */
+   if (screen->is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_FLOAT,
+                                   PIPE_TEXTURE_2D, 0,
+                                   PIPE_BIND_SAMPLER_VIEW |
+                                   PIPE_BIND_RENDER_TARGET) &&
+      screen->is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_FLOAT,
+                                   PIPE_TEXTURE_2D, 0,
+                                   PIPE_BIND_SAMPLER_VIEW |
+                                   PIPE_BIND_RENDER_TARGET)) {
+      ctx->Extensions.ARB_texture_float = GL_TRUE;
+   }
+
    /* sRGB support */
    if (screen->is_format_supported(screen, PIPE_FORMAT_A8B8G8R8_SRGB,
                                    PIPE_TEXTURE_2D, 0,
@@ -453,6 +466,12 @@ void st_init_extensions(struct st_context *st)
       ctx->Extensions.ATI_texture_compression_3dc = GL_TRUE;
    }
 
+   if (screen->is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_SNORM,
+                                   PIPE_TEXTURE_2D, 0,
+                                   PIPE_BIND_SAMPLER_VIEW)) {
+      ctx->Extensions.EXT_texture_snorm = GL_TRUE;
+   }
+
    /* ycbcr support */
    if (screen->is_format_supported(screen, PIPE_FORMAT_UYVY, 
                                    PIPE_TEXTURE_2D, 0,
@@ -508,6 +527,35 @@ void st_init_extensions(struct st_context *st)
       ctx->Extensions.ARB_depth_clamp = GL_TRUE;
    }
 
+   /* This extension does not actually require support of floating point
+    * render targets, just clamping controls.
+    * Advertise this extension if either fragment color clamping is supported
+    * or no render targets having color values outside of the range [0, 1]
+    * are supported, in which case the fragment color clamping has no effect
+    * on rendering.
+    */
+   if (screen->get_param(screen, PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL) ||
+       (!screen->is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_SNORM,
+                                     PIPE_TEXTURE_2D, 0,
+                                     PIPE_BIND_RENDER_TARGET) &&
+        !screen->is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_SNORM,
+                                             PIPE_TEXTURE_2D, 0,
+                                             PIPE_BIND_RENDER_TARGET) &&
+        !screen->is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_FLOAT,
+                                     PIPE_TEXTURE_2D, 0,
+                                     PIPE_BIND_RENDER_TARGET) &&
+        !screen->is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_FLOAT,
+                                     PIPE_TEXTURE_2D, 0,
+                                     PIPE_BIND_RENDER_TARGET) &&
+        !screen->is_format_supported(screen, PIPE_FORMAT_R11G11B10_FLOAT,
+                                     PIPE_TEXTURE_2D, 0,
+                                     PIPE_BIND_RENDER_TARGET) &&
+        !screen->is_format_supported(screen, PIPE_FORMAT_R9G9B9E5_FLOAT,
+                                     PIPE_TEXTURE_2D, 0,
+                                     PIPE_BIND_RENDER_TARGET))) {
+      ctx->Extensions.ARB_color_buffer_float = GL_TRUE;
+   }
+
    if (screen->get_param(screen, PIPE_CAP_SHADER_STENCIL_EXPORT)) {
       ctx->Extensions.ARB_shader_stencil_export = GL_TRUE;
    }
index 3d8637ab37ef08e8d6c470085f8c485e56b06c65..bbaa84d7fdffbf040994f4f9f156863d9be2bb8d 100644 (file)
@@ -214,6 +214,39 @@ st_mesa_format_to_pipe_format(gl_format mesaFormat)
    case MESA_FORMAT_SARGB8:
       return PIPE_FORMAT_B8G8R8A8_SRGB;
 #endif
+   case MESA_FORMAT_RGBA_FLOAT32:
+      return PIPE_FORMAT_R32G32B32A32_FLOAT;
+   case MESA_FORMAT_RGBA_FLOAT16:
+      return PIPE_FORMAT_R16G16B16A16_FLOAT;
+   case MESA_FORMAT_RGB_FLOAT32:
+      return PIPE_FORMAT_R32G32B32_FLOAT;
+   case MESA_FORMAT_RGB_FLOAT16:
+      return PIPE_FORMAT_R16G16B16_FLOAT;
+   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32:
+      return PIPE_FORMAT_L32A32_FLOAT;
+   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16:
+      return PIPE_FORMAT_L16A16_FLOAT;
+   case MESA_FORMAT_LUMINANCE_FLOAT32:
+      return PIPE_FORMAT_L32_FLOAT;
+   case MESA_FORMAT_LUMINANCE_FLOAT16:
+      return PIPE_FORMAT_L16_FLOAT;
+   case MESA_FORMAT_ALPHA_FLOAT32:
+      return PIPE_FORMAT_A32_FLOAT;
+   case MESA_FORMAT_ALPHA_FLOAT16:
+      return PIPE_FORMAT_A16_FLOAT;
+   case MESA_FORMAT_INTENSITY_FLOAT32:
+      return PIPE_FORMAT_I32_FLOAT;
+   case MESA_FORMAT_INTENSITY_FLOAT16:
+      return PIPE_FORMAT_I16_FLOAT;
+   case MESA_FORMAT_R_FLOAT32:
+      return PIPE_FORMAT_R32_FLOAT;
+   case MESA_FORMAT_R_FLOAT16:
+      return PIPE_FORMAT_R16_FLOAT;
+   case MESA_FORMAT_RG_FLOAT32:
+      return PIPE_FORMAT_R32G32_FLOAT;
+   case MESA_FORMAT_RG_FLOAT16:
+      return PIPE_FORMAT_R16G16_FLOAT;
+
    case MESA_FORMAT_R8:
       return PIPE_FORMAT_R8_UNORM;
    case MESA_FORMAT_R16:
@@ -259,6 +292,39 @@ st_mesa_format_to_pipe_format(gl_format mesaFormat)
    case MESA_FORMAT_SIGNED_LA_LATC2:
       return PIPE_FORMAT_LATC2_SNORM;
 
+   /* signed normalized formats */
+   case MESA_FORMAT_SIGNED_R8:
+      return PIPE_FORMAT_R8_SNORM;
+   case MESA_FORMAT_SIGNED_RG88_REV:
+      return PIPE_FORMAT_R8G8_SNORM;
+   case MESA_FORMAT_SIGNED_RGBA8888_REV:
+      return PIPE_FORMAT_R8G8B8A8_SNORM;
+
+   case MESA_FORMAT_SIGNED_A8:
+      return PIPE_FORMAT_A8_SNORM;
+   case MESA_FORMAT_SIGNED_L8:
+      return PIPE_FORMAT_L8_SNORM;
+   case MESA_FORMAT_SIGNED_AL88:
+      return PIPE_FORMAT_L8A8_SNORM;
+   case MESA_FORMAT_SIGNED_I8:
+      return PIPE_FORMAT_I8_SNORM;
+
+   case MESA_FORMAT_SIGNED_R16:
+      return PIPE_FORMAT_R16_SNORM;
+   case MESA_FORMAT_SIGNED_GR1616:
+      return PIPE_FORMAT_R16G16_SNORM;
+   case MESA_FORMAT_SIGNED_RGBA_16:
+      return PIPE_FORMAT_R16G16B16A16_SNORM;
+
+   case MESA_FORMAT_SIGNED_A16:
+      return PIPE_FORMAT_A16_SNORM;
+   case MESA_FORMAT_SIGNED_L16:
+      return PIPE_FORMAT_L16_SNORM;
+   case MESA_FORMAT_SIGNED_AL1616:
+      return PIPE_FORMAT_L16A16_SNORM;
+   case MESA_FORMAT_SIGNED_I16:
+      return PIPE_FORMAT_I16_SNORM;
+
    default:
       assert(0);
       return PIPE_FORMAT_NONE;
@@ -318,8 +384,6 @@ st_pipe_format_to_mesa_format(enum pipe_format format)
 
    case PIPE_FORMAT_R16G16B16A16_UNORM:
       return MESA_FORMAT_RGBA_16;
-   case PIPE_FORMAT_R16G16B16A16_SNORM:
-      return MESA_FORMAT_SIGNED_RGBA_16;
 
    case PIPE_FORMAT_Z16_UNORM:
       return MESA_FORMAT_Z16;
@@ -372,6 +436,38 @@ st_pipe_format_to_mesa_format(enum pipe_format format)
    case PIPE_FORMAT_B8G8R8A8_SRGB:
       return MESA_FORMAT_SARGB8;
 #endif
+   case PIPE_FORMAT_R32G32B32A32_FLOAT:
+      return MESA_FORMAT_RGBA_FLOAT32;
+   case PIPE_FORMAT_R16G16B16A16_FLOAT:
+      return MESA_FORMAT_RGBA_FLOAT16;
+   case PIPE_FORMAT_R32G32B32_FLOAT:
+      return MESA_FORMAT_RGB_FLOAT32;
+   case PIPE_FORMAT_R16G16B16_FLOAT:
+      return MESA_FORMAT_RGB_FLOAT16;
+   case PIPE_FORMAT_L32A32_FLOAT:
+      return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32;
+   case PIPE_FORMAT_L16A16_FLOAT:
+      return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16;
+   case PIPE_FORMAT_L32_FLOAT:
+      return MESA_FORMAT_LUMINANCE_FLOAT32;
+   case PIPE_FORMAT_L16_FLOAT:
+      return MESA_FORMAT_LUMINANCE_FLOAT16;
+   case PIPE_FORMAT_A32_FLOAT:
+      return MESA_FORMAT_ALPHA_FLOAT32;
+   case PIPE_FORMAT_A16_FLOAT:
+      return MESA_FORMAT_ALPHA_FLOAT16;
+   case PIPE_FORMAT_I32_FLOAT:
+      return MESA_FORMAT_INTENSITY_FLOAT32;
+   case PIPE_FORMAT_I16_FLOAT:
+      return MESA_FORMAT_INTENSITY_FLOAT16;
+   case PIPE_FORMAT_R32_FLOAT:
+      return MESA_FORMAT_R_FLOAT32;
+   case PIPE_FORMAT_R16_FLOAT:
+      return MESA_FORMAT_R_FLOAT16;
+   case PIPE_FORMAT_R32G32_FLOAT:
+      return MESA_FORMAT_RG_FLOAT32;
+   case PIPE_FORMAT_R16G16_FLOAT:
+      return MESA_FORMAT_RG_FLOAT16;
 
    case PIPE_FORMAT_R8_UNORM:
       return MESA_FORMAT_R8;
@@ -416,6 +512,39 @@ st_pipe_format_to_mesa_format(enum pipe_format format)
    //case PIPE_FORMAT_LATC2_SNORM:
    //   return MESA_FORMAT_SIGNED_LA_LATC2;
 
+   /* signed normalized formats */
+   case PIPE_FORMAT_R8_SNORM:
+      return MESA_FORMAT_SIGNED_R8;
+   case PIPE_FORMAT_R8G8_SNORM:
+      return MESA_FORMAT_SIGNED_RG88_REV;
+   case PIPE_FORMAT_R8G8B8A8_SNORM:
+      return MESA_FORMAT_SIGNED_RGBA8888_REV;
+
+   case PIPE_FORMAT_A8_SNORM:
+      return MESA_FORMAT_SIGNED_A8;
+   case PIPE_FORMAT_L8_SNORM:
+      return MESA_FORMAT_SIGNED_L8;
+   case PIPE_FORMAT_L8A8_SNORM:
+      return MESA_FORMAT_SIGNED_AL88;
+   case PIPE_FORMAT_I8_SNORM:
+      return MESA_FORMAT_SIGNED_I8;
+
+   case PIPE_FORMAT_R16_SNORM:
+      return MESA_FORMAT_SIGNED_R16;
+   case PIPE_FORMAT_R16G16_SNORM:
+      return MESA_FORMAT_SIGNED_GR1616;
+   case PIPE_FORMAT_R16G16B16A16_SNORM:
+      return MESA_FORMAT_SIGNED_RGBA_16;
+
+   case PIPE_FORMAT_A16_SNORM:
+      return MESA_FORMAT_SIGNED_A16;
+   case PIPE_FORMAT_L16_SNORM:
+      return MESA_FORMAT_SIGNED_L16;
+   case PIPE_FORMAT_L16A16_SNORM:
+      return MESA_FORMAT_SIGNED_AL1616;
+   case PIPE_FORMAT_I16_SNORM:
+      return MESA_FORMAT_SIGNED_I16;
+
    default:
       assert(0);
       return MESA_FORMAT_NONE;
@@ -823,6 +952,178 @@ st_choose_format(struct pipe_screen *screen, GLenum internalFormat,
          return PIPE_FORMAT_L8_SRGB;
       return default_srgba_format( screen, target, sample_count, bindings);
 
+   /* prefer formats in order of data size, choosing 16-bit ones if equal sized */
+   case GL_RGBA16F_ARB:
+   case GL_RGB16F_ARB:
+      {
+         static const enum pipe_format formats[] = {
+               PIPE_FORMAT_R16G16B16A16_FLOAT,
+               PIPE_FORMAT_R32G32B32A32_FLOAT
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+   case GL_LUMINANCE_ALPHA16F_ARB:
+      {
+         static const enum pipe_format formats[] = {
+               PIPE_FORMAT_L16A16_FLOAT,
+               PIPE_FORMAT_R16G16B16A16_FLOAT,
+               PIPE_FORMAT_L32A32_FLOAT,
+               PIPE_FORMAT_R32G32B32A32_FLOAT
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+   case GL_ALPHA16F_ARB:
+      {
+         static const enum pipe_format formats[] = {
+               PIPE_FORMAT_A16_FLOAT,
+               PIPE_FORMAT_L16A16_FLOAT,
+               PIPE_FORMAT_A32_FLOAT,
+               PIPE_FORMAT_R16G16B16A16_FLOAT,
+               PIPE_FORMAT_L32A32_FLOAT,
+               PIPE_FORMAT_R32G32B32A32_FLOAT
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+   case GL_INTENSITY16F_ARB:
+      {
+         static const enum pipe_format formats[] = {
+               PIPE_FORMAT_I16_FLOAT,
+               PIPE_FORMAT_L16A16_FLOAT,
+               PIPE_FORMAT_I32_FLOAT,
+               PIPE_FORMAT_R16G16B16A16_FLOAT,
+               PIPE_FORMAT_L32A32_FLOAT,
+               PIPE_FORMAT_R32G32B32A32_FLOAT
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+   case GL_LUMINANCE16F_ARB:
+      {
+         static const enum pipe_format formats[] = {
+               PIPE_FORMAT_L16_FLOAT,
+               PIPE_FORMAT_L16A16_FLOAT,
+               PIPE_FORMAT_L32_FLOAT,
+               PIPE_FORMAT_R16G16B16A16_FLOAT,
+               PIPE_FORMAT_L32A32_FLOAT,
+               PIPE_FORMAT_R32G32B32A32_FLOAT
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+   case GL_R16F:
+      {
+         static const enum pipe_format formats[] = {
+               PIPE_FORMAT_R16_FLOAT,
+               PIPE_FORMAT_R16G16_FLOAT,
+               PIPE_FORMAT_R32_FLOAT,
+               PIPE_FORMAT_R16G16B16A16_FLOAT,
+               PIPE_FORMAT_R32G32_FLOAT,
+               PIPE_FORMAT_R32G32B32A32_FLOAT
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+   case GL_RG16F:
+      {
+         static const enum pipe_format formats[] = {
+               PIPE_FORMAT_R16G16_FLOAT,
+               PIPE_FORMAT_R16G16B16A16_FLOAT,
+               PIPE_FORMAT_R32G32_FLOAT,
+               PIPE_FORMAT_R32G32B32A32_FLOAT
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+
+   /* try a 32-bit format if available, otherwise fallback to a 16-bit one */
+   case GL_RGBA32F_ARB:
+   case GL_RGB32F_ARB:
+      {
+         static const enum pipe_format formats[] = {
+               PIPE_FORMAT_R32G32B32A32_FLOAT,
+               PIPE_FORMAT_R16G16B16A16_FLOAT
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+   case GL_LUMINANCE_ALPHA32F_ARB:
+      {
+         static const enum pipe_format formats[] = {
+               PIPE_FORMAT_L32A32_FLOAT,
+               PIPE_FORMAT_R32G32B32A32_FLOAT,
+               PIPE_FORMAT_L16A16_FLOAT,
+               PIPE_FORMAT_R16G16B16A16_FLOAT
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+   case GL_ALPHA32F_ARB:
+      {
+         static const enum pipe_format formats[] = {
+               PIPE_FORMAT_A32_FLOAT,
+               PIPE_FORMAT_L32A32_FLOAT,
+               PIPE_FORMAT_R32G32B32A32_FLOAT,
+               PIPE_FORMAT_A16_FLOAT,
+               PIPE_FORMAT_L16A16_FLOAT,
+               PIPE_FORMAT_R16G16B16A16_FLOAT
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+   case GL_INTENSITY32F_ARB:
+      {
+         static const enum pipe_format formats[] = {
+               PIPE_FORMAT_I32_FLOAT,
+               PIPE_FORMAT_L32A32_FLOAT,
+               PIPE_FORMAT_R32G32B32A32_FLOAT,
+               PIPE_FORMAT_I16_FLOAT,
+               PIPE_FORMAT_L16A16_FLOAT,
+               PIPE_FORMAT_R16G16B16A16_FLOAT
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+   case GL_LUMINANCE32F_ARB:
+      {
+         static const enum pipe_format formats[] = {
+               PIPE_FORMAT_L32_FLOAT,
+               PIPE_FORMAT_L32A32_FLOAT,
+               PIPE_FORMAT_R32G32B32A32_FLOAT,
+               PIPE_FORMAT_L16_FLOAT,
+               PIPE_FORMAT_L16A16_FLOAT,
+               PIPE_FORMAT_R16G16B16A16_FLOAT
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+   case GL_R32F:
+      {
+         static const enum pipe_format formats[] = {
+               PIPE_FORMAT_R32_FLOAT,
+               PIPE_FORMAT_R32G32_FLOAT,
+               PIPE_FORMAT_R32G32B32A32_FLOAT,
+               PIPE_FORMAT_R16_FLOAT,
+               PIPE_FORMAT_R16G16_FLOAT,
+               PIPE_FORMAT_R16G16B16A16_FLOAT
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+   case GL_RG32F:
+      {
+         static const enum pipe_format formats[] = {
+               PIPE_FORMAT_R32G32_FLOAT,
+               PIPE_FORMAT_R32G32B32A32_FLOAT,
+               PIPE_FORMAT_R16G16_FLOAT,
+               PIPE_FORMAT_R16G16B16A16_FLOAT
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+
    case GL_RED:
    case GL_R8:
       if (screen->is_format_supported(screen, PIPE_FORMAT_R8_UNORM, target,
@@ -999,6 +1300,170 @@ st_choose_format(struct pipe_screen *screen, GLenum internalFormat,
          return PIPE_FORMAT_R32G32B32A32_USCALED;
       return PIPE_FORMAT_NONE;
 
+   /* signed normalized formats */
+   case GL_RED_SNORM:
+   case GL_R8_SNORM:
+      {
+         static const enum pipe_format formats[] = {
+            PIPE_FORMAT_R8_SNORM,
+            PIPE_FORMAT_R8G8_SNORM,
+            PIPE_FORMAT_R8G8B8A8_SNORM,
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+
+   case GL_R16_SNORM:
+      {
+         static const enum pipe_format formats[] = {
+            PIPE_FORMAT_R16_SNORM,
+            PIPE_FORMAT_R16G16_SNORM,
+            PIPE_FORMAT_R16G16B16A16_SNORM,
+            PIPE_FORMAT_R8_SNORM,
+            PIPE_FORMAT_R8G8_SNORM,
+            PIPE_FORMAT_R8G8B8A8_SNORM,
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+
+   case GL_RG_SNORM:
+   case GL_RG8_SNORM:
+      {
+         static const enum pipe_format formats[] = {
+            PIPE_FORMAT_R8G8_SNORM,
+            PIPE_FORMAT_R8G8B8A8_SNORM,
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+
+   case GL_RG16_SNORM:
+      {
+         static const enum pipe_format formats[] = {
+            PIPE_FORMAT_R16G16_SNORM,
+            PIPE_FORMAT_R16G16B16A16_SNORM,
+            PIPE_FORMAT_R8G8_SNORM,
+            PIPE_FORMAT_R8G8B8A8_SNORM,
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+
+   case GL_RGB_SNORM:
+   case GL_RGB8_SNORM:
+   case GL_RGBA_SNORM:
+   case GL_RGBA8_SNORM:
+      if (screen->is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_SNORM,
+                                      target,
+                                      sample_count, bindings))
+         return PIPE_FORMAT_R8G8B8A8_SNORM;
+      return PIPE_FORMAT_NONE;
+
+   case GL_RGB16_SNORM:
+   case GL_RGBA16_SNORM:
+      {
+         static const enum pipe_format formats[] = {
+            PIPE_FORMAT_R16G16B16A16_SNORM,
+            PIPE_FORMAT_R8G8B8A8_SNORM,
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+
+
+   case GL_ALPHA_SNORM:
+   case GL_ALPHA8_SNORM:
+      {
+         static const enum pipe_format formats[] = {
+            PIPE_FORMAT_A8_SNORM,
+            PIPE_FORMAT_R8G8B8A8_SNORM,
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+
+   case GL_ALPHA16_SNORM:
+      {
+         static const enum pipe_format formats[] = {
+            PIPE_FORMAT_A16_SNORM,
+            PIPE_FORMAT_R16G16B16A16_SNORM,
+            PIPE_FORMAT_A8_SNORM,
+            PIPE_FORMAT_R8G8B8A8_SNORM,
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+
+   case GL_LUMINANCE_SNORM:
+   case GL_LUMINANCE8_SNORM:
+      {
+         static const enum pipe_format formats[] = {
+            PIPE_FORMAT_L8_SNORM,
+            PIPE_FORMAT_R8G8B8A8_SNORM,
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+
+   case GL_LUMINANCE16_SNORM:
+      {
+         static const enum pipe_format formats[] = {
+            PIPE_FORMAT_L16_SNORM,
+            PIPE_FORMAT_R16G16B16A16_SNORM,
+            PIPE_FORMAT_L8_SNORM,
+            PIPE_FORMAT_R8G8B8A8_SNORM,
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+
+   case GL_LUMINANCE_ALPHA_SNORM:
+   case GL_LUMINANCE8_ALPHA8_SNORM:
+      {
+         static const enum pipe_format formats[] = {
+            PIPE_FORMAT_L8A8_SNORM,
+            PIPE_FORMAT_R8G8B8A8_SNORM,
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+
+   case GL_LUMINANCE16_ALPHA16_SNORM:
+      {
+         static const enum pipe_format formats[] = {
+            PIPE_FORMAT_L16A16_SNORM,
+            PIPE_FORMAT_R16G16B16A16_SNORM,
+            PIPE_FORMAT_L8A8_SNORM,
+            PIPE_FORMAT_R8G8B8A8_SNORM,
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+
+   case GL_INTENSITY_SNORM:
+   case GL_INTENSITY8_SNORM:
+      {
+         static const enum pipe_format formats[] = {
+            PIPE_FORMAT_I8_SNORM,
+            PIPE_FORMAT_R8G8B8A8_SNORM,
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+
+   case GL_INTENSITY16_SNORM:
+      {
+         static const enum pipe_format formats[] = {
+            PIPE_FORMAT_I16_SNORM,
+            PIPE_FORMAT_R16G16B16A16_SNORM,
+            PIPE_FORMAT_I8_SNORM,
+            PIPE_FORMAT_R8G8B8A8_SNORM,
+         };
+         return find_supported_format(screen, formats, Elements(formats),
+               target, sample_count, bindings);
+      }
+
    default:
       return PIPE_FORMAT_NONE;
    }
index d50c3c9af79a01b743d0f109b1afa58b548bd5d8..903e30df52f413d982a99dcccd5d7575aadc955b 100644 (file)
@@ -163,6 +163,21 @@ st_get_texture_sampler_view(struct st_texture_object *stObj,
 }
 
 
+/**
+ * Get pointer to the active sampler object for the given texture unit.
+ * This will either be a user-defined sampler object or the texture
+ * object's own sampler state.
+ */
+static INLINE struct gl_sampler_object *
+st_get_mesa_sampler(const struct gl_context *ctx, GLuint unit)
+{
+   if (ctx->Texture.Unit[unit].Sampler)
+      return ctx->Texture.Unit[unit].Sampler;
+   else
+      return &ctx->Texture.Unit[unit]._Current->Sampler;
+}
+
+
 extern struct pipe_resource *
 st_texture_create(struct st_context *st,
                   enum pipe_texture_target target,
index 2c02a01327f246d460213a41498092f7eb86c27b..2e8767a33d9f039e04d3754667c5b0642e31b8e2 100644 (file)
@@ -215,12 +215,7 @@ compute_coveragef(const GLfloat v0[3], const GLfloat v1[3],
    GLint stop = 4, i;
    GLfloat insideCount = 16.0F;
 
-#ifdef DEBUG
-   {
-      const GLfloat area = dx0 * dy1 - dx1 * dy0;
-      ASSERT(area >= 0.0);
-   }
-#endif
+   ASSERT(dx0 * dy1 - dx1 * dy0 >= 0.0); /* area >= 0.0 */
 
    for (i = 0; i < stop; i++) {
       const GLfloat sx = x + samples[i][0];
index 491fcfcdbbf96f121875de620e56be5bf2e75de4..b3e39689cfa6621c8d0f0cf7e8f9f7bc6f76ed1b 100644 (file)
@@ -248,18 +248,11 @@ _swrast_update_fog_state( struct gl_context *ctx )
    SWcontext *swrast = SWRAST_CONTEXT(ctx);
    const struct gl_fragment_program *fp = ctx->FragmentProgram._Current;
 
+   assert((fp == NULL) || (fp->Base.Target == GL_FRAGMENT_PROGRAM_ARB));
+
    /* determine if fog is needed, and if so, which fog mode */
-   swrast->_FogEnabled = GL_FALSE;
-   if (fp && fp->Base.Target == GL_FRAGMENT_PROGRAM_ARB) {
-      if (fp->FogOption != GL_NONE) {
-         swrast->_FogEnabled = GL_TRUE;
-         swrast->_FogMode = fp->FogOption;
-      }
-   }
-   else if (ctx->Fog.Enabled) {
-      swrast->_FogEnabled = GL_TRUE;
-      swrast->_FogMode = ctx->Fog.Mode;
-   }
+   swrast->_FogEnabled = (fp == NULL && ctx->Fog.Enabled);
+   swrast->_FogMode = ctx->Fog.Mode;
 }
 
 
index e391043f4d9976014aa6143d83f9279931f5efef..b6bfeaed4a91680b4af07f588ce357461dc98827 100644 (file)
@@ -71,7 +71,7 @@ fetch_texel_lod( struct gl_context *ctx, const GLfloat texcoord[4], GLfloat lamb
       SWcontext *swrast = SWRAST_CONTEXT(ctx);
       GLfloat rgba[4];
 
-      lambda = CLAMP(lambda, texObj->MinLod, texObj->MaxLod);
+      lambda = CLAMP(lambda, texObj->Sampler.MinLod, texObj->Sampler.MaxLod);
 
       swrast->TextureSample[unit](ctx, texObj, 1,
                                   (const GLfloat (*)[4]) texcoord,
@@ -115,9 +115,9 @@ fetch_texel_deriv( struct gl_context *ctx, const GLfloat texcoord[4],
                                       texcoord[0], texcoord[1], texcoord[3],
                                       1.0F / texcoord[3]);
 
-      lambda += lodBias + texUnit->LodBias + texObj->LodBias;
+      lambda += lodBias + texUnit->LodBias + texObj->Sampler.LodBias;
 
-      lambda = CLAMP(lambda, texObj->MinLod, texObj->MaxLod);
+      lambda = CLAMP(lambda, texObj->Sampler.MinLod, texObj->Sampler.MaxLod);
 
       swrast->TextureSample[unit](ctx, texObj, 1,
                                   (const GLfloat (*)[4]) texcoord,
index 5c8d7e9c5cf66f9581d53fa6c556dc638fabbf42..214f2ea1aaa4959814cf27d32e87152a7f13313e 100644 (file)
@@ -191,7 +191,13 @@ fast_read_rgba_pixels( struct gl_context *ctx,
    if (!rb)
       return GL_FALSE;
 
-   ASSERT(rb->_BaseFormat == GL_RGBA || rb->_BaseFormat == GL_RGB ||
+   ASSERT(rb->_BaseFormat == GL_RGBA ||
+         rb->_BaseFormat == GL_RGB ||
+         rb->_BaseFormat == GL_RG ||
+         rb->_BaseFormat == GL_RED ||
+         rb->_BaseFormat == GL_LUMINANCE ||
+         rb->_BaseFormat == GL_INTENSITY ||
+         rb->_BaseFormat == GL_LUMINANCE_ALPHA ||
          rb->_BaseFormat == GL_ALPHA);
 
    /* clipping should have already been done */
@@ -312,12 +318,12 @@ read_rgba_pixels( struct gl_context *ctx,
    if (!rb)
       return;
 
-   if (type == GL_FLOAT && ((ctx->Color.ClampReadColor == GL_TRUE) ||
-                            (ctx->Color.ClampReadColor == GL_FIXED_ONLY_ARB &&
-                             rb->DataType != GL_FLOAT)))
+   if ((ctx->Color._ClampReadColor == GL_TRUE || type != GL_FLOAT) &&
+       !_mesa_is_integer_format(format)) {
       transferOps |= IMAGE_CLAMP_BIT;
+   }
 
-   /* Try optimized path first */
+   /* Try the optimized path first. */
    if (fast_read_rgba_pixels(ctx, x, y, width, height,
                              format, type, pixels, packing, transferOps)) {
       return; /* done! */
@@ -341,9 +347,9 @@ read_rgba_pixels( struct gl_context *ctx,
          _swrast_read_rgba_span(ctx, rb, width, x, y, GL_FLOAT, rgba);
 
          /* apply fudge factor for shallow color buffers */
-         if (fb->Visual.redBits < 8 ||
-             fb->Visual.greenBits < 8 ||
-             fb->Visual.blueBits < 8) {
+         if ((fb->Visual.redBits < 8 && fb->Visual.redBits != 0) ||
+             (fb->Visual.greenBits < 8 && fb->Visual.greenBits != 0) ||
+            (fb->Visual.blueBits < 8 && fb->Visual.blueBits != 0)) {
             adjust_colors(fb, width, rgba);
          }
 
index ef38a6b22b817b7e4916666eebc8bddcdf11c764..f0524e0610e016fd4b696b8adc056c350dcb3641 100644 (file)
@@ -490,7 +490,7 @@ interpolate_texcoords(struct gl_context *ctx, SWspan *span)
 
          if (obj) {
             const struct gl_texture_image *img = obj->Image[0][obj->BaseLevel];
-            needLambda = (obj->MinFilter != obj->MagFilter)
+            needLambda = (obj->Sampler.MinFilter != obj->Sampler.MagFilter)
                || ctx->FragmentProgram._Current;
             texW = img->WidthScale;
             texH = img->HeightScale;
@@ -1348,7 +1348,13 @@ _swrast_read_rgba_span( struct gl_context *ctx, struct gl_renderbuffer *rb,
 
       ASSERT(rb);
       ASSERT(rb->GetRow);
-      ASSERT(rb->_BaseFormat == GL_RGB || rb->_BaseFormat == GL_RGBA ||
+      ASSERT(rb->_BaseFormat == GL_RGBA ||
+            rb->_BaseFormat == GL_RGB ||
+            rb->_BaseFormat == GL_RG ||
+            rb->_BaseFormat == GL_RED ||
+            rb->_BaseFormat == GL_LUMINANCE ||
+            rb->_BaseFormat == GL_INTENSITY ||
+            rb->_BaseFormat == GL_LUMINANCE_ALPHA ||
             rb->_BaseFormat == GL_ALPHA);
 
       if (rb->DataType == dstType) {
index 0c8cc9ff37b6ef2bb423a4637525078c532cfc78..7f49b6ffa50a29ae1a1da8b767e1d57518ea1155 100644 (file)
@@ -631,9 +631,9 @@ _swrast_texture_span( struct gl_context *ctx, SWspan *span )
 
          /* adjust texture lod (lambda) */
          if (span->arrayMask & SPAN_LAMBDA) {
-            if (texUnit->LodBias + curObj->LodBias != 0.0F) {
+            if (texUnit->LodBias + curObj->Sampler.LodBias != 0.0F) {
                /* apply LOD bias, but don't clamp yet */
-               const GLfloat bias = CLAMP(texUnit->LodBias + curObj->LodBias,
+               const GLfloat bias = CLAMP(texUnit->LodBias + curObj->Sampler.LodBias,
                                           -ctx->Const.MaxTextureLodBias,
                                           ctx->Const.MaxTextureLodBias);
                GLuint i;
@@ -642,10 +642,11 @@ _swrast_texture_span( struct gl_context *ctx, SWspan *span )
                }
             }
 
-            if (curObj->MinLod != -1000.0 || curObj->MaxLod != 1000.0) {
+            if (curObj->Sampler.MinLod != -1000.0 ||
+                curObj->Sampler.MaxLod != 1000.0) {
                /* apply LOD clamping to lambda */
-               const GLfloat min = curObj->MinLod;
-               const GLfloat max = curObj->MaxLod;
+               const GLfloat min = curObj->Sampler.MinLod;
+               const GLfloat max = curObj->Sampler.MaxLod;
                GLuint i;
                for (i = 0; i < span->end; i++) {
                   GLfloat l = lambda[i];
@@ -686,9 +687,9 @@ _swrast_texture_span( struct gl_context *ctx, SWspan *span )
 
          /* adjust texture lod (lambda) */
          if (span->arrayMask & SPAN_LAMBDA) {
-            if (texUnit->LodBias + curObj->LodBias != 0.0F) {
+            if (texUnit->LodBias + curObj->Sampler.LodBias != 0.0F) {
                /* apply LOD bias, but don't clamp yet */
-               const GLfloat bias = CLAMP(texUnit->LodBias + curObj->LodBias,
+               const GLfloat bias = CLAMP(texUnit->LodBias + curObj->Sampler.LodBias,
                                           -ctx->Const.MaxTextureLodBias,
                                           ctx->Const.MaxTextureLodBias);
                GLuint i;
@@ -697,10 +698,11 @@ _swrast_texture_span( struct gl_context *ctx, SWspan *span )
                }
             }
 
-            if (curObj->MinLod != -1000.0 || curObj->MaxLod != 1000.0) {
+            if (curObj->Sampler.MinLod != -1000.0 ||
+                curObj->Sampler.MaxLod != 1000.0) {
                /* apply LOD clamping to lambda */
-               const GLfloat min = curObj->MinLod;
-               const GLfloat max = curObj->MaxLod;
+               const GLfloat min = curObj->Sampler.MinLod;
+               const GLfloat max = curObj->Sampler.MaxLod;
                GLuint i;
                for (i = 0; i < span->end; i++) {
                   GLfloat l = lambda[i];
index 42785400c0e6c014c08790532d1336391b60c0a9..106f8b75f9ea1deb824f0e00fa3848ea82ce9c74 100644 (file)
@@ -505,28 +505,28 @@ nearest_texcoord(const struct gl_texture_object *texObj,
 
    switch (texObj->Target) {
    case GL_TEXTURE_RECTANGLE_ARB:
-      *i = clamp_rect_coord_nearest(texObj->WrapS, texcoord[0], width);
-      *j = clamp_rect_coord_nearest(texObj->WrapT, texcoord[1], height);
+      *i = clamp_rect_coord_nearest(texObj->Sampler.WrapS, texcoord[0], width);
+      *j = clamp_rect_coord_nearest(texObj->Sampler.WrapT, texcoord[1], height);
       *k = 0;
       break;
    case GL_TEXTURE_1D:
-      *i = nearest_texel_location(texObj->WrapS, img, width, texcoord[0]);
+      *i = nearest_texel_location(texObj->Sampler.WrapS, img, width, texcoord[0]);
       *j = 0;
       *k = 0;
       break;
    case GL_TEXTURE_2D:
-      *i = nearest_texel_location(texObj->WrapS, img, width, texcoord[0]);
-      *j = nearest_texel_location(texObj->WrapT, img, height, texcoord[1]);
+      *i = nearest_texel_location(texObj->Sampler.WrapS, img, width, texcoord[0]);
+      *j = nearest_texel_location(texObj->Sampler.WrapT, img, height, texcoord[1]);
       *k = 0;
       break;
    case GL_TEXTURE_1D_ARRAY_EXT:
-      *i = nearest_texel_location(texObj->WrapS, img, width, texcoord[0]);
+      *i = nearest_texel_location(texObj->Sampler.WrapS, img, width, texcoord[0]);
       *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]);
+      *i = nearest_texel_location(texObj->Sampler.WrapS, img, width, texcoord[0]);
+      *j = nearest_texel_location(texObj->Sampler.WrapT, img, height, texcoord[1]);
       *k = tex_array_slice(texcoord[2], depth);
       break;
    default:
@@ -553,24 +553,24 @@ linear_texcoord(const struct gl_texture_object *texObj,
 
    switch (texObj->Target) {
    case GL_TEXTURE_RECTANGLE_ARB:
-      clamp_rect_coord_linear(texObj->WrapS, texcoord[0],
+      clamp_rect_coord_linear(texObj->Sampler.WrapS, texcoord[0],
                               width, i0, i1, wi);
-      clamp_rect_coord_linear(texObj->WrapT, texcoord[1],
+      clamp_rect_coord_linear(texObj->Sampler.WrapT, texcoord[1],
                               height, j0, j1, wj);
       *slice = 0;
       break;
 
    case GL_TEXTURE_1D:
    case GL_TEXTURE_2D:
-      linear_texel_locations(texObj->WrapS, img, width,
+      linear_texel_locations(texObj->Sampler.WrapS, img, width,
                              texcoord[0], i0, i1, wi);
-      linear_texel_locations(texObj->WrapT, img, height,
+      linear_texel_locations(texObj->Sampler.WrapT, img, height,
                              texcoord[1], j0, j1, wj);
       *slice = 0;
       break;
 
    case GL_TEXTURE_1D_ARRAY_EXT:
-      linear_texel_locations(texObj->WrapS, img, width,
+      linear_texel_locations(texObj->Sampler.WrapS, img, width,
                              texcoord[0], i0, i1, wi);
       *j0 = tex_array_slice(texcoord[1], height);
       *j1 = *j0;
@@ -578,9 +578,9 @@ linear_texcoord(const struct gl_texture_object *texObj,
       break;
 
    case GL_TEXTURE_2D_ARRAY_EXT:
-      linear_texel_locations(texObj->WrapS, img, width,
+      linear_texel_locations(texObj->Sampler.WrapS, img, width,
                              texcoord[0], i0, i1, wi);
-      linear_texel_locations(texObj->WrapT, img, height,
+      linear_texel_locations(texObj->Sampler.WrapT, img, height,
                              texcoord[1], j0, j1, wj);
       *slice = tex_array_slice(texcoord[2], depth);
       break;
@@ -656,12 +656,12 @@ compute_min_mag_ranges(const struct gl_texture_object *tObj,
    GLfloat minMagThresh;
 
    /* we shouldn't be here if minfilter == magfilter */
-   ASSERT(tObj->MinFilter != tObj->MagFilter);
+   ASSERT(tObj->Sampler.MinFilter != tObj->Sampler.MagFilter);
 
    /* This bit comes from the OpenGL spec: */
-   if (tObj->MagFilter == GL_LINEAR
-       && (tObj->MinFilter == GL_NEAREST_MIPMAP_NEAREST ||
-           tObj->MinFilter == GL_NEAREST_MIPMAP_LINEAR)) {
+   if (tObj->Sampler.MagFilter == GL_LINEAR
+       && (tObj->Sampler.MinFilter == GL_NEAREST_MIPMAP_NEAREST ||
+           tObj->Sampler.MinFilter == GL_NEAREST_MIPMAP_LINEAR)) {
       minMagThresh = 0.5F;
    }
    else {
@@ -763,28 +763,28 @@ get_border_color(const struct gl_texture_object *tObj,
 {
    switch (img->_BaseFormat) {
    case GL_RGB:
-      rgba[0] = tObj->BorderColor.f[0];
-      rgba[1] = tObj->BorderColor.f[1];
-      rgba[2] = tObj->BorderColor.f[2];
+      rgba[0] = tObj->Sampler.BorderColor.f[0];
+      rgba[1] = tObj->Sampler.BorderColor.f[1];
+      rgba[2] = tObj->Sampler.BorderColor.f[2];
       rgba[3] = 1.0F;
       break;
    case GL_ALPHA:
       rgba[0] = rgba[1] = rgba[2] = 0.0;
-      rgba[3] = tObj->BorderColor.f[3];
+      rgba[3] = tObj->Sampler.BorderColor.f[3];
       break;
    case GL_LUMINANCE:
-      rgba[0] = rgba[1] = rgba[2] = tObj->BorderColor.f[0];
+      rgba[0] = rgba[1] = rgba[2] = tObj->Sampler.BorderColor.f[0];
       rgba[3] = 1.0;
       break;
    case GL_LUMINANCE_ALPHA:
-      rgba[0] = rgba[1] = rgba[2] = tObj->BorderColor.f[0];
-      rgba[3] = tObj->BorderColor.f[3];
+      rgba[0] = rgba[1] = rgba[2] = tObj->Sampler.BorderColor.f[0];
+      rgba[3] = tObj->Sampler.BorderColor.f[3];
       break;
    case GL_INTENSITY:
-      rgba[0] = rgba[1] = rgba[2] = rgba[3] = tObj->BorderColor.f[0];
+      rgba[0] = rgba[1] = rgba[2] = rgba[3] = tObj->Sampler.BorderColor.f[0];
       break;
    default:
-      COPY_4V(rgba, tObj->BorderColor.f);
+      COPY_4V(rgba, tObj->Sampler.BorderColor.f);
    }
 }
 
@@ -804,7 +804,7 @@ sample_1d_nearest(struct gl_context *ctx,
 {
    const GLint width = img->Width2;  /* without border, power of two */
    GLint i;
-   i = nearest_texel_location(tObj->WrapS, img, width, texcoord[0]);
+   i = nearest_texel_location(tObj->Sampler.WrapS, img, width, texcoord[0]);
    /* skip over the border, if any */
    i += img->Border;
    if (i < 0 || i >= (GLint) img->Width) {
@@ -832,7 +832,7 @@ sample_1d_linear(struct gl_context *ctx,
    GLfloat a;
    GLfloat t0[4], t1[4];  /* texels */
 
-   linear_texel_locations(tObj->WrapS, img, width, texcoord[0], &i0, &i1, &a);
+   linear_texel_locations(tObj->Sampler.WrapS, img, width, texcoord[0], &i0, &i1, &a);
 
    if (img->Border) {
       i0 += img->Border;
@@ -991,7 +991,7 @@ sample_lambda_1d( struct gl_context *ctx,
    if (minStart < minEnd) {
       /* do the minified texels */
       const GLuint m = minEnd - minStart;
-      switch (tObj->MinFilter) {
+      switch (tObj->Sampler.MinFilter) {
       case GL_NEAREST:
          for (i = minStart; i < minEnd; i++)
             sample_1d_nearest(ctx, tObj, tObj->Image[0][tObj->BaseLevel],
@@ -1026,7 +1026,7 @@ sample_lambda_1d( struct gl_context *ctx,
 
    if (magStart < magEnd) {
       /* do the magnified texels */
-      switch (tObj->MagFilter) {
+      switch (tObj->Sampler.MagFilter) {
       case GL_NEAREST:
          for (i = magStart; i < magEnd; i++)
             sample_1d_nearest(ctx, tObj, tObj->Image[0][tObj->BaseLevel],
@@ -1065,8 +1065,8 @@ sample_2d_nearest(struct gl_context *ctx,
    GLint i, j;
    (void) ctx;
 
-   i = nearest_texel_location(tObj->WrapS, img, width, texcoord[0]);
-   j = nearest_texel_location(tObj->WrapT, img, height, texcoord[1]);
+   i = nearest_texel_location(tObj->Sampler.WrapS, img, width, texcoord[0]);
+   j = nearest_texel_location(tObj->Sampler.WrapT, img, height, texcoord[1]);
 
    /* skip over the border, if any */
    i += img->Border;
@@ -1100,8 +1100,8 @@ sample_2d_linear(struct gl_context *ctx,
    GLfloat a, b;
    GLfloat t00[4], t10[4], t01[4], t11[4]; /* sampled texel colors */
 
-   linear_texel_locations(tObj->WrapS, img, width, texcoord[0],  &i0, &i1, &a);
-   linear_texel_locations(tObj->WrapT, img, height, texcoord[1], &j0, &j1, &b);
+   linear_texel_locations(tObj->Sampler.WrapS, img, width, texcoord[0],  &i0, &i1, &a);
+   linear_texel_locations(tObj->Sampler.WrapT, img, height, texcoord[1], &j0, &j1, &b);
 
    if (img->Border) {
       i0 += img->Border;
@@ -1165,8 +1165,8 @@ sample_2d_linear_repeat(struct gl_context *ctx,
 
    (void) ctx;
 
-   ASSERT(tObj->WrapS == GL_REPEAT);
-   ASSERT(tObj->WrapT == GL_REPEAT);
+   ASSERT(tObj->Sampler.WrapS == GL_REPEAT);
+   ASSERT(tObj->Sampler.WrapT == GL_REPEAT);
    ASSERT(img->Border == 0);
    ASSERT(img->_BaseFormat != GL_COLOR_INDEX);
    ASSERT(img->_IsPowerOfTwo);
@@ -1270,8 +1270,8 @@ sample_2d_linear_mipmap_linear_repeat(struct gl_context *ctx,
 {
    GLuint i;
    ASSERT(lambda != NULL);
-   ASSERT(tObj->WrapS == GL_REPEAT);
-   ASSERT(tObj->WrapT == GL_REPEAT);
+   ASSERT(tObj->Sampler.WrapS == GL_REPEAT);
+   ASSERT(tObj->Sampler.WrapT == GL_REPEAT);
    for (i = 0; i < n; i++) {
       GLint level = linear_mipmap_level(tObj, lambda[i]);
       if (level >= tObj->_MaxLevel) {
@@ -1317,8 +1317,8 @@ sample_linear_2d(struct gl_context *ctx,
    GLuint i;
    struct gl_texture_image *image = tObj->Image[0][tObj->BaseLevel];
    (void) lambda;
-   if (tObj->WrapS == GL_REPEAT &&
-       tObj->WrapT == GL_REPEAT &&
+   if (tObj->Sampler.WrapS == GL_REPEAT &&
+       tObj->Sampler.WrapT == GL_REPEAT &&
        image->_IsPowerOfTwo &&
        image->Border == 0) {
       for (i = 0; i < n; i++) {
@@ -1356,8 +1356,8 @@ opt_sample_rgb_2d(struct gl_context *ctx,
    GLuint k;
    (void) ctx;
    (void) lambda;
-   ASSERT(tObj->WrapS==GL_REPEAT);
-   ASSERT(tObj->WrapT==GL_REPEAT);
+   ASSERT(tObj->Sampler.WrapS==GL_REPEAT);
+   ASSERT(tObj->Sampler.WrapT==GL_REPEAT);
    ASSERT(img->Border==0);
    ASSERT(img->TexFormat == MESA_FORMAT_RGB888);
    ASSERT(img->_IsPowerOfTwo);
@@ -1398,8 +1398,8 @@ opt_sample_rgba_2d(struct gl_context *ctx,
    GLuint i;
    (void) ctx;
    (void) lambda;
-   ASSERT(tObj->WrapS==GL_REPEAT);
-   ASSERT(tObj->WrapT==GL_REPEAT);
+   ASSERT(tObj->Sampler.WrapS==GL_REPEAT);
+   ASSERT(tObj->Sampler.WrapT==GL_REPEAT);
    ASSERT(img->Border==0);
    ASSERT(img->TexFormat == MESA_FORMAT_RGBA8888);
    ASSERT(img->_IsPowerOfTwo);
@@ -1428,8 +1428,8 @@ sample_lambda_2d(struct gl_context *ctx,
    GLuint minStart, minEnd;  /* texels with minification */
    GLuint magStart, magEnd;  /* texels with magnification */
 
-   const GLboolean repeatNoBorderPOT = (tObj->WrapS == GL_REPEAT)
-      && (tObj->WrapT == GL_REPEAT)
+   const GLboolean repeatNoBorderPOT = (tObj->Sampler.WrapS == GL_REPEAT)
+      && (tObj->Sampler.WrapT == GL_REPEAT)
       && (tImg->Border == 0 && (tImg->Width == tImg->RowStride))
       && (tImg->_BaseFormat != GL_COLOR_INDEX)
       && tImg->_IsPowerOfTwo;
@@ -1441,7 +1441,7 @@ sample_lambda_2d(struct gl_context *ctx,
    if (minStart < minEnd) {
       /* do the minified texels */
       const GLuint m = minEnd - minStart;
-      switch (tObj->MinFilter) {
+      switch (tObj->Sampler.MinFilter) {
       case GL_NEAREST:
          if (repeatNoBorderPOT) {
             switch (tImg->TexFormat) {
@@ -1498,7 +1498,7 @@ sample_lambda_2d(struct gl_context *ctx,
       /* do the magnified texels */
       const GLuint m = magEnd - magStart;
 
-      switch (tObj->MagFilter) {
+      switch (tObj->Sampler.MagFilter) {
       case GL_NEAREST:
          if (repeatNoBorderPOT) {
             switch (tImg->TexFormat) {
@@ -1552,9 +1552,9 @@ sample_3d_nearest(struct gl_context *ctx,
    GLint i, j, k;
    (void) ctx;
 
-   i = nearest_texel_location(tObj->WrapS, img, width, texcoord[0]);
-   j = nearest_texel_location(tObj->WrapT, img, height, texcoord[1]);
-   k = nearest_texel_location(tObj->WrapR, img, depth, texcoord[2]);
+   i = nearest_texel_location(tObj->Sampler.WrapS, img, width, texcoord[0]);
+   j = nearest_texel_location(tObj->Sampler.WrapT, img, height, texcoord[1]);
+   k = nearest_texel_location(tObj->Sampler.WrapR, img, depth, texcoord[2]);
 
    if (i < 0 || i >= (GLint) img->Width ||
        j < 0 || j >= (GLint) img->Height ||
@@ -1587,9 +1587,9 @@ sample_3d_linear(struct gl_context *ctx,
    GLfloat t000[4], t010[4], t001[4], t011[4];
    GLfloat t100[4], t110[4], t101[4], t111[4];
 
-   linear_texel_locations(tObj->WrapS, img, width, texcoord[0],  &i0, &i1, &a);
-   linear_texel_locations(tObj->WrapT, img, height, texcoord[1], &j0, &j1, &b);
-   linear_texel_locations(tObj->WrapR, img, depth, texcoord[2],  &k0, &k1, &c);
+   linear_texel_locations(tObj->Sampler.WrapS, img, width, texcoord[0],  &i0, &i1, &a);
+   linear_texel_locations(tObj->Sampler.WrapT, img, height, texcoord[1], &j0, &j1, &b);
+   linear_texel_locations(tObj->Sampler.WrapR, img, depth, texcoord[2],  &k0, &k1, &c);
 
    if (img->Border) {
       i0 += img->Border;
@@ -1794,7 +1794,7 @@ sample_lambda_3d(struct gl_context *ctx,
    if (minStart < minEnd) {
       /* do the minified texels */
       GLuint m = minEnd - minStart;
-      switch (tObj->MinFilter) {
+      switch (tObj->Sampler.MinFilter) {
       case GL_NEAREST:
          for (i = minStart; i < minEnd; i++)
             sample_3d_nearest(ctx, tObj, tObj->Image[0][tObj->BaseLevel],
@@ -1829,7 +1829,7 @@ sample_lambda_3d(struct gl_context *ctx,
 
    if (magStart < magEnd) {
       /* do the magnified texels */
-      switch (tObj->MagFilter) {
+      switch (tObj->Sampler.MagFilter) {
       case GL_NEAREST:
          for (i = magStart; i < magEnd; i++)
             sample_3d_nearest(ctx, tObj, tObj->Image[0][tObj->BaseLevel],
@@ -2091,7 +2091,7 @@ sample_lambda_cube(struct gl_context *ctx,
    if (minStart < minEnd) {
       /* do the minified texels */
       const GLuint m = minEnd - minStart;
-      switch (tObj->MinFilter) {
+      switch (tObj->Sampler.MinFilter) {
       case GL_NEAREST:
          sample_nearest_cube(ctx, tObj, m, texcoords + minStart,
                              lambda + minStart, rgba + minStart);
@@ -2128,7 +2128,7 @@ sample_lambda_cube(struct gl_context *ctx,
    if (magStart < magEnd) {
       /* do the magnified texels */
       const GLuint m = magEnd - magStart;
-      switch (tObj->MagFilter) {
+      switch (tObj->Sampler.MagFilter) {
       case GL_NEAREST:
          sample_nearest_cube(ctx, tObj, m, texcoords + magStart,
                              lambda + magStart, rgba + magStart);
@@ -2163,18 +2163,18 @@ sample_nearest_rect(struct gl_context *ctx,
    (void) ctx;
    (void) lambda;
 
-   ASSERT(tObj->WrapS == GL_CLAMP ||
-          tObj->WrapS == GL_CLAMP_TO_EDGE ||
-          tObj->WrapS == GL_CLAMP_TO_BORDER);
-   ASSERT(tObj->WrapT == GL_CLAMP ||
-          tObj->WrapT == GL_CLAMP_TO_EDGE ||
-          tObj->WrapT == GL_CLAMP_TO_BORDER);
+   ASSERT(tObj->Sampler.WrapS == GL_CLAMP ||
+          tObj->Sampler.WrapS == GL_CLAMP_TO_EDGE ||
+          tObj->Sampler.WrapS == GL_CLAMP_TO_BORDER);
+   ASSERT(tObj->Sampler.WrapT == GL_CLAMP ||
+          tObj->Sampler.WrapT == GL_CLAMP_TO_EDGE ||
+          tObj->Sampler.WrapT == GL_CLAMP_TO_BORDER);
    ASSERT(img->_BaseFormat != GL_COLOR_INDEX);
 
    for (i = 0; i < n; i++) {
       GLint row, col;
-      col = clamp_rect_coord_nearest(tObj->WrapS, texcoords[i][0], width);
-      row = clamp_rect_coord_nearest(tObj->WrapT, texcoords[i][1], height);
+      col = clamp_rect_coord_nearest(tObj->Sampler.WrapS, texcoords[i][0], width);
+      row = clamp_rect_coord_nearest(tObj->Sampler.WrapT, texcoords[i][1], height);
       if (col < 0 || col >= width || row < 0 || row >= height)
          get_border_color(tObj, img, rgba[i]);
       else
@@ -2197,12 +2197,12 @@ sample_linear_rect(struct gl_context *ctx,
    (void) ctx;
    (void) lambda;
 
-   ASSERT(tObj->WrapS == GL_CLAMP ||
-          tObj->WrapS == GL_CLAMP_TO_EDGE ||
-          tObj->WrapS == GL_CLAMP_TO_BORDER);
-   ASSERT(tObj->WrapT == GL_CLAMP ||
-          tObj->WrapT == GL_CLAMP_TO_EDGE ||
-          tObj->WrapT == GL_CLAMP_TO_BORDER);
+   ASSERT(tObj->Sampler.WrapS == GL_CLAMP ||
+          tObj->Sampler.WrapS == GL_CLAMP_TO_EDGE ||
+          tObj->Sampler.WrapS == GL_CLAMP_TO_BORDER);
+   ASSERT(tObj->Sampler.WrapT == GL_CLAMP ||
+          tObj->Sampler.WrapT == GL_CLAMP_TO_EDGE ||
+          tObj->Sampler.WrapT == GL_CLAMP_TO_BORDER);
    ASSERT(img->_BaseFormat != GL_COLOR_INDEX);
 
    for (i = 0; i < n; i++) {
@@ -2211,9 +2211,9 @@ sample_linear_rect(struct gl_context *ctx,
       GLfloat a, b;
       GLbitfield useBorderColor = 0x0;
 
-      clamp_rect_coord_linear(tObj->WrapS, texcoords[i][0], width,
+      clamp_rect_coord_linear(tObj->Sampler.WrapS, texcoords[i][0], width,
                               &i0, &i1, &a);
-      clamp_rect_coord_linear(tObj->WrapT, texcoords[i][1], height,
+      clamp_rect_coord_linear(tObj->Sampler.WrapT, texcoords[i][1], height,
                               &j0, &j1, &b);
 
       /* compute integer rows/columns */
@@ -2264,7 +2264,7 @@ sample_lambda_rect(struct gl_context *ctx,
                           &minStart, &minEnd, &magStart, &magEnd);
 
    if (minStart < minEnd) {
-      if (tObj->MinFilter == GL_NEAREST) {
+      if (tObj->Sampler.MinFilter == GL_NEAREST) {
          sample_nearest_rect(ctx, tObj, minEnd - minStart,
                              texcoords + minStart, NULL, rgba + minStart);
       }
@@ -2274,7 +2274,7 @@ sample_lambda_rect(struct gl_context *ctx,
       }
    }
    if (magStart < magEnd) {
-      if (tObj->MagFilter == GL_NEAREST) {
+      if (tObj->Sampler.MagFilter == GL_NEAREST) {
          sample_nearest_rect(ctx, tObj, magEnd - magStart,
                              texcoords + magStart, NULL, rgba + magStart);
       }
@@ -2307,8 +2307,8 @@ sample_2d_array_nearest(struct gl_context *ctx,
    GLint array;
    (void) ctx;
 
-   i = nearest_texel_location(tObj->WrapS, img, width, texcoord[0]);
-   j = nearest_texel_location(tObj->WrapT, img, height, texcoord[1]);
+   i = nearest_texel_location(tObj->Sampler.WrapS, img, width, texcoord[0]);
+   j = nearest_texel_location(tObj->Sampler.WrapT, img, height, texcoord[1]);
    array = tex_array_slice(texcoord[2], depth);
 
    if (i < 0 || i >= (GLint) img->Width ||
@@ -2342,12 +2342,12 @@ sample_2d_array_linear(struct gl_context *ctx,
    GLfloat a, b;
    GLfloat t00[4], t01[4], t10[4], t11[4];
 
-   linear_texel_locations(tObj->WrapS, img, width,  texcoord[0], &i0, &i1, &a);
-   linear_texel_locations(tObj->WrapT, img, height, texcoord[1], &j0, &j1, &b);
+   linear_texel_locations(tObj->Sampler.WrapS, img, width,  texcoord[0], &i0, &i1, &a);
+   linear_texel_locations(tObj->Sampler.WrapT, img, height, texcoord[1], &j0, &j1, &b);
    array = tex_array_slice(texcoord[2], depth);
 
    if (array < 0 || array >= depth) {
-      COPY_4V(rgba, tObj->BorderColor.f);
+      COPY_4V(rgba, tObj->Sampler.BorderColor.f);
    }
    else {
       if (img->Border) {
@@ -2532,7 +2532,7 @@ sample_lambda_2d_array(struct gl_context *ctx,
    if (minStart < minEnd) {
       /* do the minified texels */
       GLuint m = minEnd - minStart;
-      switch (tObj->MinFilter) {
+      switch (tObj->Sampler.MinFilter) {
       case GL_NEAREST:
          for (i = minStart; i < minEnd; i++)
             sample_2d_array_nearest(ctx, tObj, tObj->Image[0][tObj->BaseLevel],
@@ -2575,7 +2575,7 @@ sample_lambda_2d_array(struct gl_context *ctx,
 
    if (magStart < magEnd) {
       /* do the magnified texels */
-      switch (tObj->MagFilter) {
+      switch (tObj->Sampler.MagFilter) {
       case GL_NEAREST:
          for (i = magStart; i < magEnd; i++)
             sample_2d_array_nearest(ctx, tObj, tObj->Image[0][tObj->BaseLevel],
@@ -2616,7 +2616,7 @@ sample_1d_array_nearest(struct gl_context *ctx,
    GLint array;
    (void) ctx;
 
-   i = nearest_texel_location(tObj->WrapS, img, width, texcoord[0]);
+   i = nearest_texel_location(tObj->Sampler.WrapS, img, width, texcoord[0]);
    array = tex_array_slice(texcoord[1], height);
 
    if (i < 0 || i >= (GLint) img->Width ||
@@ -2648,7 +2648,7 @@ sample_1d_array_linear(struct gl_context *ctx,
    GLfloat a;
    GLfloat t0[4], t1[4];
 
-   linear_texel_locations(tObj->WrapS, img, width, texcoord[0], &i0, &i1, &a);
+   linear_texel_locations(tObj->Sampler.WrapS, img, width, texcoord[0], &i0, &i1, &a);
    array = tex_array_slice(texcoord[1], height);
 
    if (img->Border) {
@@ -2813,7 +2813,7 @@ sample_lambda_1d_array(struct gl_context *ctx,
    if (minStart < minEnd) {
       /* do the minified texels */
       GLuint m = minEnd - minStart;
-      switch (tObj->MinFilter) {
+      switch (tObj->Sampler.MinFilter) {
       case GL_NEAREST:
          for (i = minStart; i < minEnd; i++)
             sample_1d_array_nearest(ctx, tObj, tObj->Image[0][tObj->BaseLevel],
@@ -2852,7 +2852,7 @@ sample_lambda_1d_array(struct gl_context *ctx,
 
    if (magStart < magEnd) {
       /* do the magnified texels */
-      switch (tObj->MagFilter) {
+      switch (tObj->Sampler.MagFilter) {
       case GL_NEAREST:
          for (i = magStart; i < magEnd; i++)
             sample_1d_array_nearest(ctx, tObj, tObj->Image[0][tObj->BaseLevel],
@@ -2975,13 +2975,13 @@ choose_depth_texture_level(const struct gl_texture_object *tObj, GLfloat lambda)
 {
    GLint level;
 
-   if (tObj->MinFilter == GL_NEAREST || tObj->MinFilter == GL_LINEAR) {
+   if (tObj->Sampler.MinFilter == GL_NEAREST || tObj->Sampler.MinFilter == GL_LINEAR) {
       /* no mipmapping - use base level */
       level = tObj->BaseLevel;
    }
    else {
       /* choose mipmap level */
-      lambda = CLAMP(lambda, tObj->MinLod, tObj->MaxLod);
+      lambda = CLAMP(lambda, tObj->Sampler.MinLod, tObj->Sampler.MaxLod);
       level = (GLint) lambda;
       level = CLAMP(level, tObj->BaseLevel, tObj->_MaxLevel);
    }
@@ -3020,14 +3020,14 @@ sample_depth_texture( struct gl_context *ctx,
           tObj->Target == GL_TEXTURE_1D_ARRAY_EXT ||
           tObj->Target == GL_TEXTURE_2D_ARRAY_EXT);
 
-   ambient = tObj->CompareFailValue;
+   ambient = tObj->Sampler.CompareFailValue;
 
-   /* XXXX if tObj->MinFilter != tObj->MagFilter, we're ignoring lambda */
+   /* XXXX if tObj->Sampler.MinFilter != tObj->Sampler.MagFilter, we're ignoring lambda */
 
-   function = (tObj->CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB) ?
-      tObj->CompareFunc : GL_NONE;
+   function = (tObj->Sampler.CompareMode == GL_COMPARE_R_TO_TEXTURE_ARB) ?
+      tObj->Sampler.CompareFunc : GL_NONE;
 
-   if (tObj->MagFilter == GL_NEAREST) {
+   if (tObj->Sampler.MagFilter == GL_NEAREST) {
       GLuint i;
       for (i = 0; i < n; i++) {
          GLfloat depthSample, depthRef;
@@ -3040,14 +3040,14 @@ sample_depth_texture( struct gl_context *ctx,
             img->FetchTexelf(img, col, row, slice, &depthSample);
          }
          else {
-            depthSample = tObj->BorderColor.f[0];
+            depthSample = tObj->Sampler.BorderColor.f[0];
          }
 
          depthRef = CLAMP(texcoords[i][compare_coord], 0.0F, 1.0F);
 
          result = shadow_compare(function, depthRef, depthSample, ambient);
 
-         switch (tObj->DepthMode) {
+         switch (tObj->Sampler.DepthMode) {
          case GL_LUMINANCE:
             ASSIGN_4V(texel[i], result, result, result, 1.0F);
             break;
@@ -3067,7 +3067,7 @@ sample_depth_texture( struct gl_context *ctx,
    }
    else {
       GLuint i;
-      ASSERT(tObj->MagFilter == GL_LINEAR);
+      ASSERT(tObj->Sampler.MagFilter == GL_LINEAR);
       for (i = 0; i < n; i++) {
          GLfloat depth00, depth01, depth10, depth11, depthRef;
          GLint i0, i1, j0, j1;
@@ -3095,21 +3095,21 @@ sample_depth_texture( struct gl_context *ctx,
          }
 
          if (slice < 0 || slice >= (GLint) depth) {
-            depth00 = tObj->BorderColor.f[0];
-            depth01 = tObj->BorderColor.f[0];
-            depth10 = tObj->BorderColor.f[0];
-            depth11 = tObj->BorderColor.f[0];
+            depth00 = tObj->Sampler.BorderColor.f[0];
+            depth01 = tObj->Sampler.BorderColor.f[0];
+            depth10 = tObj->Sampler.BorderColor.f[0];
+            depth11 = tObj->Sampler.BorderColor.f[0];
          }
          else {
             /* get four depth samples from the texture */
             if (useBorderTexel & (I0BIT | J0BIT)) {
-               depth00 = tObj->BorderColor.f[0];
+               depth00 = tObj->Sampler.BorderColor.f[0];
             }
             else {
                img->FetchTexelf(img, i0, j0, slice, &depth00);
             }
             if (useBorderTexel & (I1BIT | J0BIT)) {
-               depth10 = tObj->BorderColor.f[0];
+               depth10 = tObj->Sampler.BorderColor.f[0];
             }
             else {
                img->FetchTexelf(img, i1, j0, slice, &depth10);
@@ -3117,13 +3117,13 @@ sample_depth_texture( struct gl_context *ctx,
 
             if (tObj->Target != GL_TEXTURE_1D_ARRAY_EXT) {
                if (useBorderTexel & (I0BIT | J1BIT)) {
-                  depth01 = tObj->BorderColor.f[0];
+                  depth01 = tObj->Sampler.BorderColor.f[0];
                }
                else {
                   img->FetchTexelf(img, i0, j1, slice, &depth01);
                }
                if (useBorderTexel & (I1BIT | J1BIT)) {
-                  depth11 = tObj->BorderColor.f[0];
+                  depth11 = tObj->Sampler.BorderColor.f[0];
                }
                else {
                   img->FetchTexelf(img, i1, j1, slice, &depth11);
@@ -3141,7 +3141,7 @@ sample_depth_texture( struct gl_context *ctx,
                                   depth00, depth01, depth10, depth11,
                                   ambient, wi, wj);
 
-         switch (tObj->DepthMode) {
+         switch (tObj->Sampler.DepthMode) {
          case GL_LUMINANCE:
             ASSIGN_4V(texel[i], result, result, result, 1.0F);
             break;
@@ -3197,7 +3197,8 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
       return &null_sample_func;
    }
    else {
-      const GLboolean needLambda = (GLboolean) (t->MinFilter != t->MagFilter);
+      const GLboolean needLambda =
+         (GLboolean) (t->Sampler.MinFilter != t->Sampler.MagFilter);
       const GLenum format = t->Image[0][t->BaseLevel]->_BaseFormat;
 
       switch (t->Target) {
@@ -3208,11 +3209,11 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
          else if (needLambda) {
             return &sample_lambda_1d;
          }
-         else if (t->MinFilter == GL_LINEAR) {
+         else if (t->Sampler.MinFilter == GL_LINEAR) {
             return &sample_linear_1d;
          }
          else {
-            ASSERT(t->MinFilter == GL_NEAREST);
+            ASSERT(t->Sampler.MinFilter == GL_NEAREST);
             return &sample_nearest_1d;
          }
       case GL_TEXTURE_2D:
@@ -3222,22 +3223,22 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
          else if (needLambda) {
             return &sample_lambda_2d;
          }
-         else if (t->MinFilter == GL_LINEAR) {
+         else if (t->Sampler.MinFilter == GL_LINEAR) {
             return &sample_linear_2d;
          }
          else {
             /* check for a few optimized cases */
             const struct gl_texture_image *img = t->Image[0][t->BaseLevel];
-            ASSERT(t->MinFilter == GL_NEAREST);
-            if (t->WrapS == GL_REPEAT &&
-                t->WrapT == GL_REPEAT &&
+            ASSERT(t->Sampler.MinFilter == GL_NEAREST);
+            if (t->Sampler.WrapS == GL_REPEAT &&
+                t->Sampler.WrapT == GL_REPEAT &&
                 img->_IsPowerOfTwo &&
                 img->Border == 0 &&
                 img->TexFormat == MESA_FORMAT_RGB888) {
                return &opt_sample_rgb_2d;
             }
-            else if (t->WrapS == GL_REPEAT &&
-                     t->WrapT == GL_REPEAT &&
+            else if (t->Sampler.WrapS == GL_REPEAT &&
+                     t->Sampler.WrapT == GL_REPEAT &&
                      img->_IsPowerOfTwo &&
                      img->Border == 0 &&
                      img->TexFormat == MESA_FORMAT_RGBA8888) {
@@ -3251,22 +3252,22 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
          if (needLambda) {
             return &sample_lambda_3d;
          }
-         else if (t->MinFilter == GL_LINEAR) {
+         else if (t->Sampler.MinFilter == GL_LINEAR) {
             return &sample_linear_3d;
          }
          else {
-            ASSERT(t->MinFilter == GL_NEAREST);
+            ASSERT(t->Sampler.MinFilter == GL_NEAREST);
             return &sample_nearest_3d;
          }
       case GL_TEXTURE_CUBE_MAP:
          if (needLambda) {
             return &sample_lambda_cube;
          }
-         else if (t->MinFilter == GL_LINEAR) {
+         else if (t->Sampler.MinFilter == GL_LINEAR) {
             return &sample_linear_cube;
          }
          else {
-            ASSERT(t->MinFilter == GL_NEAREST);
+            ASSERT(t->Sampler.MinFilter == GL_NEAREST);
             return &sample_nearest_cube;
          }
       case GL_TEXTURE_RECTANGLE_NV:
@@ -3276,33 +3277,33 @@ _swrast_choose_texture_sample_func( struct gl_context *ctx,
          else if (needLambda) {
             return &sample_lambda_rect;
          }
-         else if (t->MinFilter == GL_LINEAR) {
+         else if (t->Sampler.MinFilter == GL_LINEAR) {
             return &sample_linear_rect;
          }
          else {
-            ASSERT(t->MinFilter == GL_NEAREST);
+            ASSERT(t->Sampler.MinFilter == GL_NEAREST);
             return &sample_nearest_rect;
          }
       case GL_TEXTURE_1D_ARRAY_EXT:
          if (needLambda) {
             return &sample_lambda_1d_array;
          }
-         else if (t->MinFilter == GL_LINEAR) {
+         else if (t->Sampler.MinFilter == GL_LINEAR) {
             return &sample_linear_1d_array;
          }
          else {
-            ASSERT(t->MinFilter == GL_NEAREST);
+            ASSERT(t->Sampler.MinFilter == GL_NEAREST);
             return &sample_nearest_1d_array;
          }
       case GL_TEXTURE_2D_ARRAY_EXT:
          if (needLambda) {
             return &sample_lambda_2d_array;
          }
-         else if (t->MinFilter == GL_LINEAR) {
+         else if (t->Sampler.MinFilter == GL_LINEAR) {
             return &sample_linear_2d_array;
          }
          else {
-            ASSERT(t->MinFilter == GL_NEAREST);
+            ASSERT(t->Sampler.MinFilter == GL_NEAREST);
             return &sample_nearest_2d_array;
          }
       default:
index d07a4ef75133a5f1b2a2d1e92f4e30d55e245d7e..8a9671aa08a57339b856efcfa3aa2f4492b70e90 100644 (file)
@@ -540,7 +540,7 @@ affine_span(struct gl_context *ctx, SWspan *span,
    info.smask = texImg->Width - 1;                                     \
    info.tmask = texImg->Height - 1;                                    \
    info.format = texImg->TexFormat;                                    \
-   info.filter = obj->MinFilter;                                       \
+   info.filter = obj->Sampler.MinFilter;                               \
    info.envmode = unit->EnvMode;                                       \
    info.er = 0;                                        \
    info.eg = 0;                                        \
@@ -805,7 +805,7 @@ fast_persp_span(struct gl_context *ctx, SWspan *span,
    info.smask = texImg->Width - 1;                                     \
    info.tmask = texImg->Height - 1;                                    \
    info.format = texImg->TexFormat;                                    \
-   info.filter = obj->MinFilter;                                       \
+   info.filter = obj->Sampler.MinFilter;                               \
    info.envmode = unit->EnvMode;                                       \
    info.er = 0;                                        \
    info.eg = 0;                                        \
@@ -1044,8 +1044,8 @@ _swrast_choose_triangle( struct gl_context *ctx )
 
          texImg = texObj2D ? texObj2D->Image[0][texObj2D->BaseLevel] : NULL;
          format = texImg ? texImg->TexFormat : MESA_FORMAT_NONE;
-         minFilter = texObj2D ? texObj2D->MinFilter : GL_NONE;
-         magFilter = texObj2D ? texObj2D->MagFilter : GL_NONE;
+         minFilter = texObj2D ? texObj2D->Sampler.MinFilter : GL_NONE;
+         magFilter = texObj2D ? texObj2D->Sampler.MagFilter : GL_NONE;
          envMode = ctx->Texture.Unit[0].EnvMode;
 
          /* First see if we can use an optimized 2-D texture function */
@@ -1054,8 +1054,8 @@ _swrast_choose_triangle( struct gl_context *ctx )
              && !ctx->ATIFragmentShader._Enabled
              && ctx->Texture._EnabledUnits == 0x1
              && ctx->Texture.Unit[0]._ReallyEnabled == TEXTURE_2D_BIT
-             && texObj2D->WrapS == GL_REPEAT
-             && texObj2D->WrapT == GL_REPEAT
+             && texObj2D->Sampler.WrapS == GL_REPEAT
+             && texObj2D->Sampler.WrapT == GL_REPEAT
              && texObj2D->_Swizzle == SWIZZLE_NOOP
              && texImg->_IsPowerOfTwo
              && texImg->Border == 0
index 5f5e2663b5fd259d439d0e583136f14b52f2a78e..a6da8cafe5a9a7e1400f8fcfd31d3c40c10fb81f 100644 (file)
@@ -138,16 +138,12 @@ _tnl_InvalidateState( struct gl_context *ctx, GLuint new_state )
      }
    }
 
-   if (ctx->Fog.Enabled) {
-      /* fixed-function fog */
+   if (ctx->Fog.Enabled
+       || (fp != NULL && (fp->Base.InputsRead & FRAG_BIT_FOGC) != 0)) {
+      /* Either fixed-function fog or a fragment program needs fog coord.
+       */
       RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_FOG );
    }
-   else if (fp) {
-      if (fp->FogOption != GL_NONE || (fp->Base.InputsRead & FRAG_BIT_FOGC)) {
-         /* fragment program needs fog coord */
-         RENDERINPUTS_SET( tnl->render_inputs_bitset, _TNL_ATTRIB_FOG );
-      }
-   }
 
    if (ctx->Polygon.FrontMode != GL_FILL || 
        ctx->Polygon.BackMode != GL_FILL)
index 6656ed898169b73bd6f7fd4a9ddb71d6d187fae2..9de770d0bcfa21ee0a6f0bfd20ac41f5b0778826 100644 (file)
@@ -72,6 +72,7 @@ static void init_legacy_currval(struct gl_context *ctx)
       cl->Type = GL_FLOAT;
       cl->Format = GL_RGBA;
       cl->Ptr = (const void *)ctx->Current.Attrib[i];
+      cl->_ElementSize = cl->Size * sizeof(GLfloat);
       _mesa_reference_buffer_object(ctx, &cl->BufferObj,
                                     ctx->Shared->NullBufferObj);
    }
@@ -98,6 +99,7 @@ static void init_generic_currval(struct gl_context *ctx)
       cl->Stride = 0;
       cl->StrideB = 0;
       cl->Enabled = 1;
+      cl->_ElementSize = cl->Size * sizeof(GLfloat);
       _mesa_reference_buffer_object(ctx, &cl->BufferObj,
                                     ctx->Shared->NullBufferObj);
    }
@@ -143,6 +145,7 @@ static void init_mat_currval(struct gl_context *ctx)
       cl->Stride = 0;
       cl->StrideB = 0;
       cl->Enabled = 1;
+      cl->_ElementSize = cl->Size * sizeof(GLfloat);
       _mesa_reference_buffer_object(ctx, &cl->BufferObj,
                                     ctx->Shared->NullBufferObj);
    }
index fcd544de7636a8fe2853254c906f46b78f309817..3c7c439b64c88a55fac1e6315647a1ddd98e9d2e 100644 (file)
@@ -168,6 +168,8 @@ static void vbo_exec_copy_to_current( struct vbo_exec_context *exec )
              * directly.
              */
             vbo->currval[i].Size = exec->vtx.attrsz[i];
+            assert(vbo->currval[i].Type == GL_FLOAT);
+            vbo->currval[i]._ElementSize = vbo->currval[i].Size * sizeof(GLfloat);
 
             /* This triggers rather too much recalculation of Mesa state
              * that doesn't get used (eg light positions).
index 98d6badc47a2f4e5994c120304196a5da7b936db..a49cd5017a3cb36a23f861aa68539f6b9e9511ee 100644 (file)
@@ -585,15 +585,11 @@ vbo_draw_arrays(struct gl_context *ctx, GLenum mode, GLint start,
    if (ctx->NewState)
       _mesa_update_state(ctx);
 
+   /* init most fields to zero */
+   memset(prim, 0, sizeof(prim));
    prim[0].begin = 1;
    prim[0].end = 1;
-   prim[0].weak = 0;
-   prim[0].pad = 0;
    prim[0].mode = mode;
-   prim[0].start = 0; /* filled in below */
-   prim[0].count = 0; /* filled in below */
-   prim[0].indexed = 0;
-   prim[0].basevertex = 0;
    prim[0].num_instances = numInstances;
 
    /* Implement the primitive restart index */
@@ -943,8 +939,13 @@ vbo_exec_DrawRangeElementsBaseVertex(GLenum mode,
       /* Set 'end' to the max possible legal value */
       assert(ctx->Array.ArrayObj->_MaxElement >= 1);
       end = ctx->Array.ArrayObj->_MaxElement - 1;
+
+      if (end < start) {
+         return;
+      }
    }
-   else if (0) {
+
+   if (0) {
       printf("glDraw[Range]Elements{,BaseVertex}"
             "(start %u, end %u, type 0x%x, count %d) ElemBuf %u, "
             "base %d\n",
index 539658021e3868210bba0b608c9dbdd561882411..7e8d8602093bdc83260131d26a58b6fd71d241f6 100644 (file)
@@ -239,6 +239,7 @@ vbo_exec_bind_arrays( struct gl_context *ctx )
         arrays[attr].Type = GL_FLOAT;
          arrays[attr].Format = GL_RGBA;
         arrays[attr].Enabled = 1;
+         arrays[attr]._ElementSize = arrays[attr].Size * sizeof(GLfloat);
          _mesa_reference_buffer_object(ctx,
                                        &arrays[attr].BufferObj,
                                        exec->vtx.bufferobj);
index 634a6d3f84b6725a9ccff0c8891da526bd4f54df..ca4cff38a89f10c6c415405c4f23bbabfa4bb1ff 100644 (file)
@@ -90,6 +90,8 @@ _playback_copy_to_current(struct gl_context *ctx,
             memcpy(current, tmp, 4 * sizeof(GLfloat));
 
             vbo->currval[i].Size = node->attrsz[i];
+            assert(vbo->currval[i].Type == GL_FLOAT);
+            vbo->currval[i]._ElementSize = vbo->currval[i].Size * sizeof(GLfloat);
 
             if (i >= VBO_ATTRIB_FIRST_MATERIAL &&
                 i <= VBO_ATTRIB_LAST_MATERIAL)
@@ -193,6 +195,7 @@ static void vbo_bind_vertex_list(struct gl_context *ctx,
         arrays[attr].Type = GL_FLOAT;
          arrays[attr].Format = GL_RGBA;
         arrays[attr].Enabled = 1;
+         arrays[attr]._ElementSize = arrays[attr].Size * sizeof(GLfloat);
          _mesa_reference_buffer_object(ctx,
                                        &arrays[attr].BufferObj,
                                        node->vertex_store->bufferobj);
index 8c981f93e5c66c0f25204ae4d55e474462e833c9..ecca11716730ac48c27eeff5b4a097dcd6a2ca75 100644 (file)
@@ -519,6 +519,7 @@ replay_init( struct copy_context *copy )
       dst->Enabled = GL_TRUE;
       dst->Normalized = src->Normalized; 
       dst->BufferObj = ctx->Shared->NullBufferObj;
+      dst->_ElementSize = src->_ElementSize;
       dst->_MaxElement = copy->dstbuf_size; /* may be less! */
 
       offset += copy->varying[i].size;
diff --git a/src/mesa/vf/vf.c b/src/mesa/vf/vf.c
deleted file mode 100644 (file)
index defb7cb..0000000
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- * Copyright 2003 Tungsten 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
- * 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
- * TUNGSTEN GRAPHICS 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:
- *    Keith Whitwell <keithw@tungstengraphics.com>
- */
-
-#include "main/glheader.h"
-#include "main/context.h"
-#include "main/colormac.h"
-
-#include "vf.h"
-
-#define DBG 0
-
-
-
-static GLboolean match_fastpath( struct vertex_fetch *vf,
-                                const struct vf_fastpath *fp)
-{
-   GLuint j;
-
-   if (vf->attr_count != fp->attr_count) 
-      return GL_FALSE;
-
-   for (j = 0; j < vf->attr_count; j++) 
-      if (vf->attr[j].format != fp->attr[j].format ||
-         vf->attr[j].inputsize != fp->attr[j].size ||
-         vf->attr[j].vertoffset != fp->attr[j].offset) 
-        return GL_FALSE;
-      
-   if (fp->match_strides) {
-      if (vf->vertex_stride != fp->vertex_stride)
-        return GL_FALSE;
-
-      for (j = 0; j < vf->attr_count; j++) 
-        if (vf->attr[j].inputstride != fp->attr[j].stride) 
-           return GL_FALSE;
-   }
-   
-   return GL_TRUE;
-}
-
-static GLboolean search_fastpath_emit( struct vertex_fetch *vf )
-{
-   struct vf_fastpath *fp = vf->fastpath;
-
-   for ( ; fp ; fp = fp->next) {
-      if (match_fastpath(vf, fp)) {
-         vf->emit = fp->func;
-        return GL_TRUE;
-      }
-   }
-
-   return GL_FALSE;
-}
-
-void vf_register_fastpath( struct vertex_fetch *vf,
-                            GLboolean match_strides )
-{
-   struct vf_fastpath *fastpath = CALLOC_STRUCT(vf_fastpath);
-   GLuint i;
-
-   fastpath->vertex_stride = vf->vertex_stride;
-   fastpath->attr_count = vf->attr_count;
-   fastpath->match_strides = match_strides;
-   fastpath->func = vf->emit;
-   fastpath->attr = (struct vf_attr_type *)
-      malloc(vf->attr_count * sizeof(fastpath->attr[0]));
-
-   for (i = 0; i < vf->attr_count; i++) {
-      fastpath->attr[i].format = vf->attr[i].format;
-      fastpath->attr[i].stride = vf->attr[i].inputstride;
-      fastpath->attr[i].size = vf->attr[i].inputsize;
-      fastpath->attr[i].offset = vf->attr[i].vertoffset;
-   }
-
-   fastpath->next = vf->fastpath;
-   vf->fastpath = fastpath;
-}
-
-
-
-
-/***********************************************************************
- * Build codegen functions or return generic ones:
- */
-static void choose_emit_func( struct vertex_fetch *vf, 
-                             GLuint count, 
-                             GLubyte *dest)
-{
-   vf->emit = NULL;
-   
-   /* Does this match an existing (hardwired, codegen or known-bad)
-    * fastpath?
-    */
-   if (search_fastpath_emit(vf)) {
-      /* Use this result.  If it is null, then it is already known
-       * that the current state will fail for codegen and there is no
-       * point trying again.
-       */
-   }
-   else if (vf->codegen_emit) {
-      vf->codegen_emit( vf );
-   }
-
-   if (!vf->emit) {
-      vf_generate_hardwired_emit(vf);
-   }
-
-   /* Otherwise use the generic version:
-    */
-   if (!vf->emit)
-      vf->emit = vf_generic_emit;
-
-   vf->emit( vf, count, dest );
-}
-
-
-
-
-
-/***********************************************************************
- * Public entrypoints, mostly dispatch to the above:
- */
-
-
-
-GLuint vf_set_vertex_attributes( struct vertex_fetch *vf, 
-                                const struct vf_attr_map *map,
-                                GLuint nr, 
-                                GLuint vertex_stride )
-{
-   GLuint offset = 0;
-   GLuint i, j;
-
-   assert(nr < VF_ATTRIB_MAX);
-
-   memset(vf->lookup, 0, sizeof(vf->lookup));
-
-   for (j = 0, i = 0; i < nr; i++) {
-      const GLuint format = map[i].format;
-      if (format == EMIT_PAD) {
-        if (DBG)
-           printf("%d: pad %d, offset %d\n", i,  
-                  map[i].offset, offset);  
-
-        offset += map[i].offset;
-
-      }
-      else {
-        assert(vf->lookup[map[i].attrib] == 0);
-        vf->lookup[map[i].attrib] = &vf->attr[j];
-
-        vf->attr[j].attrib = map[i].attrib;
-        vf->attr[j].format = format;
-        vf->attr[j].insert = vf_format_info[format].insert;
-        vf->attr[j].extract = vf_format_info[format].extract;
-        vf->attr[j].vertattrsize = vf_format_info[format].attrsize;
-        vf->attr[j].vertoffset = offset;
-        
-        if (DBG)
-           printf("%d: %s, offset %d\n", i,  
-                  vf_format_info[format].name,
-                  vf->attr[j].vertoffset);   
-
-        offset += vf_format_info[format].attrsize;
-        j++;
-      }
-   }
-
-   vf->attr_count = j;
-   vf->vertex_stride = vertex_stride ? vertex_stride : offset;
-   vf->emit = choose_emit_func;
-
-   assert(vf->vertex_stride >= offset);
-   return vf->vertex_stride;
-}
-
-
-
-void vf_set_vp_matrix( struct vertex_fetch *vf,
-                      const GLfloat *viewport )
-{
-   assert(vf->allow_viewport_emits);
-
-   /* scale */
-   vf->vp[0] = viewport[MAT_SX];
-   vf->vp[1] = viewport[MAT_SY];
-   vf->vp[2] = viewport[MAT_SZ];
-   vf->vp[3] = 1.0;
-
-   /* translate */
-   vf->vp[4] = viewport[MAT_TX];
-   vf->vp[5] = viewport[MAT_TY];
-   vf->vp[6] = viewport[MAT_TZ];
-   vf->vp[7] = 0.0;
-}
-
-void vf_set_vp_scale_translate( struct vertex_fetch *vf,
-                               const GLfloat *scale,
-                               const GLfloat *translate )
-{
-   assert(vf->allow_viewport_emits);
-
-   vf->vp[0] = scale[0];
-   vf->vp[1] = scale[1];
-   vf->vp[2] = scale[2];
-   vf->vp[3] = scale[3];
-
-   vf->vp[4] = translate[0];
-   vf->vp[5] = translate[1];
-   vf->vp[6] = translate[2];
-   vf->vp[7] = translate[3];
-}
-
-
-/* Set attribute pointers, adjusted for start position:
- */
-void vf_set_sources( struct vertex_fetch *vf,
-                    GLvector4f * const sources[],
-                    GLuint start )
-{
-   struct vf_attr *a = vf->attr;
-   GLuint j;
-   
-   for (j = 0; j < vf->attr_count; j++) {
-      const GLvector4f *vptr = sources[a[j].attrib];
-      
-      if ((a[j].inputstride != vptr->stride) ||
-         (a[j].inputsize != vptr->size))
-        vf->emit = choose_emit_func;
-      
-      a[j].inputstride = vptr->stride;
-      a[j].inputsize = vptr->size;
-      a[j].do_insert = a[j].insert[vptr->size - 1]; 
-      a[j].inputptr = ((GLubyte *)vptr->data) + start * vptr->stride;
-   }
-}
-
-
-
-/* Emit count VB vertices to dest.  
- */
-void vf_emit_vertices( struct vertex_fetch *vf,
-                      GLuint count,
-                      void *dest )
-{
-   vf->emit( vf, count, (GLubyte*) dest );     
-}
-
-
-/* Extract a named attribute from a hardware vertex.  Will have to
- * reverse any viewport transformation, swizzling or other conversions
- * which may have been applied.
- *
- * This is mainly required for on-the-fly vertex translations to
- * swrast format.
- */
-void vf_get_attr( struct vertex_fetch *vf,
-                 const void *vertex,
-                 GLenum attr, 
-                 const GLfloat *dflt,
-                 GLfloat *dest )
-{
-   const struct vf_attr *a = vf->attr;
-   const GLuint attr_count = vf->attr_count;
-   GLuint j;
-
-   for (j = 0; j < attr_count; j++) {
-      if (a[j].attrib == attr) {
-        a[j].extract( &a[j], dest, (GLubyte *)vertex + a[j].vertoffset );
-        return;
-      }
-   }
-
-   /* Else return the value from ctx->Current.
-    */
-   memcpy( dest, dflt, 4*sizeof(GLfloat));
-}
-
-
-
-
-struct vertex_fetch *vf_create( GLboolean allow_viewport_emits )
-{
-   struct vertex_fetch *vf = CALLOC_STRUCT(vertex_fetch);
-   GLuint i;
-
-   for (i = 0; i < VF_ATTRIB_MAX; i++)
-      vf->attr[i].vf = vf;
-
-   vf->allow_viewport_emits = allow_viewport_emits;
-
-   switch(CHAN_TYPE) {
-   case GL_UNSIGNED_BYTE:
-      vf->chan_scale[0] = 255.0;
-      vf->chan_scale[1] = 255.0;
-      vf->chan_scale[2] = 255.0;
-      vf->chan_scale[3] = 255.0;
-      break;
-   case GL_UNSIGNED_SHORT:
-      vf->chan_scale[0] = 65535.0;
-      vf->chan_scale[1] = 65535.0;
-      vf->chan_scale[2] = 65535.0;
-      vf->chan_scale[3] = 65535.0;
-      break;
-   default:
-      vf->chan_scale[0] = 1.0;
-      vf->chan_scale[1] = 1.0;
-      vf->chan_scale[2] = 1.0;
-      vf->chan_scale[3] = 1.0;
-      break;
-   }
-
-   vf->identity[0] = 0.0;
-   vf->identity[1] = 0.0;
-   vf->identity[2] = 0.0;
-   vf->identity[3] = 1.0;
-
-   vf->codegen_emit = NULL;
-
-#ifdef USE_SSE_ASM
-   if (!_mesa_getenv("MESA_NO_CODEGEN"))
-      vf->codegen_emit = vf_generate_sse_emit;
-#endif
-
-   return vf;
-}
-
-
-void vf_destroy( struct vertex_fetch *vf )
-{
-   struct vf_fastpath *fp, *tmp;
-
-   for (fp = vf->fastpath ; fp ; fp = tmp) {
-      tmp = fp->next;
-      FREE(fp->attr);
-
-      /* KW: At the moment, fp->func is constrained to be allocated by
-       * _mesa_exec_alloc(), as the hardwired fastpaths in
-       * t_vertex_generic.c are handled specially.  It would be nice
-       * to unify them, but this probably won't change until this
-       * module gets another overhaul.
-       */
-      _mesa_exec_free((void *) fp->func);
-      FREE(fp);
-   }
-   
-   vf->fastpath = NULL;
-   FREE(vf);
-}
diff --git a/src/mesa/vf/vf.h b/src/mesa/vf/vf.h
deleted file mode 100644 (file)
index 5fe392b..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Copyright 2003 Tungsten 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
- * 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
- * TUNGSTEN GRAPHICS 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:
- *    Keith Whitwell <keithw@tungstengraphics.com>
- */
-
-#ifndef VF_VERTEX_H
-#define VF_VERTEX_H
-
-#include "main/glheader.h"
-#include "math/m_vector.h"
-
-enum {
-   VF_ATTRIB_POS = 0,
-   VF_ATTRIB_WEIGHT = 1,
-   VF_ATTRIB_NORMAL = 2,
-   VF_ATTRIB_COLOR0 = 3,
-   VF_ATTRIB_COLOR1 = 4,
-   VF_ATTRIB_FOG = 5,
-   VF_ATTRIB_COLOR_INDEX = 6,
-   VF_ATTRIB_EDGEFLAG = 7,
-   VF_ATTRIB_TEX0 = 8,
-   VF_ATTRIB_TEX1 = 9,
-   VF_ATTRIB_TEX2 = 10,
-   VF_ATTRIB_TEX3 = 11,
-   VF_ATTRIB_TEX4 = 12,
-   VF_ATTRIB_TEX5 = 13,
-   VF_ATTRIB_TEX6 = 14,
-   VF_ATTRIB_TEX7 = 15,
-   VF_ATTRIB_VAR0 = 16,
-   VF_ATTRIB_VAR1 = 17,
-   VF_ATTRIB_VAR2 = 18,
-   VF_ATTRIB_VAR3 = 19,
-   VF_ATTRIB_VAR4 = 20,
-   VF_ATTRIB_VAR5 = 21,
-   VF_ATTRIB_VAR6 = 22,
-   VF_ATTRIB_VAR7 = 23,
-   VF_ATTRIB_POINTSIZE = 24,
-   VF_ATTRIB_BFC0 = 25,
-   VF_ATTRIB_BFC1 = 26,
-   VF_ATTRIB_CLIP_POS = 27,
-   VF_ATTRIB_VERTEX_HEADER = 28,
-   VF_ATTRIB_MAX = 29
-};
-
-
-enum vf_attr_format {
-   EMIT_1F,
-   EMIT_2F,
-   EMIT_3F,
-   EMIT_4F,
-   EMIT_2F_VIEWPORT,           /* do viewport transform and emit */
-   EMIT_3F_VIEWPORT,           /* do viewport transform and emit */
-   EMIT_4F_VIEWPORT,           /* do viewport transform and emit */
-   EMIT_3F_XYW,                        /* for projective texture */
-   EMIT_1UB_1F,                        /* for fog coordinate */
-   EMIT_3UB_3F_RGB,            /* for specular color */
-   EMIT_3UB_3F_BGR,            /* for specular color */
-   EMIT_4UB_4F_RGBA,           /* for color */
-   EMIT_4UB_4F_BGRA,           /* for color */
-   EMIT_4UB_4F_ARGB,           /* for color */
-   EMIT_4UB_4F_ABGR,           /* for color */
-   EMIT_4CHAN_4F_RGBA,         /* for swrast color */
-   EMIT_PAD,                   /* leave a hole of 'offset' bytes */
-   EMIT_MAX
-};
-
-struct vf_attr_map {
-   GLuint attrib;
-   enum vf_attr_format format;
-   GLuint offset;
-};
-
-struct vertex_fetch;
-
-void vf_set_vp_matrix( struct vertex_fetch *vf,
-                     const GLfloat *viewport );
-
-void vf_set_vp_scale_translate( struct vertex_fetch *vf,
-                               const GLfloat *scale,
-                               const GLfloat *translate );
-
-GLuint vf_set_vertex_attributes( struct vertex_fetch *vf,
-                                const struct vf_attr_map *map,
-                                GLuint nr, 
-                                GLuint vertex_stride );
-
-void vf_set_sources( struct vertex_fetch *vf,
-                    GLvector4f * const attrib[],
-                    GLuint start ); 
-
-void vf_emit_vertices( struct vertex_fetch *vf,
-                      GLuint count,
-                      void *dest );
-
-void vf_get_attr( struct vertex_fetch *vf,
-                 const void *vertex,
-                 GLenum attr, 
-                 const GLfloat *dflt,
-                 GLfloat *dest );
-
-struct vertex_fetch *vf_create( GLboolean allow_viewport_emits );
-
-void vf_destroy( struct vertex_fetch *vf );
-
-
-
-/***********************************************************************
- * Internal functions and structs:
- */
-
-struct vf_attr;
-
-typedef void (*vf_extract_func)( const struct vf_attr *a, 
-                                GLfloat *out, 
-                                const GLubyte *v );
-
-typedef void (*vf_insert_func)( const struct vf_attr *a, 
-                               GLubyte *v, 
-                               const GLfloat *in );
-
-typedef void (*vf_emit_func)( struct vertex_fetch *vf,
-                             GLuint count, 
-                             GLubyte *dest );
-
-
-
-/* Describes how to convert/move a vertex attribute from a vertex
- * array to a vertex structure.
- */
-struct vf_attr
-{
-   struct vertex_fetch *vf;
-
-   GLuint format;
-   GLuint inputsize;
-   GLuint inputstride;
-   GLuint vertoffset;      /* position of the attrib in the vertex struct */
-
-   GLuint attrib;          /* which vertex attrib (0=position, etc) */
-   GLuint vertattrsize;    /* size of the attribute in bytes */
-
-   GLubyte *inputptr;
-   const vf_insert_func *insert;
-   vf_insert_func do_insert;
-   vf_extract_func extract;
-};
-
-struct vertex_fetch
-{
-   struct vf_attr attr[VF_ATTRIB_MAX];
-   GLuint attr_count;
-   GLuint vertex_stride;
-
-   struct vf_attr *lookup[VF_ATTRIB_MAX];
-   
-   vf_emit_func emit;
-
-   /* Parameters and constants for codegen:
-    */
-   GLboolean allow_viewport_emits;
-   GLfloat vp[8];              
-   GLfloat chan_scale[4];
-   GLfloat identity[4];
-
-   struct vf_fastpath *fastpath;
-   
-   void (*codegen_emit)( struct vertex_fetch *vf );
-};
-
-
-struct vf_attr_type {
-   GLuint format;
-   GLuint size;
-   GLuint stride;
-   GLuint offset;
-};
-
-struct vf_fastpath {
-   GLuint vertex_stride;
-   GLuint attr_count;
-   GLboolean match_strides;
-
-   struct vf_attr_type *attr;
-
-   vf_emit_func func;
-   struct vf_fastpath *next;
-};
-
-
-void vf_register_fastpath( struct vertex_fetch *vtx,
-                            GLboolean match_strides );
-
-void vf_generic_emit( struct vertex_fetch *vf,
-                       GLuint count,
-                       GLubyte *v );
-
-void vf_generate_hardwired_emit( struct vertex_fetch *vf );
-
-void vf_generate_sse_emit( struct vertex_fetch *vf );
-
-
-struct vf_format_info {
-   const char *name;
-   vf_extract_func extract;
-   vf_insert_func insert[4];
-   const GLuint attrsize;
-};
-
-const struct vf_format_info vf_format_info[EMIT_MAX];
-
-
-#endif
diff --git a/src/mesa/vf/vf_generic.c b/src/mesa/vf/vf_generic.c
deleted file mode 100644 (file)
index 95a317e..0000000
+++ /dev/null
@@ -1,982 +0,0 @@
-
-/*
- * Copyright 2003 Tungsten 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
- * 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
- * TUNGSTEN GRAPHICS 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:
- *    Keith Whitwell <keithw@tungstengraphics.com>
- */
-
-#include "main/glheader.h"
-#include "main/context.h"
-#include "main/colormac.h"
-#include "main/macros.h"
-#include "main/simple_list.h"
-
-#include "vf/vf.h"
-
-
-/*
- * These functions take the NDC coordinates pointed to by 'in', apply the
- * NDC->Viewport mapping and store the results at 'v'.
- */
-
-static INLINE void insert_4f_viewport_4( const struct vf_attr *a, GLubyte *v,
-                                        const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)v;
-   const GLfloat *scale = a->vf->vp;
-   const GLfloat *trans = a->vf->vp + 4;
-   
-   out[0] = scale[0] * in[0] + trans[0];
-   out[1] = scale[1] * in[1] + trans[1];
-   out[2] = scale[2] * in[2] + trans[2];
-   out[3] = in[3];
-}
-
-static INLINE void insert_4f_viewport_3( const struct vf_attr *a, GLubyte *v,
-                                        const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)v;
-   const GLfloat *scale = a->vf->vp;
-   const GLfloat *trans = a->vf->vp + 4;
-   
-   out[0] = scale[0] * in[0] + trans[0];
-   out[1] = scale[1] * in[1] + trans[1];
-   out[2] = scale[2] * in[2] + trans[2];
-   out[3] = 1;
-}
-
-static INLINE void insert_4f_viewport_2( const struct vf_attr *a, GLubyte *v,
-                                        const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)v;
-   const GLfloat *scale = a->vf->vp;
-   const GLfloat *trans = a->vf->vp + 4;
-   
-   out[0] = scale[0] * in[0] + trans[0];
-   out[1] = scale[1] * in[1] + trans[1];
-   out[2] =                    trans[2];
-   out[3] = 1;
-}
-
-static INLINE void insert_4f_viewport_1( const struct vf_attr *a, GLubyte *v,
-                                        const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)v;
-   const GLfloat *scale = a->vf->vp;
-   const GLfloat *trans = a->vf->vp + 4;
-   
-   out[0] = scale[0] * in[0] + trans[0];
-   out[1] =                    trans[1];
-   out[2] =                    trans[2];
-   out[3] = 1;
-}
-
-static INLINE void insert_3f_viewport_3( const struct vf_attr *a, GLubyte *v,
-                                        const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)v;
-   const GLfloat *scale = a->vf->vp;
-   const GLfloat *trans = a->vf->vp + 4;
-   
-   out[0] = scale[0] * in[0] + trans[0];
-   out[1] = scale[1] * in[1] + trans[1];
-   out[2] = scale[2] * in[2] + trans[2];
-}
-
-static INLINE void insert_3f_viewport_2( const struct vf_attr *a, GLubyte *v,
-                                        const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)v;
-   const GLfloat *scale = a->vf->vp;
-   const GLfloat *trans = a->vf->vp + 4;
-   
-   out[0] = scale[0] * in[0] + trans[0];
-   out[1] = scale[1] * in[1] + trans[1];
-   out[2] = scale[2] * in[2] + trans[2];
-}
-
-static INLINE void insert_3f_viewport_1( const struct vf_attr *a, GLubyte *v,
-                                        const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)v;
-   const GLfloat *scale = a->vf->vp;
-   const GLfloat *trans = a->vf->vp + 4;
-   
-   out[0] = scale[0] * in[0] + trans[0];
-   out[1] =                    trans[1];
-   out[2] =                    trans[2];
-}
-
-static INLINE void insert_2f_viewport_2( const struct vf_attr *a, GLubyte *v,
-                                        const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)v;
-   const GLfloat *scale = a->vf->vp;
-   const GLfloat *trans = a->vf->vp + 4;
-   
-   out[0] = scale[0] * in[0] + trans[0];
-   out[1] = scale[1] * in[1] + trans[1];
-}
-
-static INLINE void insert_2f_viewport_1( const struct vf_attr *a, GLubyte *v,
-                                        const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)v;
-   const GLfloat *scale = a->vf->vp;
-   const GLfloat *trans = a->vf->vp + 4;
-   
-   out[0] = scale[0] * in[0] + trans[0];
-   out[1] = trans[1];
-}
-
-
-/*
- * These functions do the same as above, except for the viewport mapping.
- */
-
-static INLINE void insert_4f_4( const struct vf_attr *a, GLubyte *v, const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)(v);
-   (void) a;
-   
-   out[0] = in[0];
-   out[1] = in[1];
-   out[2] = in[2];
-   out[3] = in[3];
-}
-
-static INLINE void insert_4f_3( const struct vf_attr *a, GLubyte *v, const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)(v);
-   (void) a;
-   
-   out[0] = in[0];
-   out[1] = in[1];
-   out[2] = in[2];
-   out[3] = 1;
-}
-
-static INLINE void insert_4f_2( const struct vf_attr *a, GLubyte *v, const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)(v);
-   (void) a;
-   
-   out[0] = in[0];
-   out[1] = in[1];
-   out[2] = 0;
-   out[3] = 1;
-}
-
-static INLINE void insert_4f_1( const struct vf_attr *a, GLubyte *v, const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)(v);
-   (void) a;
-   
-   out[0] = in[0];
-   out[1] = 0;
-   out[2] = 0;
-   out[3] = 1;
-}
-
-static INLINE void insert_3f_xyw_4( const struct vf_attr *a, GLubyte *v, const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)(v);
-   (void) a;
-   
-   out[0] = in[0];
-   out[1] = in[1];
-   out[2] = in[3];
-}
-
-static INLINE void insert_3f_xyw_err( const struct vf_attr *a, GLubyte *v, const GLfloat *in )
-{
-   (void) a; (void) v; (void) in;
-   exit(1);
-}
-
-static INLINE void insert_3f_3( const struct vf_attr *a, GLubyte *v, const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)(v);
-   (void) a;
-   
-   out[0] = in[0];
-   out[1] = in[1];
-   out[2] = in[2];
-}
-
-static INLINE void insert_3f_2( const struct vf_attr *a, GLubyte *v, const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)(v);
-   (void) a;
-   
-   out[0] = in[0];
-   out[1] = in[1];
-   out[2] = 0;
-}
-
-static INLINE void insert_3f_1( const struct vf_attr *a, GLubyte *v, const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)(v);
-   (void) a;
-   
-   out[0] = in[0];
-   out[1] = 0;
-   out[2] = 0;
-}
-
-
-static INLINE void insert_2f_2( const struct vf_attr *a, GLubyte *v, const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)(v);
-   (void) a;
-   
-   out[0] = in[0];
-   out[1] = in[1];
-}
-
-static INLINE void insert_2f_1( const struct vf_attr *a, GLubyte *v, const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)(v);
-   (void) a;
-   
-   out[0] = in[0];
-   out[1] = 0;
-}
-
-static INLINE void insert_1f_1( const struct vf_attr *a, GLubyte *v, const GLfloat *in )
-{
-   GLfloat *out = (GLfloat *)(v);
-   (void) a;
-
-   out[0] = in[0];
-}
-
-static INLINE void insert_null( const struct vf_attr *a, GLubyte *v, const GLfloat *in )
-{
-   (void) a; (void) v; (void) in;
-}
-
-static INLINE void insert_4chan_4f_rgba_4( const struct vf_attr *a, GLubyte *v, 
-                                          const GLfloat *in )
-{
-   GLchan *c = (GLchan *)v;
-   (void) a;
-   UNCLAMPED_FLOAT_TO_CHAN(c[0], in[0]); 
-   UNCLAMPED_FLOAT_TO_CHAN(c[1], in[1]); 
-   UNCLAMPED_FLOAT_TO_CHAN(c[2], in[2]); 
-   UNCLAMPED_FLOAT_TO_CHAN(c[3], in[3]);
-}
-
-static INLINE void insert_4chan_4f_rgba_3( const struct vf_attr *a, GLubyte *v, 
-                                          const GLfloat *in )
-{
-   GLchan *c = (GLchan *)v;
-   (void) a;
-   UNCLAMPED_FLOAT_TO_CHAN(c[0], in[0]); 
-   UNCLAMPED_FLOAT_TO_CHAN(c[1], in[1]); 
-   UNCLAMPED_FLOAT_TO_CHAN(c[2], in[2]); 
-   c[3] = CHAN_MAX;
-}
-
-static INLINE void insert_4chan_4f_rgba_2( const struct vf_attr *a, GLubyte *v, 
-                                          const GLfloat *in )
-{
-   GLchan *c = (GLchan *)v;
-   (void) a;
-   UNCLAMPED_FLOAT_TO_CHAN(c[0], in[0]); 
-   UNCLAMPED_FLOAT_TO_CHAN(c[1], in[1]); 
-   c[2] = 0;
-   c[3] = CHAN_MAX;
-}
-
-static INLINE void insert_4chan_4f_rgba_1( const struct vf_attr *a, GLubyte *v, 
-                                          const GLfloat *in )
-{
-   GLchan *c = (GLchan *)v;
-   (void) a;
-   UNCLAMPED_FLOAT_TO_CHAN(c[0], in[0]); 
-   c[1] = 0;
-   c[2] = 0;
-   c[3] = CHAN_MAX;
-}
-
-static INLINE void insert_4ub_4f_rgba_4( const struct vf_attr *a, GLubyte *v, 
-                                        const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[2]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[3]);
-}
-
-static INLINE void insert_4ub_4f_rgba_3( const struct vf_attr *a, GLubyte *v, 
-                                        const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[2]);
-   v[3] = 0xff;
-}
-
-static INLINE void insert_4ub_4f_rgba_2( const struct vf_attr *a, GLubyte *v, 
-                                        const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
-   v[2] = 0;
-   v[3] = 0xff;
-}
-
-static INLINE void insert_4ub_4f_rgba_1( const struct vf_attr *a, GLubyte *v, 
-                                        const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[0]);
-   v[1] = 0;
-   v[2] = 0;
-   v[3] = 0xff;
-}
-
-static INLINE void insert_4ub_4f_bgra_4( const struct vf_attr *a, GLubyte *v, 
-                                        const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[2]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[3]);
-}
-
-static INLINE void insert_4ub_4f_bgra_3( const struct vf_attr *a, GLubyte *v, 
-                                        const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[2]);
-   v[3] = 0xff;
-}
-
-static INLINE void insert_4ub_4f_bgra_2( const struct vf_attr *a, GLubyte *v, 
-                                        const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
-   v[0] = 0;
-   v[3] = 0xff;
-}
-
-static INLINE void insert_4ub_4f_bgra_1( const struct vf_attr *a, GLubyte *v, 
-                                        const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[0]);
-   v[1] = 0;
-   v[0] = 0;
-   v[3] = 0xff;
-}
-
-static INLINE void insert_4ub_4f_argb_4( const struct vf_attr *a, GLubyte *v, 
-                                        const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[1]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[2]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[3]);
-}
-
-static INLINE void insert_4ub_4f_argb_3( const struct vf_attr *a, GLubyte *v, 
-                                        const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[1]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[2]);
-   v[0] = 0xff;
-}
-
-static INLINE void insert_4ub_4f_argb_2( const struct vf_attr *a, GLubyte *v, 
-                                        const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[1]);
-   v[3] = 0x00;
-   v[0] = 0xff;
-}
-
-static INLINE void insert_4ub_4f_argb_1( const struct vf_attr *a, GLubyte *v, 
-                                        const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[0]);
-   v[2] = 0x00;
-   v[3] = 0x00;
-   v[0] = 0xff;
-}
-
-static INLINE void insert_4ub_4f_abgr_4( const struct vf_attr *a, GLubyte *v, 
-                                        const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[1]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[2]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[3]);
-}
-
-static INLINE void insert_4ub_4f_abgr_3( const struct vf_attr *a, GLubyte *v, 
-                                        const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[1]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[2]);
-   v[0] = 0xff;
-}
-
-static INLINE void insert_4ub_4f_abgr_2( const struct vf_attr *a, GLubyte *v, 
-                                        const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[1]);
-   v[1] = 0x00;
-   v[0] = 0xff;
-}
-
-static INLINE void insert_4ub_4f_abgr_1( const struct vf_attr *a, GLubyte *v, 
-                                        const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[0]);
-   v[2] = 0x00;
-   v[1] = 0x00;
-   v[0] = 0xff;
-}
-
-static INLINE void insert_3ub_3f_rgb_3( const struct vf_attr *a, GLubyte *v, 
-                                       const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[2]);
-}
-
-static INLINE void insert_3ub_3f_rgb_2( const struct vf_attr *a, GLubyte *v, 
-                                       const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
-   v[2] = 0;
-}
-
-static INLINE void insert_3ub_3f_rgb_1( const struct vf_attr *a, GLubyte *v, 
-                                       const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[0]);
-   v[1] = 0;
-   v[2] = 0;
-}
-
-static INLINE void insert_3ub_3f_bgr_3( const struct vf_attr *a, GLubyte *v, 
-                                       const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[2]);
-}
-
-static INLINE void insert_3ub_3f_bgr_2( const struct vf_attr *a, GLubyte *v, 
-                                       const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[0]);
-   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[1]);
-   v[0] = 0;
-}
-
-static INLINE void insert_3ub_3f_bgr_1( const struct vf_attr *a, GLubyte *v, 
-                                       const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[0]);
-   v[1] = 0;
-   v[0] = 0;
-}
-
-
-static INLINE void insert_1ub_1f_1( const struct vf_attr *a, GLubyte *v, 
-                                   const GLfloat *in )
-{
-   (void) a;
-   UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[0]);
-}
-
-
-/***********************************************************************
- * Functions to perform the reverse operations to the above, for
- * swrast translation and clip-interpolation.
- * 
- * Currently always extracts a full 4 floats.
- */
-
-static void extract_4f_viewport( const struct vf_attr *a, GLfloat *out, 
-                                const GLubyte *v )
-{
-   const GLfloat *in = (const GLfloat *)v;
-   const GLfloat *scale = a->vf->vp;
-   const GLfloat *trans = a->vf->vp + 4;
-   
-   /* Although included for completeness, the position coordinate is
-    * usually handled differently during clipping.
-    */
-   out[0] = (in[0] - trans[0]) / scale[0];
-   out[1] = (in[1] - trans[1]) / scale[1];
-   out[2] = (in[2] - trans[2]) / scale[2];
-   out[3] = in[3];
-}
-
-static void extract_3f_viewport( const struct vf_attr *a, GLfloat *out, 
-                                const GLubyte *v )
-{
-   const GLfloat *in = (const GLfloat *)v;
-   const GLfloat *scale = a->vf->vp;
-   const GLfloat *trans = a->vf->vp + 4;
-   
-   out[0] = (in[0] - trans[0]) / scale[0];
-   out[1] = (in[1] - trans[1]) / scale[1];
-   out[2] = (in[2] - trans[2]) / scale[2];
-   out[3] = 1;
-}
-
-
-static void extract_2f_viewport( const struct vf_attr *a, GLfloat *out, 
-                                const GLubyte *v )
-{
-   const GLfloat *in = (const GLfloat *)v;
-   const GLfloat *scale = a->vf->vp;
-   const GLfloat *trans = a->vf->vp + 4;
-   
-   out[0] = (in[0] - trans[0]) / scale[0];
-   out[1] = (in[1] - trans[1]) / scale[1];
-   out[2] = 0;
-   out[3] = 1;
-}
-
-
-static void extract_4f( const struct vf_attr *a, GLfloat *out, const GLubyte *v  )
-{
-   const GLfloat *in = (const GLfloat *)v;
-   (void) a;
-   
-   out[0] = in[0];
-   out[1] = in[1];
-   out[2] = in[2];
-   out[3] = in[3];
-}
-
-static void extract_3f_xyw( const struct vf_attr *a, GLfloat *out, const GLubyte *v )
-{
-   const GLfloat *in = (const GLfloat *)v;
-   (void) a;
-   
-   out[0] = in[0];
-   out[1] = in[1];
-   out[2] = 0;
-   out[3] = in[2];
-}
-
-
-static void extract_3f( const struct vf_attr *a, GLfloat *out, const GLubyte *v )
-{
-   const GLfloat *in = (const GLfloat *)v;
-   (void) a;
-   
-   out[0] = in[0];
-   out[1] = in[1];
-   out[2] = in[2];
-   out[3] = 1;
-}
-
-
-static void extract_2f( const struct vf_attr *a, GLfloat *out, const GLubyte *v )
-{
-   const GLfloat *in = (const GLfloat *)v;
-   (void) a;
-   
-   out[0] = in[0];
-   out[1] = in[1];
-   out[2] = 0;
-   out[3] = 1;
-}
-
-static void extract_1f( const struct vf_attr *a, GLfloat *out, const GLubyte *v )
-{
-   const GLfloat *in = (const GLfloat *)v;
-   (void) a;
-   
-   out[0] = in[0];
-   out[1] = 0;
-   out[2] = 0;
-   out[3] = 1;
-}
-
-static void extract_4chan_4f_rgba( const struct vf_attr *a, GLfloat *out, 
-                                  const GLubyte *v )
-{
-   GLchan *c = (GLchan *)v;
-   (void) a;
-
-   out[0] = CHAN_TO_FLOAT(c[0]);
-   out[1] = CHAN_TO_FLOAT(c[1]);
-   out[2] = CHAN_TO_FLOAT(c[2]);
-   out[3] = CHAN_TO_FLOAT(c[3]);
-}
-
-static void extract_4ub_4f_rgba( const struct vf_attr *a, GLfloat *out, 
-                                const GLubyte *v )
-{
-   (void) a;
-   out[0] = UBYTE_TO_FLOAT(v[0]);
-   out[1] = UBYTE_TO_FLOAT(v[1]);
-   out[2] = UBYTE_TO_FLOAT(v[2]);
-   out[3] = UBYTE_TO_FLOAT(v[3]);
-}
-
-static void extract_4ub_4f_bgra( const struct vf_attr *a, GLfloat *out, 
-                                const GLubyte *v )
-{
-   (void) a;
-   out[2] = UBYTE_TO_FLOAT(v[0]);
-   out[1] = UBYTE_TO_FLOAT(v[1]);
-   out[0] = UBYTE_TO_FLOAT(v[2]);
-   out[3] = UBYTE_TO_FLOAT(v[3]);
-}
-
-static void extract_4ub_4f_argb( const struct vf_attr *a, GLfloat *out, 
-                                const GLubyte *v )
-{
-   (void) a;
-   out[3] = UBYTE_TO_FLOAT(v[0]);
-   out[0] = UBYTE_TO_FLOAT(v[1]);
-   out[1] = UBYTE_TO_FLOAT(v[2]);
-   out[2] = UBYTE_TO_FLOAT(v[3]);
-}
-
-static void extract_4ub_4f_abgr( const struct vf_attr *a, GLfloat *out, 
-                                const GLubyte *v )
-{
-   (void) a;
-   out[3] = UBYTE_TO_FLOAT(v[0]);
-   out[2] = UBYTE_TO_FLOAT(v[1]);
-   out[1] = UBYTE_TO_FLOAT(v[2]);
-   out[0] = UBYTE_TO_FLOAT(v[3]);
-}
-
-static void extract_3ub_3f_rgb( const struct vf_attr *a, GLfloat *out, 
-                               const GLubyte *v )
-{
-   (void) a;
-   out[0] = UBYTE_TO_FLOAT(v[0]);
-   out[1] = UBYTE_TO_FLOAT(v[1]);
-   out[2] = UBYTE_TO_FLOAT(v[2]);
-   out[3] = 1;
-}
-
-static void extract_3ub_3f_bgr( const struct vf_attr *a, GLfloat *out, 
-                               const GLubyte *v )
-{
-   (void) a;
-   out[2] = UBYTE_TO_FLOAT(v[0]);
-   out[1] = UBYTE_TO_FLOAT(v[1]);
-   out[0] = UBYTE_TO_FLOAT(v[2]);
-   out[3] = 1;
-}
-
-static void extract_1ub_1f( const struct vf_attr *a, GLfloat *out, const GLubyte *v )
-{
-   (void) a;
-   out[0] = UBYTE_TO_FLOAT(v[0]);
-   out[1] = 0;
-   out[2] = 0;
-   out[3] = 1;
-}
-
-
-const struct vf_format_info vf_format_info[EMIT_MAX] = 
-{
-   { "1f",
-     extract_1f,
-     { insert_1f_1, insert_1f_1, insert_1f_1, insert_1f_1 },
-     sizeof(GLfloat) },
-
-   { "2f",
-     extract_2f,
-     { insert_2f_1, insert_2f_2, insert_2f_2, insert_2f_2 },
-     2 * sizeof(GLfloat) },
-
-   { "3f",
-     extract_3f,
-     { insert_3f_1, insert_3f_2, insert_3f_3, insert_3f_3 },
-     3 * sizeof(GLfloat) },
-
-   { "4f",
-     extract_4f,
-     { insert_4f_1, insert_4f_2, insert_4f_3, insert_4f_4 },
-     4 * sizeof(GLfloat) },
-
-   { "2f_viewport",
-     extract_2f_viewport,
-     { insert_2f_viewport_1, insert_2f_viewport_2, insert_2f_viewport_2,
-       insert_2f_viewport_2 },
-     2 * sizeof(GLfloat) },
-
-   { "3f_viewport",
-     extract_3f_viewport,
-     { insert_3f_viewport_1, insert_3f_viewport_2, insert_3f_viewport_3,
-       insert_3f_viewport_3 },
-     3 * sizeof(GLfloat) },
-
-   { "4f_viewport",
-     extract_4f_viewport,
-     { insert_4f_viewport_1, insert_4f_viewport_2, insert_4f_viewport_3,
-       insert_4f_viewport_4 }, 
-     4 * sizeof(GLfloat) },
-
-   { "3f_xyw",
-     extract_3f_xyw,
-     { insert_3f_xyw_err, insert_3f_xyw_err, insert_3f_xyw_err, 
-       insert_3f_xyw_4 },
-     3 * sizeof(GLfloat) },
-
-   { "1ub_1f",
-     extract_1ub_1f,
-     { insert_1ub_1f_1, insert_1ub_1f_1, insert_1ub_1f_1, insert_1ub_1f_1 },
-     sizeof(GLubyte) },
-
-   { "3ub_3f_rgb",
-     extract_3ub_3f_rgb,
-     { insert_3ub_3f_rgb_1, insert_3ub_3f_rgb_2, insert_3ub_3f_rgb_3,
-       insert_3ub_3f_rgb_3 },
-     3 * sizeof(GLubyte) },
-
-   { "3ub_3f_bgr",
-     extract_3ub_3f_bgr,
-     { insert_3ub_3f_bgr_1, insert_3ub_3f_bgr_2, insert_3ub_3f_bgr_3,
-       insert_3ub_3f_bgr_3 },
-     3 * sizeof(GLubyte) },
-
-   { "4ub_4f_rgba",
-     extract_4ub_4f_rgba,
-     { insert_4ub_4f_rgba_1, insert_4ub_4f_rgba_2, insert_4ub_4f_rgba_3, 
-       insert_4ub_4f_rgba_4 },
-     4 * sizeof(GLubyte) },
-
-   { "4ub_4f_bgra",
-     extract_4ub_4f_bgra,
-     { insert_4ub_4f_bgra_1, insert_4ub_4f_bgra_2, insert_4ub_4f_bgra_3,
-       insert_4ub_4f_bgra_4 },
-     4 * sizeof(GLubyte) },
-
-   { "4ub_4f_argb",
-     extract_4ub_4f_argb,
-     { insert_4ub_4f_argb_1, insert_4ub_4f_argb_2, insert_4ub_4f_argb_3,
-       insert_4ub_4f_argb_4 },
-     4 * sizeof(GLubyte) },
-
-   { "4ub_4f_abgr",
-     extract_4ub_4f_abgr,
-     { insert_4ub_4f_abgr_1, insert_4ub_4f_abgr_2, insert_4ub_4f_abgr_3,
-       insert_4ub_4f_abgr_4 },
-     4 * sizeof(GLubyte) },
-
-   { "4chan_4f_rgba",
-     extract_4chan_4f_rgba,
-     { insert_4chan_4f_rgba_1, insert_4chan_4f_rgba_2, insert_4chan_4f_rgba_3,
-       insert_4chan_4f_rgba_4 },
-     4 * sizeof(GLchan) },
-
-   { "pad",
-     NULL,
-     { NULL, NULL, NULL, NULL },
-     0 }
-
-};
-
-
-
-    
-/***********************************************************************
- * Hardwired fastpaths for emitting whole vertices or groups of
- * vertices
- */
-#define EMIT5(NR, F0, F1, F2, F3, F4, NAME)                            \
-static void NAME( struct vertex_fetch *vf,                             \
-                 GLuint count,                                         \
-                 GLubyte *v )                                          \
-{                                                                      \
-   struct vf_attr *a = vf->attr;                               \
-   GLuint i;                                                           \
-                                                                       \
-   for (i = 0 ; i < count ; i++, v += vf->vertex_stride) {             \
-      if (NR > 0) {                                                    \
-        F0( &a[0], v + a[0].vertoffset, (GLfloat *)a[0].inputptr );    \
-        a[0].inputptr += a[0].inputstride;                             \
-      }                                                                        \
-                                                                       \
-      if (NR > 1) {                                                    \
-        F1( &a[1], v + a[1].vertoffset, (GLfloat *)a[1].inputptr );    \
-        a[1].inputptr += a[1].inputstride;                             \
-      }                                                                        \
-                                                                       \
-      if (NR > 2) {                                                    \
-        F2( &a[2], v + a[2].vertoffset, (GLfloat *)a[2].inputptr );    \
-        a[2].inputptr += a[2].inputstride;                             \
-      }                                                                        \
-                                                                       \
-      if (NR > 3) {                                                    \
-        F3( &a[3], v + a[3].vertoffset, (GLfloat *)a[3].inputptr );    \
-        a[3].inputptr += a[3].inputstride;                             \
-      }                                                                        \
-                                                                       \
-      if (NR > 4) {                                                    \
-        F4( &a[4], v + a[4].vertoffset, (GLfloat *)a[4].inputptr );    \
-        a[4].inputptr += a[4].inputstride;                             \
-      }                                                                        \
-   }                                                                   \
-}
-
-   
-#define EMIT2(F0, F1, NAME) EMIT5(2, F0, F1, insert_null, \
-                                 insert_null, insert_null, NAME)
-
-#define EMIT3(F0, F1, F2, NAME) EMIT5(3, F0, F1, F2, insert_null, \
-                                     insert_null, NAME)
-   
-#define EMIT4(F0, F1, F2, F3, NAME) EMIT5(4, F0, F1, F2, F3, \
-                                         insert_null, NAME)
-   
-
-EMIT2(insert_3f_viewport_3, insert_4ub_4f_rgba_4, emit_viewport3_rgba4)
-EMIT2(insert_3f_viewport_3, insert_4ub_4f_bgra_4, emit_viewport3_bgra4)
-EMIT2(insert_3f_3, insert_4ub_4f_rgba_4, emit_xyz3_rgba4)
-
-EMIT3(insert_4f_viewport_4, insert_4ub_4f_rgba_4, insert_2f_2, emit_viewport4_rgba4_st2)
-EMIT3(insert_4f_viewport_4, insert_4ub_4f_bgra_4, insert_2f_2,  emit_viewport4_bgra4_st2)
-EMIT3(insert_4f_4, insert_4ub_4f_rgba_4, insert_2f_2, emit_xyzw4_rgba4_st2)
-
-EMIT4(insert_4f_viewport_4, insert_4ub_4f_rgba_4, insert_2f_2, insert_2f_2, emit_viewport4_rgba4_st2_st2)
-EMIT4(insert_4f_viewport_4, insert_4ub_4f_bgra_4, insert_2f_2, insert_2f_2,  emit_viewport4_bgra4_st2_st2)
-EMIT4(insert_4f_4, insert_4ub_4f_rgba_4, insert_2f_2, insert_2f_2, emit_xyzw4_rgba4_st2_st2)
-
-
-/* Use the codegen paths to select one of a number of hardwired
- * fastpaths.
- */
-void vf_generate_hardwired_emit( struct vertex_fetch *vf )
-{
-   vf_emit_func func = NULL;
-
-   /* Does it fit a hardwired fastpath?  Help! this is growing out of
-    * control!
-    */
-   switch (vf->attr_count) {
-   case 2:
-      if (vf->attr[0].do_insert == insert_3f_viewport_3) {
-        if (vf->attr[1].do_insert == insert_4ub_4f_bgra_4) 
-           func = emit_viewport3_bgra4;
-        else if (vf->attr[1].do_insert == insert_4ub_4f_rgba_4) 
-           func = emit_viewport3_rgba4;
-      }
-      else if (vf->attr[0].do_insert == insert_3f_3 &&
-              vf->attr[1].do_insert == insert_4ub_4f_rgba_4) {
-        func = emit_xyz3_rgba4; 
-      }
-      break;
-   case 3:
-      if (vf->attr[2].do_insert == insert_2f_2) {
-        if (vf->attr[1].do_insert == insert_4ub_4f_rgba_4) {
-           if (vf->attr[0].do_insert == insert_4f_viewport_4)
-              func = emit_viewport4_rgba4_st2;
-           else if (vf->attr[0].do_insert == insert_4f_4) 
-              func = emit_xyzw4_rgba4_st2;
-        }
-        else if (vf->attr[1].do_insert == insert_4ub_4f_bgra_4 &&
-                 vf->attr[0].do_insert == insert_4f_viewport_4)
-           func = emit_viewport4_bgra4_st2;
-      }
-      break;
-   case 4:
-      if (vf->attr[2].do_insert == insert_2f_2 &&
-         vf->attr[3].do_insert == insert_2f_2) {
-        if (vf->attr[1].do_insert == insert_4ub_4f_rgba_4) {
-           if (vf->attr[0].do_insert == insert_4f_viewport_4)
-              func = emit_viewport4_rgba4_st2_st2;
-           else if (vf->attr[0].do_insert == insert_4f_4) 
-              func = emit_xyzw4_rgba4_st2_st2;
-        }
-        else if (vf->attr[1].do_insert == insert_4ub_4f_bgra_4 &&
-                 vf->attr[0].do_insert == insert_4f_viewport_4)
-           func = emit_viewport4_bgra4_st2_st2;
-      }
-      break;
-   }
-
-   vf->emit = func;
-}
-
-/***********************************************************************
- * Generic (non-codegen) functions for whole vertices or groups of
- * vertices
- */
-
-void vf_generic_emit( struct vertex_fetch *vf,
-                     GLuint count,
-                     GLubyte *v )
-{
-   struct vf_attr *a = vf->attr;
-   const GLuint attr_count = vf->attr_count;
-   const GLuint stride = vf->vertex_stride;
-   GLuint i, j;
-
-   for (i = 0 ; i < count ; i++, v += stride) {
-      for (j = 0; j < attr_count; j++) {
-        GLfloat *in = (GLfloat *)a[j].inputptr;
-        a[j].inputptr += a[j].inputstride;
-        a[j].do_insert( &a[j], v + a[j].vertoffset, in );
-      }
-   }
-}
-
-
diff --git a/src/mesa/vf/vf_sse.c b/src/mesa/vf/vf_sse.c
deleted file mode 100644 (file)
index 7b947b7..0000000
+++ /dev/null
@@ -1,662 +0,0 @@
-/*
- * Copyright 2003 Tungsten 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
- * 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
- * TUNGSTEN GRAPHICS 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:
- *    Keith Whitwell <keithw@tungstengraphics.com>
- */
-
-#include "main/glheader.h"
-#include "main/colormac.h"
-#include "main/simple_list.h"
-#include "main/enums.h"
-
-#include "vf/vf.h"
-
-#if defined(USE_SSE_ASM)
-
-#include "x86/rtasm/x86sse.h"
-#include "x86/common_x86_asm.h"
-
-
-#define X    0
-#define Y    1
-#define Z    2
-#define W    3
-
-
-struct x86_program {
-   struct x86_function func;
-
-   struct vertex_fetch *vf;
-   GLboolean inputs_safe;
-   GLboolean outputs_safe;
-   GLboolean have_sse2;
-   
-   struct x86_reg identity;
-   struct x86_reg chan0;
-};
-
-
-static struct x86_reg get_identity( struct x86_program *p )
-{
-   return p->identity;
-}
-
-static void emit_load4f_4( struct x86_program *p,                         
-                          struct x86_reg dest,
-                          struct x86_reg arg0 )
-{
-   sse_movups(&p->func, dest, arg0);
-}
-
-static void emit_load4f_3( struct x86_program *p, 
-                          struct x86_reg dest,
-                          struct x86_reg arg0 )
-{
-   /* Have to jump through some hoops:
-    *
-    * c 0 0 0
-    * c 0 0 1
-    * 0 0 c 1
-    * a b c 1
-    */
-   sse_movss(&p->func, dest, x86_make_disp(arg0, 8));
-   sse_shufps(&p->func, dest, get_identity(p), SHUF(X,Y,Z,W) );
-   sse_shufps(&p->func, dest, dest, SHUF(Y,Z,X,W) );
-   sse_movlps(&p->func, dest, arg0);
-}
-
-static void emit_load4f_2( struct x86_program *p, 
-                          struct x86_reg dest,
-                          struct x86_reg arg0 )
-{
-   /* Initialize from identity, then pull in low two words:
-    */
-   sse_movups(&p->func, dest, get_identity(p));
-   sse_movlps(&p->func, dest, arg0);
-}
-
-static void emit_load4f_1( struct x86_program *p, 
-                          struct x86_reg dest,
-                          struct x86_reg arg0 )
-{
-   /* Pull in low word, then swizzle in identity */
-   sse_movss(&p->func, dest, arg0);
-   sse_shufps(&p->func, dest, get_identity(p), SHUF(X,Y,Z,W) );
-}
-
-
-
-static void emit_load3f_3( struct x86_program *p,                         
-                          struct x86_reg dest,
-                          struct x86_reg arg0 )
-{
-   /* Over-reads by 1 dword - potential SEGV if input is a vertex
-    * array.
-    */
-   if (p->inputs_safe) {
-      sse_movups(&p->func, dest, arg0);
-   } 
-   else {
-      /* c 0 0 0
-       * c c c c
-       * a b c c 
-       */
-      sse_movss(&p->func, dest, x86_make_disp(arg0, 8));
-      sse_shufps(&p->func, dest, dest, SHUF(X,X,X,X));
-      sse_movlps(&p->func, dest, arg0);
-   }
-}
-
-static void emit_load3f_2( struct x86_program *p, 
-                          struct x86_reg dest,
-                          struct x86_reg arg0 )
-{
-   emit_load4f_2(p, dest, arg0);
-}
-
-static void emit_load3f_1( struct x86_program *p, 
-                          struct x86_reg dest,
-                          struct x86_reg arg0 )
-{
-   emit_load4f_1(p, dest, arg0);
-}
-
-static void emit_load2f_2( struct x86_program *p, 
-                          struct x86_reg dest,
-                          struct x86_reg arg0 )
-{
-   sse_movlps(&p->func, dest, arg0);
-}
-
-static void emit_load2f_1( struct x86_program *p, 
-                          struct x86_reg dest,
-                          struct x86_reg arg0 )
-{
-   emit_load4f_1(p, dest, arg0);
-}
-
-static void emit_load1f_1( struct x86_program *p, 
-                          struct x86_reg dest,
-                          struct x86_reg arg0 )
-{
-   sse_movss(&p->func, dest, arg0);
-}
-
-static void (*load[4][4])( struct x86_program *p, 
-                          struct x86_reg dest,
-                          struct x86_reg arg0 ) = {
-   { emit_load1f_1, 
-     emit_load1f_1, 
-     emit_load1f_1, 
-     emit_load1f_1 },
-
-   { emit_load2f_1, 
-     emit_load2f_2, 
-     emit_load2f_2, 
-     emit_load2f_2 },
-
-   { emit_load3f_1, 
-     emit_load3f_2, 
-     emit_load3f_3, 
-     emit_load3f_3 },
-
-   { emit_load4f_1, 
-     emit_load4f_2, 
-     emit_load4f_3, 
-     emit_load4f_4 } 
-};
-
-static void emit_load( struct x86_program *p,
-                      struct x86_reg dest,
-                      GLuint sz,
-                      struct x86_reg src,
-                      GLuint src_sz)
-{
-   load[sz-1][src_sz-1](p, dest, src);
-}
-
-static void emit_store4f( struct x86_program *p,                          
-                         struct x86_reg dest,
-                         struct x86_reg arg0 )
-{
-   sse_movups(&p->func, dest, arg0);
-}
-
-static void emit_store3f( struct x86_program *p, 
-                         struct x86_reg dest,
-                         struct x86_reg arg0 )
-{
-   if (p->outputs_safe) {
-      /* Emit the extra dword anyway.  This may hurt writecombining,
-       * may cause other problems.
-       */
-      sse_movups(&p->func, dest, arg0);
-   }
-   else {
-      /* Alternate strategy - emit two, shuffle, emit one.
-       */
-      sse_movlps(&p->func, dest, arg0);
-      sse_shufps(&p->func, arg0, arg0, SHUF(Z,Z,Z,Z) ); /* NOTE! destructive */
-      sse_movss(&p->func, x86_make_disp(dest,8), arg0);
-   }
-}
-
-static void emit_store2f( struct x86_program *p, 
-                          struct x86_reg dest,
-                          struct x86_reg arg0 )
-{
-   sse_movlps(&p->func, dest, arg0);
-}
-
-static void emit_store1f( struct x86_program *p, 
-                         struct x86_reg dest,
-                         struct x86_reg arg0 )
-{
-   sse_movss(&p->func, dest, arg0);
-}
-
-
-static void (*store[4])( struct x86_program *p, 
-                        struct x86_reg dest,
-                        struct x86_reg arg0 ) = 
-{
-   emit_store1f, 
-   emit_store2f, 
-   emit_store3f, 
-   emit_store4f 
-};
-
-static void emit_store( struct x86_program *p,
-                       struct x86_reg dest,
-                       GLuint sz,
-                       struct x86_reg temp )
-
-{
-   store[sz-1](p, dest, temp);
-}
-
-static void emit_pack_store_4ub( struct x86_program *p,
-                                struct x86_reg dest,
-                                struct x86_reg temp )
-{
-   /* Scale by 255.0
-    */
-   sse_mulps(&p->func, temp, p->chan0);
-
-   if (p->have_sse2) {
-      sse2_cvtps2dq(&p->func, temp, temp);
-      sse2_packssdw(&p->func, temp, temp);
-      sse2_packuswb(&p->func, temp, temp);
-      sse_movss(&p->func, dest, temp);
-   }
-   else {
-      struct x86_reg mmx0 = x86_make_reg(file_MMX, 0);
-      struct x86_reg mmx1 = x86_make_reg(file_MMX, 1);
-      sse_cvtps2pi(&p->func, mmx0, temp);
-      sse_movhlps(&p->func, temp, temp);
-      sse_cvtps2pi(&p->func, mmx1, temp);
-      mmx_packssdw(&p->func, mmx0, mmx1);
-      mmx_packuswb(&p->func, mmx0, mmx0);
-      mmx_movd(&p->func, dest, mmx0);
-   }
-}
-
-static GLint get_offset( const void *a, const void *b )
-{
-   return (const char *)b - (const char *)a;
-}
-
-/* Not much happens here.  Eventually use this function to try and
- * avoid saving/reloading the source pointers each vertex (if some of
- * them can fit in registers).
- */
-static void get_src_ptr( struct x86_program *p,
-                        struct x86_reg srcREG,
-                        struct x86_reg vfREG,
-                        struct vf_attr *a )
-{
-   struct vertex_fetch *vf = p->vf;
-   struct x86_reg ptr_to_src = x86_make_disp(vfREG, get_offset(vf, &a->inputptr));
-
-   /* Load current a[j].inputptr
-    */
-   x86_mov(&p->func, srcREG, ptr_to_src);
-}
-
-static void update_src_ptr( struct x86_program *p,
-                        struct x86_reg srcREG,
-                        struct x86_reg vfREG,
-                        struct vf_attr *a )
-{
-   if (a->inputstride) {
-      struct vertex_fetch *vf = p->vf;
-      struct x86_reg ptr_to_src = x86_make_disp(vfREG, get_offset(vf, &a->inputptr));
-
-      /* add a[j].inputstride (hardcoded value - could just as easily
-       * pull the stride value from memory each time).
-       */
-      x86_lea(&p->func, srcREG, x86_make_disp(srcREG, a->inputstride));
-      
-      /* save new value of a[j].inputptr 
-       */
-      x86_mov(&p->func, ptr_to_src, srcREG);
-   }
-}
-
-
-/* Lots of hardcoding
- *
- * EAX -- pointer to current output vertex
- * ECX -- pointer to current attribute 
- * 
- */
-static GLboolean build_vertex_emit( struct x86_program *p )
-{
-   struct vertex_fetch *vf = p->vf;
-   GLuint j = 0;
-
-   struct x86_reg vertexEAX = x86_make_reg(file_REG32, reg_AX);
-   struct x86_reg srcECX = x86_make_reg(file_REG32, reg_CX);
-   struct x86_reg countEBP = x86_make_reg(file_REG32, reg_BP);
-   struct x86_reg vfESI = x86_make_reg(file_REG32, reg_SI);
-   struct x86_reg temp = x86_make_reg(file_XMM, 0);
-   struct x86_reg vp0 = x86_make_reg(file_XMM, 1);
-   struct x86_reg vp1 = x86_make_reg(file_XMM, 2);
-   GLubyte *fixup, *label;
-
-   /* Push a few regs?
-    */
-   x86_push(&p->func, countEBP);
-   x86_push(&p->func, vfESI);
-
-
-   /* Get vertex count, compare to zero
-    */
-   x86_xor(&p->func, srcECX, srcECX);
-   x86_mov(&p->func, countEBP, x86_fn_arg(&p->func, 2));
-   x86_cmp(&p->func, countEBP, srcECX);
-   fixup = x86_jcc_forward(&p->func, cc_E);
-
-   /* Initialize destination register. 
-    */
-   x86_mov(&p->func, vertexEAX, x86_fn_arg(&p->func, 3));
-
-   /* Move argument 1 (vf) into a reg:
-    */
-   x86_mov(&p->func, vfESI, x86_fn_arg(&p->func, 1));
-
-   
-   /* Possibly load vp0, vp1 for viewport calcs:
-    */
-   if (vf->allow_viewport_emits) {
-      sse_movups(&p->func, vp0, x86_make_disp(vfESI, get_offset(vf, &vf->vp[0])));
-      sse_movups(&p->func, vp1, x86_make_disp(vfESI, get_offset(vf, &vf->vp[4])));
-   }
-
-   /* always load, needed or not:
-    */
-   sse_movups(&p->func, p->chan0, x86_make_disp(vfESI, get_offset(vf, &vf->chan_scale[0])));
-   sse_movups(&p->func, p->identity, x86_make_disp(vfESI, get_offset(vf, &vf->identity[0])));
-
-   /* Note address for loop jump */
-   label = x86_get_label(&p->func);
-
-   /* Emit code for each of the attributes.  Currently routes
-    * everything through SSE registers, even when it might be more
-    * efficient to stick with regular old x86.  No optimization or
-    * other tricks - enough new ground to cover here just getting
-    * things working.
-    */
-   while (j < vf->attr_count) {
-      struct vf_attr *a = &vf->attr[j];
-      struct x86_reg dest = x86_make_disp(vertexEAX, a->vertoffset);
-
-      /* Now, load an XMM reg from src, perhaps transform, then save.
-       * Could be shortcircuited in specific cases:
-       */
-      switch (a->format) {
-      case EMIT_1F:
-        get_src_ptr(p, srcECX, vfESI, a);
-        emit_load(p, temp, 1, x86_deref(srcECX), a->inputsize);
-        emit_store(p, dest, 1, temp);
-        update_src_ptr(p, srcECX, vfESI, a);
-        break;
-      case EMIT_2F:
-        get_src_ptr(p, srcECX, vfESI, a);
-        emit_load(p, temp, 2, x86_deref(srcECX), a->inputsize);
-        emit_store(p, dest, 2, temp);
-        update_src_ptr(p, srcECX, vfESI, a);
-        break;
-      case EMIT_3F:
-        /* Potentially the worst case - hardcode 2+1 copying:
-         */
-        if (0) {
-           get_src_ptr(p, srcECX, vfESI, a);
-           emit_load(p, temp, 3, x86_deref(srcECX), a->inputsize);
-           emit_store(p, dest, 3, temp);
-           update_src_ptr(p, srcECX, vfESI, a);
-        }
-        else {
-           get_src_ptr(p, srcECX, vfESI, a);
-           emit_load(p, temp, 2, x86_deref(srcECX), a->inputsize);
-           emit_store(p, dest, 2, temp);
-           if (a->inputsize > 2) {
-              emit_load(p, temp, 1, x86_make_disp(srcECX, 8), 1);
-              emit_store(p, x86_make_disp(dest,8), 1, temp);
-           }
-           else {
-              sse_movss(&p->func, x86_make_disp(dest,8), get_identity(p));
-           }
-           update_src_ptr(p, srcECX, vfESI, a);
-        }
-        break;
-      case EMIT_4F:
-        get_src_ptr(p, srcECX, vfESI, a);
-        emit_load(p, temp, 4, x86_deref(srcECX), a->inputsize);
-        emit_store(p, dest, 4, temp);
-        update_src_ptr(p, srcECX, vfESI, a);
-        break;
-      case EMIT_2F_VIEWPORT: 
-        get_src_ptr(p, srcECX, vfESI, a);
-        emit_load(p, temp, 2, x86_deref(srcECX), a->inputsize);
-        sse_mulps(&p->func, temp, vp0);
-        sse_addps(&p->func, temp, vp1);
-        emit_store(p, dest, 2, temp);
-        update_src_ptr(p, srcECX, vfESI, a);
-        break;
-      case EMIT_3F_VIEWPORT: 
-        get_src_ptr(p, srcECX, vfESI, a);
-        emit_load(p, temp, 3, x86_deref(srcECX), a->inputsize);
-        sse_mulps(&p->func, temp, vp0);
-        sse_addps(&p->func, temp, vp1);
-        emit_store(p, dest, 3, temp);
-        update_src_ptr(p, srcECX, vfESI, a);
-        break;
-      case EMIT_4F_VIEWPORT: 
-        get_src_ptr(p, srcECX, vfESI, a);
-        emit_load(p, temp, 4, x86_deref(srcECX), a->inputsize);
-        sse_mulps(&p->func, temp, vp0);
-        sse_addps(&p->func, temp, vp1);
-        emit_store(p, dest, 4, temp);
-        update_src_ptr(p, srcECX, vfESI, a);
-        break;
-      case EMIT_3F_XYW:
-        get_src_ptr(p, srcECX, vfESI, a);
-        emit_load(p, temp, 4, x86_deref(srcECX), a->inputsize);
-        sse_shufps(&p->func, temp, temp, SHUF(X,Y,W,Z));
-        emit_store(p, dest, 3, temp);
-        update_src_ptr(p, srcECX, vfESI, a);
-        break;
-
-      case EMIT_1UB_1F:         
-        /* Test for PAD3 + 1UB:
-         */
-        if (j > 0 &&
-            a[-1].vertoffset + a[-1].vertattrsize <= a->vertoffset - 3)
-        {
-           get_src_ptr(p, srcECX, vfESI, a);
-           emit_load(p, temp, 1, x86_deref(srcECX), a->inputsize);
-           sse_shufps(&p->func, temp, temp, SHUF(X,X,X,X));
-           emit_pack_store_4ub(p, x86_make_disp(dest, -3), temp); /* overkill! */
-           update_src_ptr(p, srcECX, vfESI, a);
-        }
-        else {
-           printf("Can't emit 1ub %x %x %d\n", a->vertoffset, a[-1].vertoffset, a[-1].vertattrsize );
-           return GL_FALSE;
-        }
-        break;
-      case EMIT_3UB_3F_RGB:
-      case EMIT_3UB_3F_BGR:
-        /* Test for 3UB + PAD1:
-         */
-        if (j == vf->attr_count - 1 ||
-            a[1].vertoffset >= a->vertoffset + 4) {
-           get_src_ptr(p, srcECX, vfESI, a);
-           emit_load(p, temp, 3, x86_deref(srcECX), a->inputsize);
-           if (a->format == EMIT_3UB_3F_BGR)
-              sse_shufps(&p->func, temp, temp, SHUF(Z,Y,X,W));
-           emit_pack_store_4ub(p, dest, temp);
-           update_src_ptr(p, srcECX, vfESI, a);
-        }
-        /* Test for 3UB + 1UB:
-         */
-        else if (j < vf->attr_count - 1 &&
-                 a[1].format == EMIT_1UB_1F &&
-                 a[1].vertoffset == a->vertoffset + 3) {
-           get_src_ptr(p, srcECX, vfESI, a);
-           emit_load(p, temp, 3, x86_deref(srcECX), a->inputsize);
-           update_src_ptr(p, srcECX, vfESI, a);
-
-           /* Make room for incoming value:
-            */
-           sse_shufps(&p->func, temp, temp, SHUF(W,X,Y,Z));
-
-           get_src_ptr(p, srcECX, vfESI, &a[1]);
-           emit_load(p, temp, 1, x86_deref(srcECX), a[1].inputsize);
-           update_src_ptr(p, srcECX, vfESI, &a[1]);
-
-           /* Rearrange and possibly do BGR conversion:
-            */
-           if (a->format == EMIT_3UB_3F_BGR)
-              sse_shufps(&p->func, temp, temp, SHUF(W,Z,Y,X));
-           else
-              sse_shufps(&p->func, temp, temp, SHUF(Y,Z,W,X));
-
-           emit_pack_store_4ub(p, dest, temp);
-           j++;                /* NOTE: two attrs consumed */
-        }
-        else {
-           printf("Can't emit 3ub\n");
-        }
-        return GL_FALSE;       /* add this later */
-        break;
-
-      case EMIT_4UB_4F_RGBA:
-        get_src_ptr(p, srcECX, vfESI, a);
-        emit_load(p, temp, 4, x86_deref(srcECX), a->inputsize);
-        emit_pack_store_4ub(p, dest, temp);
-        update_src_ptr(p, srcECX, vfESI, a);
-        break;
-      case EMIT_4UB_4F_BGRA:
-        get_src_ptr(p, srcECX, vfESI, a);
-        emit_load(p, temp, 4, x86_deref(srcECX), a->inputsize);
-        sse_shufps(&p->func, temp, temp, SHUF(Z,Y,X,W));
-        emit_pack_store_4ub(p, dest, temp);
-        update_src_ptr(p, srcECX, vfESI, a);
-        break;
-      case EMIT_4UB_4F_ARGB:
-        get_src_ptr(p, srcECX, vfESI, a);
-        emit_load(p, temp, 4, x86_deref(srcECX), a->inputsize);
-        sse_shufps(&p->func, temp, temp, SHUF(W,X,Y,Z));
-        emit_pack_store_4ub(p, dest, temp);
-        update_src_ptr(p, srcECX, vfESI, a);
-        break;
-      case EMIT_4UB_4F_ABGR:
-        get_src_ptr(p, srcECX, vfESI, a);
-        emit_load(p, temp, 4, x86_deref(srcECX), a->inputsize);
-        sse_shufps(&p->func, temp, temp, SHUF(W,Z,Y,X));
-        emit_pack_store_4ub(p, dest, temp);
-        update_src_ptr(p, srcECX, vfESI, a);
-        break;
-      case EMIT_4CHAN_4F_RGBA:
-        switch (CHAN_TYPE) {
-        case GL_UNSIGNED_BYTE:
-           get_src_ptr(p, srcECX, vfESI, a);
-           emit_load(p, temp, 4, x86_deref(srcECX), a->inputsize);
-           emit_pack_store_4ub(p, dest, temp);
-           update_src_ptr(p, srcECX, vfESI, a);
-           break;
-        case GL_FLOAT:
-           get_src_ptr(p, srcECX, vfESI, a);
-           emit_load(p, temp, 4, x86_deref(srcECX), a->inputsize);
-           emit_store(p, dest, 4, temp);
-           update_src_ptr(p, srcECX, vfESI, a);
-           break;
-        case GL_UNSIGNED_SHORT:
-        default:
-           printf("unknown CHAN_TYPE %s\n", _mesa_lookup_enum_by_nr(CHAN_TYPE));
-           return GL_FALSE;
-        }
-        break;
-      default:
-        printf("unknown a[%d].format %d\n", j, a->format);
-        return GL_FALSE;       /* catch any new opcodes */
-      }
-      
-      /* Increment j by at least 1 - may have been incremented above also:
-       */
-      j++;
-   }
-
-   /* Next vertex:
-    */
-   x86_lea(&p->func, vertexEAX, x86_make_disp(vertexEAX, vf->vertex_stride));
-
-   /* decr count, loop if not zero
-    */
-   x86_dec(&p->func, countEBP);
-   x86_test(&p->func, countEBP, countEBP); 
-   x86_jcc(&p->func, cc_NZ, label);
-
-   /* Exit mmx state?
-    */
-   if (p->func.need_emms)
-      mmx_emms(&p->func);
-
-   /* Land forward jump here:
-    */
-   x86_fixup_fwd_jump(&p->func, fixup);
-
-   /* Pop regs and return
-    */
-   x86_pop(&p->func, x86_get_base_reg(vfESI));
-   x86_pop(&p->func, countEBP);
-   x86_ret(&p->func);
-
-   vf->emit = (vf_emit_func)x86_get_func(&p->func);
-   return GL_TRUE;
-}
-
-
-
-void vf_generate_sse_emit( struct vertex_fetch *vf )
-{
-   struct x86_program p;   
-
-   if (!cpu_has_xmm) {
-      vf->codegen_emit = NULL;
-      return;
-   }
-
-   memset(&p, 0, sizeof(p));
-
-   p.vf = vf;
-   p.inputs_safe = 0;          /* for now */
-   p.outputs_safe = 0;         /* for now */
-   p.have_sse2 = cpu_has_xmm2;
-   p.identity = x86_make_reg(file_XMM, 6);
-   p.chan0 = x86_make_reg(file_XMM, 7);
-
-   x86_init_func(&p.func);
-
-   if (build_vertex_emit(&p)) {
-      vf_register_fastpath( vf, GL_TRUE );
-   }
-   else {
-      /* Note the failure so that we don't keep trying to codegen an
-       * impossible state:
-       */
-      vf_register_fastpath( vf, GL_FALSE );
-      x86_release_func(&p.func);
-   }
-}
-
-#else
-
-void vf_generate_sse_emit( struct vertex_fetch *vf )
-{
-   /* Dummy version for when USE_SSE_ASM not defined */
-}
-
-#endif